逻辑设计初学者
当然有必要!我以前也跟你一样,写固定激励,但后来项目大了,发现根本测不全。FPGA设计现在也越来越复杂,上板调试一次成本很高,仿真里多发现问题才是王道。
我的建议是,如果你用的Vivado或Quartus,它们其实都支持SystemVerilog,只是可能有些语法限制。你可以先从SystemVerilog的随机化开始,不用搞得太复杂。
第一步,别急着上UVM那种重型框架。先把你的testbench里的输入信号,用`rand`关键字声明成随机变量。比如`rand logic [7:0] data_in;`。
第二步,写个`constraint`块,给随机加点约束。别让它完全乱跑,比如约束一下数据范围,或者几个信号之间的相互关系。这能保证随机出来的激励是有意义的,不会一开始就违反协议。
第三步,在initial块里用`randomize()`函数来生成。可以放在一个循环里,跑很多次。
关于覆盖率,SystemVerilog有`covergroup`和`coverpoint`。你可以先定义几个关键信号或者状态机的状态作为覆盖点。跑完仿真,看看覆盖率报告,就知道哪些情况没测到。
工具的话,Modelsim、VCS这些仿真器都支持。如果你用Vivado自带的仿真器(XSim),从2018版左右也开始支持不少SystemVerilog特性了,查一下官方文档确认支持程度。
刚开始可能会觉得有点绕,但习惯后效率提升巨大。你想想,用固定测试你可能想了10个case,用约束随机,它可能帮你跑出100个你没想到但合理的case。
注意一个坑:仿真时间会变长。所以随机测试时,最好能设置一个合理的终止条件,比如达到某个覆盖率目标,或者跑完N个随机种子。
先从一个模块试起,别一下子铺到整个系统。慢慢来,比较快。
