- 1、本文档共207页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VerilogHDL数字设计教程(贺敬凯)第6
(1) 从模块内部来讲,输入端口(input)、输出端口(output)和输入输出端口(inout)必须满足以下规则:输入端口和输入输出端口必须为线网(net)数据类型,输出端口可以是线网数据类型,也可以是寄存器(reg)数据类型。 (2) 从模块外部来看,连接输入端口的变量可以是线网数据类型,也可以是寄存器数据类型,连接输出端口或者输入输出端口的变量必须是线网数据类型。 上述两点规则是一致的,我们可以这样来看,连接模块输入端口的变量可以看做其他某模块的输出,连接模块输出端口的变量可以看做是其他某模块的输入,连接模块输入输出端口的变量可以看做是其他某模块的输入输出。这样,就将上述两点规则联系起来了:模块外部的输入相当于其他模块的输出,可以是线网数据类型,也可以为寄存器(reg)数据类型;模块外部的输出相当于其他模块的输入,必须是线网数据类型。 6.6 小 结 本章讨论了以下知识点: ? 中小型数据系统设计的仿真建议采用Quartus Ⅱ自带的仿真器,既方便也直观。但大型设计的仿真则建议采用ModelSim等专用仿真器。 ? Verilog HDL有许多系统函数和系统任务是C语言中没有的,如$monitor、$readmemb、$stop等,而这些系统任务在调试模块的设计中是非常有用的。我们只有通过阅读大量的Verilog HDL调试模块实例,经过长期的实践,经常查阅Verilog HDL手册才能逐步掌握这些知识。 ? 本章给出了一个设计在Quartus Ⅱ中完成,测试在ModelSim中完成的例子,该例具有典型性,希望读者掌握。当然,也可以将设计和测试均在ModelSim中完成,尤其是设计中没有涉及任何器件信息,并且没有调用任何依附于其他软件的宏功能模块时,设计和测试均在ModelSim中完成会更加方便。也可以直接使用ModelSim软件学习Verilog HDL的语法。 ? 本章也介绍了端口连接规则。从模块内部来讲,输入端口(input)、输出端口(output)和输入输出端口(inout)必须满足以下规则:输入端口和输入输出端口必须为线网(net)数据类型,输出端口可以是线网数据类型,也可以为寄存器(reg)数据类型。 习 题 6 1. 在下面的代码中,每执行完一句,I、A、B的值变为多少?试使用ModelSim软件观察中间结果(提示:使用ModelSim软件的单步仿真功能)。 module test; reg [2:0] A; reg [3:0] B; integer I; initial begin 3. 时间度量系统函数$time 在Verilog HDL中有两种类型的时间系统函数:$time和$realtime。用这两个时间系统函数可以得到当前的仿真时刻。 系统函数$time可以返回一个用64 bit整数表示的当前仿真时刻值,该时刻以模块的仿真时间尺度为基准。$realtime和$time的作用是一样的,只是$realtime返回的时间数字是一个实型数,该数字也是以时间尺度为基准的。 【例6-15】 $monitor和$time应用举例。 `timescale 10ns/1ns module monit; reg data; parameter p=1.4; initial begin $monitor($time,data=,data); // $monitor($realtime,data=,data); #p data=0; #p data=1; #p data=0; #p data=1; end endmodule 输出结果为: # 0data=x # 1data=0 # 3data=1 # 4data=0 # 6data=1 程序说明: (1) 在这个例子中,模块monit预想在时刻为14 ns时设置寄存器data为0,在时刻为28?ns时设置寄存器data为1,在42?ns时设置寄存器data为0,在56?ns时设置寄存器data为1。但是由$time记录的data变化时刻却和预想的不一样。 (2) ?$time显示时刻受时间尺度比例的影响。在上面的例子中,时间单位是10?ns,因为$time输出的时刻总是时间单位的倍数,所以就将14 ns、28 ns、42 ns和56 ns输出为1.4、2.8、4.2和5.6。又因为$time总是输出整数,所以在将经过尺度比例变
文档评论(0)