在我工作的地方,有两个 FPGA 设计师阵营。我称之为模拟、模拟、模拟或立方的一个营地。另一个阵营都是关于设计的。
s 立方体的家伙使用像 modelsim 这样的模拟器,他们会通过编码方法和/或设计套件中的块来提出初始设计。然后他们会模拟它并找到不起作用的东西,然后更改代码。这个过程重复了好几次,直到他们想出了一个可行的设计。
设计阵营(我更喜欢)会在纸上(或像 visio 这样的数字纸)上设计波形,这正是所需要的。然后拿出一个逻辑图。这是一个自我记录的过程。然后将图表转换为代码(代码和图表是 1:1 的,如果图表中有东西,代码中就有处理它的过程)。然后进行仿真,将仿真波形与纸上设计的波形进行对比,预期一致。
我最终都做了,有时我会进入 s 立方模式,这不是很有趣。我发现我有时会忘记自己的目标。例如,我会更改状态机中的状态,并且更改会波及到下一个状态,然后我必须修复它。我最终花了更多的时间而不是考虑它。
你更愿意去哪个阵营?我认为需要严谨的设计,做适合你的事情,但我认为你设计得越细致严谨,从长远来看,你遇到的问题就越少。我举了一些可能的例子,它们可能不适合你工作场所的组织结构。设计细节和仔细规划之所以如此有用,是因为它迫使你思考你在做什么。它使调试变得容易。开发一个允许这种情况发生的设计工作流程。此外,要真正熟悉模拟工具并编写好的测试平台,以测试模拟设备可能遇到的所有条件。这当然需要与时间平衡。例如,编写 ADC HDL 代码,在您的模拟中模拟设备。
FPGA 设计中最有价值的工具(在我看来)是一个很好的测试程序,它可以让您全面测试您的设计并按照它的速度运行它。不能期望 FPGA 设计“正常工作”,它需要努力确保所有部分都工作。如果发现错误,请返回仿真和设计,了解仿真 FPGA 和 RTL 之间的区别。这主要来自经验,但如果设计在模拟中有效,而不是在硬件中有效,那么您需要找出为什么会有差异。
我学到了一些关键的东西:
1)清理你的输入,时钟和复位电路需要干净,否则你可以通过你的系统传播亚稳态。了解什么是双列同步器。复位电路有许多不同的拓扑结构,知道如何使用它们(网上有一篇很棒的文章,不过我手头没有)。
2) 预先了解设计要求,然后围绕这些要求进行设计。如果你周围的人不会给你明确的要求,那么你自己想出一些。
3) Matlab 定点工具箱非常适合模拟控制系统和 DSP 应用程序,但您可能无权使用它。这是在编码之前证明设计的好方法。
4) 先设计,再编码,再模拟。
5) 强类型,同时保持 pcb 原理图和 hdl 上的信号名称一致。(这也是为什么我更喜欢 VHDL 而不是 verilog。