FPGA中仿真概念

2022-04-14 10:24:37 浏览数 (1)

FPGA中仿真概念

需要对输入Verilog或VHDL的设计进行仿真,以检查设计的功能正确性。对于HDL RTL功能,需要使用不可综合的Verilog结构编写测试台。

阻塞和非阻塞赋值的仿真

不可综合Verilog RTL由示例9.1中所示的阻塞赋值组成。

在本例中,程序“always”块每次在时钟“clk”上的事件上执行,“initial”块仅执行一次,用于将值赋值给“a”、“b”、“c”和“d”。非阻塞赋值的仿真结果如波形9.1所示。

考虑Verilog RTL由示例9.2中所示的非阻塞赋值组成。

使用非阻塞的上述Verilog代码的仿真结果如波形9.2所示。

示例9.1 Verilog阻塞赋值的仿真

波形9.1 Verilog阻塞赋值的仿真结果

示例9.2 Verilog非阻塞赋值的仿真

表9.1 always和initial之间的差异

Initial

Always

在这种情况下,阻塞赋值在0仿真时间内执行,并在下一个指定序列中继续执行

在这种情况下,阻塞赋值将在仿真时间0内继续执行,并根据灵敏度列表事件永远重复

此块仅执行一次,仿真在此块结束时停止

此块中的仿真将永远继续。如果存在等待语句,则它将在仿真会话期间保持

它是不可综合的结构(特殊情况下可以)

它是可综合的结构

表9.1中描述了always和initial块之间的差异。

具有赋值延迟的阻塞赋值

内部赋值延迟了阻塞赋值,延迟了赋值的评估和赋值的更新。

考虑下面示例9.3中所示的Verilog代码。

波形9.3给出了具有赋值延迟的阻塞赋值的仿真结果。

示例9.3具有赋值延迟的Verilog阻塞赋值

具有内部赋值延迟的阻塞赋值

内部赋值延迟阻塞赋值,延迟赋值的评估,但不延迟赋值的更新。

考虑下面示例9.4中所示的Verilog代码。

波形9.4给出了具有内部赋值延迟的阻塞赋值的仿真结果。

示例9.4具有内部赋值延迟的Verilog阻塞赋值

波形9.4具有内部赋值延迟的Verilog阻塞赋值的仿真结果

具有赋值间延迟的非阻塞赋值

内部赋值延迟和非阻塞赋值延迟赋值的评估和赋值的更新。

考虑下面示例9.5中所示的Verilog代码。

波形9.5给出了具有赋值间延迟的非阻塞赋值的仿真结果。

示例9.5具有赋值间延迟的Verilog非阻塞赋值

波形9.5具有赋值间延迟的Verilog非阻塞赋值的仿真结果

具有内部赋值延迟的非阻塞赋值

内部赋值延迟阻塞赋值、赋值更新,但不延迟赋值评估。

考虑下面示例9.6中所示的Verilog代码。

波形9.6给出了具有内部赋值延迟的阻塞赋值的仿真结果。

示例9.6具有内部赋值延迟的Verilog非阻塞赋值

波形9.6具有内部赋值延迟的Verilog非阻塞赋值的仿真结果

使用Verilog进行仿真

之前,我们讨论了详细设计综合和硬件推断。Verilog HDL对于设计的仿真功能非常强大。通过使用非综合结构,可以验证Verilog验证下设计(DUV),以确定设计的功能正确性。考虑具有输入为“clk”和“reset_n”的环形计数器的简单Verilog设计,并且计数器具有四位输出“q_out [3:0]”,在示例9.7中示出了环形计数器的RTL描述。 

示例9.7使用Verilog HDL的四位环形计数器

示例9.8描述了环形计数器的testbench,并将激励施加到DUV上。

上述testbench产生波形9.7所示的结果。

如上所述,基本仿真可以通过编写testbench来执行,该testbench可以强制激励被测试的设计。对于复杂度较低的FPGA设计,这种方法是可行的。但是对于大型SOC设计模块,使用复杂的自检测试台是必不可少的。验证工程师必须了解测试用例、测试计划和测试向量的创建。即使是最好的行业实践也是通过使用驱动程序、监视器和检查器来使用验证体系结构。此讨论超出了基于FPGA的设计范围。

示例9.8 Verilog环形计数器的testbench

波形9.7环形计数器的仿真结果

0 人点赞