按照Verilog同步设计开发流程,总结一些自己的体会。
(1)撰写“设计文档”
在开始一个新的项目时,在实际动手写Verilog代码之前,首先是撰写“设计文档”,设计文档需要包含项目需求(项目需求要明确)、工程架构模块设计、模块端口信号定义、状态机设计、关键模块的时序图设计。
(2)Verilog设计
按照设计文档,展开Verilog代码设计。在实施Verilog代码设计过程中,可能会有一些与设计文档不同的修改,这些修改,需要及时体现在设计文档中,即需要及时更新设计文档。
(3)功能仿真
工程Verilog代码设计完之后,有必要进行功能仿真,验证设计逻辑功能是否正常。
(4)板卡测试
功能仿真通过之后,是板卡测试阶段。在该阶段,需要借助chipscope等软件逻辑分析仪等来确认逻辑时序是否正常。
板卡测试问题汇总:
a.如在ISE工程中,若逻辑设计已经确定,但存在每次编译之间由于自动布局布线不同、导致最终的功能异常的问题,则需要对该工程进行多次编译测试,测试该逻辑版本,经过多次不同的编译,看看板卡测试功能是否正常。
多次编译中,可尝试修改Map properties/starting placer cost table这个参数,该参数的不同值可以确保每次编译之间有确定的不同的布局布线。
b.当一块板卡测试通过之后,并不意味着该逻辑版本能在所有的板卡中都能通过,因此,需要对大量的板卡进行测试,以验证该工程设计在所有板卡间的一致性。
上述a/b过程,容易出现在Verilog工程本身含有大量的异步逻辑设计调试中。大量的异步逻辑导致,每次编译的布局布线都会存在差异,而这些差异可能会导致最终的功能异常;此外,大量的异步逻辑,在不同板卡间的适应性、一致性可能不一样,即存在一个逻辑bit文件或flash文件,在一个板卡测试中能够正常通过,但在其他板卡测试中就通不过。
c.在调试中,可能会遇到状态机的第一个状态的输出不正常,但状态机正确的跳转到了第二和第三等依次的状态,在第二和之后的状态输出都正确,唯有第一个状态的输出异常。
这种问题,可能是状态跳转存在问题,状态机在状态跳转过程中发生了不确定的问题。可以排查第一个状态相关的状态转移条件,何时进入第一个状态、何时退出第一个状态?进入及退出的条件是什么?进入及退出状态的标志信号是否存在亚稳态?
建议,在设计中严格遵守同步设计规则,注意区分跨时钟域信号的处理。提高自己对多时钟域模块、跨时钟域模块及信号的敏感性,这是最容易导致一个工程不稳定性的原因。