一些基本概念
VCS:编译型Verilog模拟器
RTL:
RTL全称为 Register Transfer Level,是指寄存器传输级别。在数字电路设计中,RTL是一种常用的设计风格,它描述数字电路中各个模块之间的数据传输和状态转移。RTL设计以寄存器和组合逻辑电路为基础,通过对这些电路的连线及输入输出延迟的计算,来实现整个系统的功能。
在RTL设计中,每个模块被描述为一个黑盒子,该模块的输入和输出信号被定义为接口。以此为基础,设计者可以将不同的模块组合在一起,实现完整的电路。每个模块都有一组寄存器,用于存储和传输数据。这些寄存器按照时钟信号进行同步,以确保电路的正确性和稳定性。
由于RTL设计采用静态结构,理论上可以实现非常高的时钟频率。同时,由于模块化设计使得电路可重用性更强,方便验证和维护。因此,在数字电路设计中,RTL设计已经成为一种常用的设计风格。
需要注意的是,RTL设计中并不直接表示物理元件,而是表示元件的逻辑行为。实际物理实现可以通过语法转换和综合工具完成。
SystemVerilog:
SystemVerilog是一种硬件描述语言(HDL),被广泛用于硬件设计、验证和仿真。它扩展了Verilog HDL,并添加了一些额外的功能和语法,使其更适合于大规模的设计和验证。
SystemVerilog提供了以下主要功能:
-
模块化设计:可以使用模块来组织硬件设计,并通过层次化结构实现复杂的电路设计。
-
数据类型和变量:SystemVerilog引入了新的数据类型,如bit、logic、integer、real、struct和union等,可以灵活地定义和操作数据。
-
面向对象编程:支持面向对象编程的特性,如类、对象、继承和多态等,可以实现更结构化和可重用的代码。
-
时序建模:SystemVerilog提供了用于描述时序行为和同步逻辑的关键字和构造,如always、posedge、negedge、fork-join和disable等。
-
断言和验证:引入了断言语句(assertions)和约束语句(constraints),用于设计验证、约束和属性检查等。
-
接口和通信:SystemVerilog引入了接口(interface)的概念,使得模块之间可以进行更灵活的通信和互联。
-
仿真控制:提供了一些仿真控制语句和系统函数,用于控制仿真过程、读取文件、打印信息等。
SystemVerilog广泛应用于芯片设计、FPGA开发和验证等领域。它提供了强大的硬件建模和验证能力,可以用于从小规模集成电路到复杂的系统级设计的开发。
在terminal中输入:
which vcs
VCS(Verification and Control System)工具提供了命令行界面,用于执行与硬件验证相关的各种任务。以下是一些常用的VCS命令:
-
vcs:这是主要的命令,用于编译和仿真设计。它接受源文件(RTL设计、测试平台等)作为输入,并生成仿真可执行文件。
-
vlogan:该命令用于将Verilog、SystemVerilog或VHDL源文件编译为相应的中间表示形式(IR)。通常在vcs命令之前使用,用于编译设计文件。
-
vcsmx:该命令用于编译混合语言仿真环境,通过将Verilog、SystemVerilog或VHDL设计与C/C++/SystemC模型结合起来。
-
vcs -debug <选项>:该命令用于在运行时启用调试选项运行仿真。它允许对设计和测试平台进行交互式调试。
-
vcs -gui:该命令启动VCS的图形用户界面(GUI),提供一个可视化环境,用于交互式分析波形、设置断点和调试仿真。
-
vcs -R -full64:该命令运行仿真并自动执行测试平台。"-R"标志启用仿真的自动执行,而"-full64"标志启用64位仿真模式。
-
vcs -l <日志文件>:该命令将控制台输出重定向到指定的日志文件,以供后续分析和查看。
-
vcs -coverage <选项>:该命令在仿真过程中启用代码覆盖分析,可以测量测试平台对设计代码的覆盖率。
acroread vcsmx_ug.pdf即可打开vcs的工具手册
在terminal中输入:vcs -help>vcs.help(将手册的内容导入到另一个文件中方便查阅)
vi vcs.help
在linux terminal中输入dve即可启动GUI界面
问题1:如何验证一个32位加法器?(随机化策略)
穷举法:2^32×2^32=2^64ns > 500年
systemverilog验证平台中通过仿真命令传递随机seed方法
(1)首先修改makefile脚本,通过plusargs_save方法传递参数
SEED = $(shell date+%s) # 将日期转换为秒数
./simv +plusargs_save +seed=$(SEED) # ./simv 是要运行一个名为 simv 的可执行文件。+plusargs_save 是一个命令行参数,将种子seed和激励stimulus_n