Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第6章 Verilog HDL仿真技术

上传人:E**** 文档编号:89350208 上传时间:2019-05-23 格式:PPT 页数:51 大小:1.35MB
返回 下载 相关 举报
Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第6章 Verilog HDL仿真技术_第1页
第1页 / 共51页
Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第6章 Verilog HDL仿真技术_第2页
第2页 / 共51页
Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第6章 Verilog HDL仿真技术_第3页
第3页 / 共51页
Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第6章 Verilog HDL仿真技术_第4页
第4页 / 共51页
Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第6章 Verilog HDL仿真技术_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第6章 Verilog HDL仿真技术》由会员分享,可在线阅读,更多相关《Verilog HDL数字设计教程 教学课件 ppt 作者 贺敬凯 全书 第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号