在我工作的地方,有两个FPGA设计人员阵营。我称其为“模拟”,“模拟”,“模拟”或“立方体”。另一个阵营全都与设计有关。
s立方人员使用了像modelim这样的模拟器,他们将通过编码方法和/或设计套件中的模块来进行初始设计。然后他们将对其进行仿真,并找出不起作用的内容,然后更改代码。这个过程反复进行了多次,直到他们提出了可行的设计。
设计阵营(我更喜欢)将在纸上(或像visio这样的数字纸)上设计波形,正是所需的波形。然后拿出一个逻辑图。这是一个自我记录过程。然后将图转换为代码(如果图中有某些内容,则代码和图中的比例为1:1,代码中有一个处理过程)。然后对其进行仿真,并将仿真波形与纸上设计的波形进行比较,并期望相同。
我最终都做完了,有时候我会进入立方模式,这不是很有趣。我发现有时我看不到自己的目标。例如,我将更改状态机中的状态,并且更改将降级到下一个状态,然后必须修复该状态。我最终花了更多的时间而不是思考它。
您宁愿在哪个营地?我认为需要进行严格的设计,为您解决问题,但是我认为设计越详细,越严格,从长远来看,您遇到的问题就越少。我举了一些可能的例子,它们可能不适合您工作场所的组织结构。设计细节和仔细计划之所以如此有用的原因是,它迫使您考虑自己的工作。它使调试变得容易。开发一个设计流程,以实现这一目标。此外,请真正熟悉仿真工具并编写良好的测试平台,以测试仿真设备可能遇到的所有条件。当然,这需要与时间保持平衡。例如,编写ADC HDL代码以在模拟中模拟器件。
在我看来,FPGA设计中最有价值的工具是良好的测试程序,可让您全面测试您的设计并逐步进行设计。不能指望FPGA设计能够“正常工作”,而是要花大力气确保所有部分都能正常工作。如果发现错误,请返回仿真和设计,了解仿真的FPGA和RTL之间的区别。这主要是由经验带来的,但是,如果设计可以在仿真中工作,而不能在硬件中工作,那么您需要找出为什么会有所不同。
我学到了一些关键的知识:
1)清理您的输入,时钟和复位电路需要保持清洁,否则您可能会通过系统传播亚稳态。知道什么是双等级同步器。复位电路有许多不同的拓扑结构,知道如何使用它们(网络上有一篇很棒的文章,不过我手头上没有。)
2)预先获取设计要求,然后围绕这些要求进行设计。如果您周围的人不会给您明确的要求,请自己提出一些要求。
3)Matlab定点工具箱非常适合模拟控制系统和DSP应用程序,但是您可能无法访问它。这是在编写代码之前验证设计的好方法。
4)首先是设计,然后是编码,然后是仿真。
5)强类型,在PCB原理图和HDL上还要保持信号名称一致。(这也是为什么我更喜欢VHDL而不是verilog的原因。