PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术

上传人:E**** 文档编号:89357236 上传时间:2019-05-23 格式:PPT 页数:51 大小:1.33MB
返回 下载 相关 举报
PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术_第1页
第1页 / 共51页
PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术_第2页
第2页 / 共51页
PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术_第3页
第3页 / 共51页
PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术_第4页
第4页 / 共51页
PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术》由会员分享,可在线阅读,更多相关《PPT课件----西电出版社《Verilog HDL数字设计教程》 第6章 Verilog HDL仿真技术(51页珍藏版)》请在金锄头文库上搜索。

1、第6章 Verilog HDL仿真技术,6.1 modelsim软件的使用 6.2 延时 6.3 常用块语句 6.4 常用系统函数和系统任务 6.5 端口连接规则 6.6 小结,6.1 modelsim软件的使用,1. modelsim软件简介 2. 使用图形界面对设计进行仿真,modelsim软件简介,使用图形界面对设计进行仿真,图6-2 顶层设计sin_wave框图,定制宏功能模块步骤1,图6-3 定制新的宏功能块,定制宏功能模块步骤2,图6-4 LPM_ROM宏功能模块设定,定制宏功能模块步骤3,图6-5 选择rom_64x8模块数据线和地址线宽度,定制宏功能模块步骤4,图6-6 选择r

