Verilog-HDL数字设计教程-第6章-Verilog-HDL仿真技术课件.ppt

上传人:飞****2 文档编号:91999479 上传时间:2023-05-29 格式:PPT 页数:52 大小:1.60MB
返回 下载 相关 举报
Verilog-HDL数字设计教程-第6章-Verilog-HDL仿真技术课件.ppt_第1页
第1页 / 共52页
Verilog-HDL数字设计教程-第6章-Verilog-HDL仿真技术课件.ppt_第2页
第2页 / 共52页
点击查看更多>>
资源描述

《Verilog-HDL数字设计教程-第6章-Verilog-HDL仿真技术课件.ppt》由会员分享,可在线阅读,更多相关《Verilog-HDL数字设计教程-第6章-Verilog-HDL仿真技术课件.ppt(52页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第6章 Verilog HDL仿真技术6.1 modelsim软件的使用6.2 延时6.3 常用块语句6.4 常用系统函数和系统任务6.5 端口连接规则6.6 小结在线教务辅导网:在线教务辅导网:http:/教材其余课件及动画素材请查阅在线教务辅导网教材其余课件及动画素材请查阅在线教务辅导网QQ:349134187 或者直接输入下面地址:或者直接输入下面地址:http:/6.1 modelsim软件的使用软件的使用1.modelsim软件简介2.使用图形界面对设计进行仿真modelsim软件简介软件简介使用图形界面对设计进行仿真使用图形界面对设计进行仿真图6-2 顶层设计sin_wave框图定

2、制宏功能模块定制宏功能模块步骤步骤1图6-3 定制新的宏功能块 定制宏功能模块定制宏功能模块步骤步骤2图6-4 LPM_ROM宏功能模块设定 定制宏功能模块定制宏功能模块步骤步骤3图6-5 选择rom_64x8模块数据线和地址线宽度 定制宏功能模块定制宏功能模块步骤步骤4图6-6 选择rom_64x8模块地址锁存信号inclock 定制宏功能模块定制宏功能模块步骤步骤5图6-7 选择rom_64x8模块数据初始化文件 定制宏功能模块定制宏功能模块步骤步骤5图6-9 顶层设计中ROM的初始化内容 使用图形界面对设计进行仿真使用图形界面对设计进行仿真【例6-4】sin_wave模块的测试块time

3、scale 1ns/100psmodule test_module1;reg clk;wire7:0 data;/调用已设计好的模块sin_wave one(.clk(clk),.data(data);initial beginclk=1b0;/clk初值为0#3000$finish;/终止仿真 end/控制驱动设计块的时钟信号,时钟周期为10个时钟单位always#5 clk=clk;/clk周期为10 initial$monitor($time,sin_wave_data:%d,data);/监视输出endmodule使用图形界面对设计进行仿真使用图形界面对设计进行仿真仿真所需文件:(1)

4、设计HDL源代码:可以使用Verilog HDL语言源文件,或者Quartus产生的网表文件。(2)测试激励代码:根据设计块而设计的激励程序,由于不需要进行综合,书写具有很大的灵活性。(3)仿真模型/库:根据设计内调用的器件供应商提供的模块而定。Altera FPGA的仿真模型库在C:alteraquartusedasim_lib中。通过针对不同的目标器件选用不同的XXXX_atoms.v文件。比如使用cyclone系列器件,那就要使用cyclone_atoms.v.如果使用了ALTERA的IP核,还需要altera_mf.v文件。altera_mf.v包含了所有宏功能模块的仿真模型。如果AL

5、TERA的IP核中包括了用户原语,还需要加入220model.v文件。仿真步骤仿真步骤图6-10 仿真设置界面仿真步骤仿真步骤图6-11 仿真目录内容仿真步骤仿真步骤图6-12 新建工程窗口 图6-13为工程添加文件 仿真步骤仿真步骤图6-14 为工程添加已存在文件 图6-15 添加文件后的工程界面仿真步骤仿真步骤图6-16 编译设计中的文件 仿真步骤仿真步骤图6-17 编译结果仿真步骤仿真步骤图6-18 功能仿真前的设置仿真步骤仿真步骤图6-19选择仿真对象仿真步骤仿真步骤图6-20 仿真界面仿真步骤仿真步骤图6-21 仿真时添加clk和data两个变量于波形图的界面 仿真步骤仿真步骤图6-

6、22 仿真过程中弹出的窗口仿真步骤仿真步骤图6-23 仿真波形窗口 仿真步骤仿真步骤图6-24 设置成模拟信号显示仿真步骤仿真步骤图6-25 功能仿真的结果(图形)仿真步骤仿真步骤图6-26 时序仿真的结果(图形)使用使用modelsim读写文件读写文件【例6-5】使用modelsim读写文件timescale 1ns/100psmodule test_module;reg clk;wire7:0 data;reg0:7 mem0:63;/使用文件进行初始化的数组integer vec_file,i,j;/定义文件句柄,控制变量reg flag;/写文件完毕后flag=1读开始/调用已设计好的

7、模块sin_wave one(.clk(clk),.data(data);/监视设计块输出,变量初始化,设置仿真时间initial beginclk=1b0;flag=1b0;i=1b0;j=1b0;/clk,flag,i,j初值为0$monitor($time,sin_wave data:%d,data);vec_file=$fopen(sin_wave.dat);/打开文件#3000$finish;/终止仿真 end使用使用modelsim读写文件读写文件/控制驱动设计块的时钟信号,时钟周期为10个时钟单位always#5 clk=clk;/clk周期为10/将设计块的输出数据存放于文件,

8、同时在命令窗口中显示存放进度always(posedge clk)beginif(!flag)begin$fdisplayh(vec_file,%h,data);$display($time,i=%0d,data:%d,i,data);if(i!=6d63)begini=i+1;flag=1b0;endelse beginflag=1b1;$fclose(vec_file);endendend使用使用modelsim读写文件读写文件/用存放于文件中的数据对数组进行初始化,并将数组内容在命令窗口中显示always(posedge clk)if(flag)begin$readmemh(sin_wa

9、ve.dat,mem);if(j!=64)beginj=j+1;$display($time,t j=%0d,mem%0d=%0d,j,j,memj);endend endmodule6.2 延时延时1.延时2.时间尺度 timescale 延时延时assign#2 B=A;时间尺度时间尺度 timescale 表6-1 时间单位及其定义时间单位定义s秒(1S)ms千分之一秒(10-3S)us百万分之一秒(10-6S)ns十亿分之一秒(10-9S)ps万亿分之一秒(10-12S)fs千万亿分之一秒(10-15S)时间尺度时间尺度 timescale【例6-6】timescale命令的用法举例

10、timescale 10ns/1nsmodule test;reg set;parameter d=1.37;initialbegin$monitor($realtime,set=,set);#d set=0;#d set=1;endendmodule6.3 常用块语句常用块语句1.initial块语句2.顺序块beginend3.并行块forkjoin4.嵌套块 initial块语句块语句【例6-7】initial块语句举例1timescale 1ns/1nsmodule test_initial_0;parameter size=4;reg7:0 y;integer index;reg7:

11、0 memory0:size-1;initialbeginy=10;/初始化寄存器aregfor(index=0;indexsize;index=index+1)#5 memoryindex=index;/初始化一个memoryendendmoduleinitial块语句块语句【例6-8】initial块语句举例2timescale 1ns/1nsmodule test_initial;reg x;initial#10 x=1b1;/只有一条语句,不需要使用begin.endinitial begin x=1b0;/多条语句,需要使用begin.end#5 x=1bx;endinitial b

12、egin:block /定义块内局部变量,需要给块命名integer I;I=5;#(10+I)x=1b0;#(I)x=1b1;#(I)x=1b0;endendmodule顺序块顺序块beginend【例6-9】顺序块应用举例timescale 1ns/1nsmodule test_begin;parameter d=20;/声明d是一个参数reg 7:0 data;/声明data是一个8位的寄存器变量initialbegin /由一系列延时产生的波形#d data=h11;#d data=h22;#d data=h33;#d data=h44;#d$stop;endendmodule 并行块

13、并行块forkjoin【例6-10】并行块应用举例timescale 1ns/1nsmodule test_fork;parameter d=20;/声明d是一个参数reg 7:0 data;/声明data是一个8位的寄存器变量initialfork /由一系列延时产生的波形#d data=h11;#(2*d)data=h22;#(3*d)data=h33;#(4*d)data=h44;#(5*d)$stop;joinendmodule 嵌套块嵌套块【例例6-11】嵌套块应用举例嵌套块应用举例timescale 1ns/1nsmodule test_nested;parameter d=20;

14、/声明声明d是一个参数是一个参数reg 7:0 data;/声明声明data是一个是一个8位的寄存器变量位的寄存器变量initialfork:block1/并行块并行块#d data=h11;#(2*d)data=h12;#(3*d)data=h13;begin: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;joinendmodule 6.4 常用系统函数和任务常用系统函数和任务1 系统任

15、务$display、$write和$strobe2 系统任务$monitor3 时间度量系统函数$time4 系统任务$finish和$stop5 系统任务$readmemb和$readmemh6 系统任务$fopen和$fclose 系统任务系统任务$display、$write和和$strobe【例6-12】$display应用举例module disp;reg6:0 val;initialbeginval=49;$display(hex:%h,decimal:%d,val,val);$display(octal:%o,binary:%b,val,val);$display(hex:%h,

16、decimal:%0d,val,val);$display(octal:%0o,binary:%0b,val,val);val=97;$display(ascii character:%c,val);$display(string:%s,val);$display(t%n101);/转义字符#5$display(current scope is%m);$display(simulation time is%t,$time);endendmodule 系统任务系统任务$display、$write和和$strobe【例6-13】不定值、高阻值输出举例module disp;reg11:0 val

17、;initialbeginval=12b001_xxx_xx0_zzz;$display(hex:%h,decimal:%d,val,val);$display(otal:%o,binary:%b,val,val);endendmodule系统任务系统任务$display、$write和和$strobe【例6-14】$strobe应用举例module strob;reg val;initial begin$strobe ($strobe:val=%b,val);val=0;val=1;$display($display:val=%b,val);endendmodule系统任务系统任务$moni

18、tor和和时间度量系统函数时间度量系统函数$time【例6-15】$monitor和$time应用举例timescale 10ns/1nsmodule monit;reg data;parameter p=1.4;initialbegin$monitor($time,data=,data);/$monitor($realtime,data=,data);#p data=0;#p data=1;#p data=0;#p data=1;endendmodule系统任务系统任务$finish和和$stop格式:$finish;$finish(n);格式:$stop;$stop(n);系统任务系统任务

19、$readmemb和和$readmemh【例6-16】系统任务$readmemb和$readmemh应用举例timescale 10ns/1nsmodule readmem_ex;reg a,b,c,d;parameter NumMem=16;reg 3:0 Mem0:NumMem-1;integer cnt;initial begin$readmemh(Mem.txt,Mem,0,15);cnt=0;repeat(NumMem)begin#1 cnt=cnt+1;a,b,c,d=Memcnt;end endinitial$monitor(%t:a=%b b=%b c=%b d=%b,$rea

20、ltime,a,b,c,d);endmodule 系统任务系统任务$fopen和和$fclose【例例6-17】文件读写应用举例文件读写应用举例module file_ex;integer desc1,desc2,AllFiles;initial begindesc1=$fopen(messages.txt);if(!desc1)begin$display(Could not open messages.txt);$finish;enddesc2=$fopen(result.txt);if(!desc2)begin$display(Could not open result.txt);$fin

21、ish;endAllFiles=desc1|desc2|1;/此处此处AllFiles代表了代表了3个文件个文件$fdisplay(AllFiles,Starting simulation.);$fdisplay(desc1,Messages from%m);$fdisplay(desc1,display1);$fdisplay(desc2,result from%m);$fdisplay(desc2,display2);AllFiles=desc1|desc2;/此处此处AllFiles代表了代表了2个文件个文件$fdisplay(AllFiles,Important information

22、.);$fclose(desc1);$fclose(desc2);endendmodule6.5 端口连接规则端口连接规则6.6 小结小结在本章,我们讨论了以下知识点:中小型数据系统设计的仿真建议采用quartusII自带的仿真器,既方便也直观。但大型设计的仿真则建议采用modelsim等专用仿真器,Verilog HDL有许多系统函数和任务是C语言中没有的,如$monitor、$readmemb、$stop等等,而这些系统任务在调试模块的设计中是非常有用的,我们只有通过阅读大量的Verilog调试模块实例,经过长期的实践,经常查阅Verilog语言手册才能逐步掌握。本章给出一个设计在Quar

23、tusII中完成,测试在modelsim中完成的例子,该例具有典型性,希望读者掌握。当然,也可以将设计和测试均在modelsim中完成,尤其是设计中没有涉及任何器件信息,并且没有调用任何依附于其他软件的宏功能模块时,设计和测试均在modelsim中完成更方便。也可以直接使用modelsim软件学习Verilog的语法。本章也介绍了端口连接规则。从模块内部来讲,输入端口(input)、输出端口(output)和输入输出端口(inout)必须满足以下规则:输入端口和输入输出端口必须为线网(net)数据类型,输出端口可以是线网数据类型,也可以为寄存器(reg)数据类型。P166 T1、2、3作业作业

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

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