Verilog设计验证及简单组合逻辑电路设计.ppt
《Verilog设计验证及简单组合逻辑电路设计.ppt》由会员分享,可在线阅读,更多相关《Verilog设计验证及简单组合逻辑电路设计.ppt(50页珍藏版)》请在三一办公上搜索。
1、第6讲 Verilog设计验证及简单组合逻辑电路设计,授课教师:邹兴平电邮地址:zou_,2023/11/8,2,一、verilog设计的仿真验证占据整个设计的6070%的工作量,需要很高的代码覆盖率,并不比设计可综合代码简单,2023/11/8,3,测试平台的组成,激励信号,需要验证的设计,激励信号和用于验证的结果数据,需要验证的设计,简单的测试平台,复杂的测试平台,2023/11/8,4,模块的测试,测试模块常见的形式:module t;reg;/被测模块输入/输出变量类型定义wire;/被测模块输入/输出变量类型定义initial begin;end/产生测试信号always#delay
2、 begin;end/产生测试信号Testedmd m(.in1(ina),.in2(inb),.out1(outa),.out2(outb);/被测模块的实例引用initial begin.;.;.end/记录输出和响应endmodule,2023/11/8,5,模块的测试,测试模块中常用的过程块:,always,所有的过程块都在0时刻同时启动;它们是并行的,在模块中不分前后。initial块 只执行一次。always块 只要符合触发条件可以循环执行。,2023/11/8,6,模块的测试,如何描述激励信号:module t;reg a,b,sel;wire out;/引用多路器实例 mux2
3、_m(out,a,b,sel);/加入激励信号initial begin a=0;b=1;sel=0;#10 b=0;#10 b=1;sel=1;#10 a=1;#10$stop;end,2023/11/8,7,并行块,在测试块中常用到forkjoin块。用并行块能表示以同一个时间起点算起的多个事件的运行,并行地执行复杂的过程结构,如循环或任务。举例说明如下:module inline_tb;reg 7:0 data_bus;initial fork data_bus=8b00;#10 data_bus=8h45;#20 repeat(10)#10 data_bus=data_bus+1;#2
4、5 repeat(5)#20 data_bus=data_bus 1;#140 data_bua=8h0f;joinendmodule,/这两个repeat开始执行时间不同,但能同时运行。,2023/11/8,8,并行块,时间 data_bus0 8b0000_000010 8b0100_010130 8b0100_011040 8b0100_011145 8b1000_111050 8b1000_111160 8b1001_000065 8b0010_000070 8b0010_0001,时间 data_bus80 8b0010_001085 8b0100_010090 8b0100_010
5、1 100 8b0010_0001105 8b0100_0110110 8b1000_1100120 8b1000_1110125 8b0001_1100140 8b0000_1111,上面模块的仿真输出如下:,2023/11/8,9,强制激励,在一个过程块中,可以用两种不同的方式对信号变量或表达式进行连续赋值。过程连续赋值往往是不可以综合的,通常用在测试模块中。两种方式都有各自配套的命令来停止赋值过程。两种不同方式均不允许赋值语句间的时间控制。assign和deassign 适用于对寄存器类型的信号(例如:RTL级上 的节点或测试模块中在多个地方被赋值的信号)进行赋值。initial beg
6、in#10 assign top.dut.fsml.state_reg=init_state;,2023/11/8,10,#20 deassign top.dut.fsml.state_reg;endforce 和 release 用于寄存器类型和网络连接类型(例如:门级扫描寄存器的输出)的强制赋值,强制改写其它地方的赋值。initial begin#10 force top.dut.counter.scan_reg.q=0;#20 release top.dut.counter.scan_reg.q;end 在以上两个例子中,在10到20 这个时间段内,网络或寄存器类型的信号被强制赋值,而别
7、处对该变量的赋值均无效。force的赋值优先级高于assign。如果先使用assign,再使用force对同一信号赋值,则信号的值为force所赋 的值,,字符串,强制激励,2023/11/8,11,语法详细讲解强制激励,当执行release后,则信号的值为assign所赋 的值。如果用force对同一个信号赋了几次值,再执行release,则所有赋的值均不再存在。可以对信号的某(确定)位、某些(确定)位或拼接的信号,使用force和release赋值;但不能对信号的可变位使用force和release 来赋值。不能对寄存器类型的信号某位或某些位使用 assign 和deassign 来赋值。
8、,强制激励,2023/11/8,12,虽然有时在设计中会包含时钟,但时钟通常用在测试模块中。下面三个例子分别说明如何在门级和行为级建立不同波形的时钟模型。例1 简单的对称方波时钟:,建立时钟,reg clk;always begin#period/2 clk=0;#period/2 clk=1;end,reg go;wire clk;nand#(period/2)ul(clk,clk,go);initial begin go=0;#(period/2)go=1;end,注:在有些仿真器中,如果设计所用的时钟是由与其相同抽象级别的时钟模型产生的,则仿真器的性能就能得到提高。,2023/11/8,
9、13,例2简单的带延迟的对称方波时钟:,建立时钟,reg clk;initial begin clk=0;#(period)forever#(period/2)clk=!clk end,reg go;wire clk;nand#(period/2)ul(clk,clk,go);initial begin go=0;#(period)go=1;end,注:这两个时钟模型有些不同,行为描述的模型延迟期间一直是低电平,而门级描述的模型开始延迟有半个周期是不确定的。,2023/11/8,14,例3.带延迟、头一个脉冲不规则的、占空比不为1的时钟:,建立时钟,reg clk;initial begin#
10、(period+1)clk=1;#(period/2-1)forever begin#(period/4)clk=0;#(3*period/4)clk=1;endend,reg go;wire clk;nand#(3*period/4,period/4)ul(clk,clk,go);initial begin#(period/4+1)go=0;#(5*period/4-1)go=1;end,注:这两个时钟模型也有些不同,行为描述的模型一开始就有确定的电平,而门级描述的模型有延迟,开始时电平是不确定的。,2023/11/8,15,语法详细讲解怎样使用任务,举例说明如何使用任务:module bu
11、s_ctrl_tb;reg 7:0 data;reg data_valid,data_rd;cpu ul(data_valid,data,data_rd);initial begin cpu_driver(8b0000_0000);cpu_driver(8b1010_1010);cpu_driver(8b0101_0101);end,怎样使用任务,2023/11/8,16,task cpu_driver;input 7:0 data_in;begin#30 data_valid=1;wait(data_rd=1);#20 data=data_in;wait(data_rd=0);#20 dat
12、a=8hzz;#30 data_valid=0;end endtaskendmodule,怎样使用任务,2023/11/8,17,语法详细讲解怎样使用任务,在测试模块中使用任务可以提高程序代码的效率,可以用任务把多次重复的操作包装起来。,怎样使用任务,wait,wait,wait,wait,data1,data2,data3,data4,cpu_data,clk,data_valid,data_rd,read_cpu_state,2023/11/8,18,二、modelsim仿真软件使用简介,1.modelsim简介Mentor公司产品,业界最优秀的HDL语言仿真器唯一单核支持VHDLVeri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Verilog 设计 验证 简单 组合 逻辑电路

链接地址:https://www.31ppt.com/p-6522827.html