2、om_64x8模块地址锁存信号inclock,定制宏功能模块步骤5,图6-7 选择rom_64x8模块数据初始化文件,定制宏功能模块步骤5,图6-9 顶层设计中ROM的初始化内容,使用图形界面对设计进行仿真,【例6-4】 sin_wave模块的测试块 timescale 1ns/100ps module test_module1; reg clk; wire7:0 data; /调用已设计好的模块 sin_wave one(.clk(clk),.data(data); initial begin clk=1b0; /clk初值为0 #3000 $finish; /终止仿真 end /控制驱动设

3、计块的时钟信号,时钟周期为10个时钟单位 always #5 clk=clk; /clk周期为10 initial $monitor($time,“sin_wave_data:%d“,data); /监视输出 endmodule,使用图形界面对设计进行仿真,仿真所需文件: (1)设计HDL源代码:可以使用Verilog HDL语言源文件,或者Quartus产生的网表文件。 (2)测试激励代码:根据设计块而设计的激励程序,由于不需要进行综合,书写具有很大的灵活性。 (3)仿真模型/库:根据设计内调用的器件供应商提供的模块而定。Altera FPGA的仿真模型库在C:alteraquartused

4、asim_lib中。 通过针对不同的目标器件选用不同的XXXX_atoms.v文件。比如使用cyclone系列器件,那就要使用cyclone_atoms.v. 如果使用了ALTERA的IP核,还需要altera_mf.v文件。altera_mf.v包含了所有宏功能模块的仿真模型。 如果ALTERA的IP核中包括了用户原语,还需要加入220model.v文件。,仿真步骤,图6-10 仿真设置界面,仿真步骤,图6-11 仿真目录内容,仿真步骤,图6-12 新建工程窗口,图6-13为工程添加文件,仿真步骤,图6-14 为工程添加已存在文件,图6-15 添加文件后的工程界面,仿真步骤,图6-16 编译

5、设计中的文件,仿真步骤,图6-17 编译结果,仿真步骤,图6-18 功能仿真前的设置,仿真步骤,图6-19选择仿真对象,仿真步骤,图6-20 仿真界面,仿真步骤,图6-21 仿真时添加clk和data两个变量于波形图的界面,仿真步骤,图6-22 仿真过程中弹出的窗口,仿真步骤,图6-23 仿真波形窗口,仿真步骤,图6-24 设置成模拟信号显示,仿真步骤,图6-25 功能仿真的结果(图形),仿真步骤,图6-26 时序仿真的结果(图形),使用modelsim读写文件,【例6-5】使用modelsim读写文件 timescale 1ns/100ps module test_module; reg c

6、lk; wire7:0 data; reg0:7 mem0:63; /使用文件进行初始化的数组 integer vec_file,i,j; /定义文件句柄,控制变量 reg flag; /写文件完毕后flag=1读开始 /调用已设计好的模块 sin_wave one(.clk(clk),.data(data); /监视设计块输出,变量初始化,设置仿真时间 initial begin clk=1b0; flag=1b0; i=1b0; j=1b0; /clk,flag,i,j初值为0 $monitor($time,“sin_wave data: %d“,data); vec_file=$fope

7、n(“sin_wave.dat“);/打开文件 #3000 $finish; /终止仿真 end,使用modelsim读写文件,/控制驱动设计块的时钟信号,时钟周期为10个时钟单位 always #5 clk=clk; /clk周期为10 /将设计块的输出数据存放于文件,同时在命令窗口中显示存放进度 always(posedge clk) begin if(!flag) begin $fdisplayh(vec_file,“%h“,data); $display($time,“i=%0d,data: %d“,i,data); if(i!=6d63) begin i=i+1; flag=1b0;

8、 end else begin flag=1b1; $fclose(vec_file); end end end,使用modelsim读写文件,/用存放于文件中的数据对数组进行初始化,并将数组内容在命令窗口中显示 always (posedge clk) if(flag) begin $readmemh(“sin_wave.dat“,mem); if(j!=64) begin j=j+1; $display($time,“t j=%0d,mem%0d=%0d“,j,j,memj); end end endmodule,6.2 延时,1. 延时 2. 时间尺度 timescale,延时,assi

9、gn # 2 B = A;,时间尺度 timescale,表6-1 时间单位及其定义,时间尺度 timescale,【例6-6】 timescale命令的用法举例 timescale 10ns/1ns module test; reg set; parameter d=1.37; initial begin $monitor($realtime,“set=“,set); #d set=0; #d set=1; end endmodule,6.3 常用块语句,1. initial块语句 2. 顺序块beginend 3. 并行块forkjoin 4. 嵌套块,initial块语句,【例6-7】i

10、nitial块语句举例1 timescale 1ns/1ns module test_initial_0; parameter size=4; reg7:0 y; integer index; reg7:0 memory0:size-1; initial begin y=10; /初始化寄存器areg for(index=0;indexsize;index=index+1) #5 memoryindex=index; /初始化一个memory end endmodule,initial块语句,【例6-8】initial块语句举例2 timescale 1ns/1ns module test_i

11、nitial; reg x; initial #10 x=1b1; /只有一条语句,不需要使用begin.end initial begin x=1b0; /多条语句,需要使用begin.end #5 x=1bx; end initial begin:block /定义块内局部变量,需要给块命名 integer I; I=5; #(10+I) x=1b0; #(I) x=1b1; #(I) x=1b0; end endmodule,顺序块beginend,【例6-9】顺序块应用举例 timescale 1ns/1ns module test_begin; parameter d=20; /声明

12、d是一个参数 reg 7:0 data; /声明data是一个8位的寄存器变量 initial begin /由一系列延时产生的波形 #d data = h11; #d data = h22; #d data = h33; #d data = h44; #d $stop; end endmodule,并行块forkjoin,【例6-10】并行块应用举例 timescale 1ns/1ns module test_fork; parameter d=20; /声明d是一个参数 reg 7:0 data; /声明data是一个8位的寄存器变量 initial fork /由一系列延时产生的波形 #

13、d data = h11; #(2*d) data = h22; #(3*d) data = h33; #(4*d) data = h44; #(5*d) $stop; join endmodule,嵌套块,【例6-11】嵌套块应用举例 timescale 1ns/1ns module test_nested; parameter d=20; /声明d是一个参数 reg 7:0 data; /声明data是一个8位的寄存器变量 initial fork:block1 /并行块 #d data = h11; #(2*d) data = h12; #(3*d) data = h13; begin:

14、block2 /内嵌顺序块 #(d-10) data=h2f; #d data=h2e; fork:block3 /内嵌并行块 #5 data=h38; #15 data=h39; join #d data = h2d; end #(4*d) data = h14; join endmodule,6.4 常用系统函数和任务,1 系统任务$display、$write和$strobe 2 系统任务$monitor 3 时间度量系统函数$time 4 系统任务$finish和$stop 5 系统任务$readmemb和$readmemh 6 系统任务$fopen和$fclose,系统任务$disp

15、lay、$write和$strobe,【例6-12】$display应用举例 module disp; reg6:0 val; initial begin val=49; $display(“hex:%h,decimal:%d“, val, val); $display(“octal:%o,binary:%b“, val, val); $display(“hex:%h,decimal:%0d“, val, val); $display(“octal:%0o,binary:%0b“, val, val); val=97; $display(“ascii character:%c“,val); $display(“string: %s“,val); $display(“t%n“101“); /转义字符 #5 $display(“current scope is %m“); $display(“simulation time is %t“,$time); end endmodule,系统任务$display、$write和$strobe,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号