verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第七章)

《Verilog数字系统设计教程》夏宇闻 第三版思考题
答案合集 :个人主页verilog专栏中


1.为什么在多模块调试的情况下$ monitor需要配合$ monitoron和 $monitoroff来工作?

  $ monitoron和 $ monitoroff 任务的作用是通过打开和关闭监控标志来控制监控任务$ monitor的启动和停止,这样使得程序员可以很容易地控制$ monitor何时发生。$ monitoron则用于打开监控标志,启动监控任务$ monitor 。通常在通过调用$ monitoron来启动$ monitor时不管$ monitor参数列表中的值是否发生改变,总是立刻输出显示当前时刻参数列表中的值,这用于在监控的初始时刻设定初始比较值。在默认情况下,控制标志在仿真的起始时刻就已经打开了。在多模式调试的情况下,许多模块中都调用了$ monitor, 因为任何时刻只能用一个$ monitor起作用,因此需配合$ monitoron与$ monitoroff使用,把需要监视的模块用$ monitor打开,在监视完毕后及时用$ monitoroff关闭,以便把$monitor 让给其他模块使用。.

2.请用$random配合求模运算编写:

(1)用于测试的跳变沿抖动为周期1/10的时钟波形。

(2)随机出现的脉宽随机的窄脉冲。

module random_pulse(dout);
output	[9:0]	dout;
reg		[9:0]	dout;

integer delay;
initial
	begin
	#10	dout = 0;
	for(k=0;k<100;K=K+1)
		begin
		delay = {$random}%10;
		#delay	dout = 1;
		#delay	dout = 0;
		end
	end
endmodule

3.Verilog的编译预处理与C语言的编译预处理有什么不同?

  Verilog的编译预处理,在编译处理命令之前要以 ‘ ` ’ 开头

4. 请仔细阐述 `timescale编译预处理的作用?

  `timescale命令用来说明跟在该命令后的模块的时间单位和时间精度。使用 'timescale命令可以在同一个设计里包含采用了不同的时间单位的模块。

5.不同`timescale定义的多模块仿真测试时需要注意什么?

  如果在同一个设计里,多个模块中用到的时间单位和时间精度单位不同,需要用到以下的时间结构:
  (1)用`timescale命令来声明本模块中所用到的时间单位和时间精度;
  (2)用系统任务$printtimcscale来输出显示一个模块的时间单位和时间精度;
  (3)用系统函数 $tirme 和 $realtime及%t 格式声明来输出显示 EDA工具记录的时间信息。

6.为什么说系统任务$readmem可以用来产生用于算法验证的极其复杂的测试用数据流?

  在 Verilog HDL程序中有两个系统任务$readmemb 和 $readmemh,并用来从文件中读取数据到存储器中,这两个系统任务可以在仿真的任何时刻被执行使用。复杂数据可以用C语言产生,存在文件中,用 $readmem 取出存入存储器,在按节拍输出,这在验证算法逻辑电路时特别看用。

7.为什么说熟练地使用条件编译命令可以使源代码有更大的灵活性,可以适用于不同的实现对象﹐如不同工艺的ASIC或速度规模不同的FPGA或CPLD,从而为软核的商品化创造条件?

  合理的使用条件编译和条件执行预处理可以使测试程序适应不同的编译环境,也可以把不同的测试过程编写到一个统一的测试程序中去,可以简化测试的过程,对于复杂设计的验证模块的编写很有实用价值。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值