碎碎思 · 2022年03月17日

FPGA中仿真概念

FPGA中仿真概念

image.png
需要对输入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所示。

image.png

示例9.1 Verilog阻塞赋值的仿真

image.png

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

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

image.png

表9.1 always和initial之间的差异
image.png

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

具有赋值延迟的阻塞赋值

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

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

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

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

image.png

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

image.png

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

image.png

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

使用Verilog进行仿真

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

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

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

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

示例9.8 Verilog环形计数器的testbench

image.png

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

原文:OpenFPGA
作者:碎碎思

相关文章推荐

更多FPGA技术干货请关注FPGA 的逻辑技术专栏。
推荐阅读
关注数
10614
内容数
577
FPGA Logic 二三事
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息