欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

《Verilog数字系统设计教程》(第4版)第7章思考题及答案

程序员文章站 2024-03-26 08:38:35
...

1.为什么在多模块调试的情况下monitormonitor需要配合monitoron和$monitoroff来工作?
monitoronmonitoron和monitoroff任务的作用是通过打开和关闭监控标志来控制监控任务monitor使monitor的启动和停止,这样使得程序员可以很容易的控制monitor何时发生。monitoronmonitoron来启动monitor时不管monitor仿monitor参数列表中的值是否发生改变,总是立刻输出显示当前时刻参数列表中的值,这用于在监控的初始时刻设定初始比较值。在默认情况下,控制标志在仿真的起始时刻就已经打开了。在多模块调试的情况下,许多模块都调用了monitor,因为任何时刻只能用一个monitormonitor起作用,因此需要配合monitoron与monitoroff使monitoroff使用,把需要监视的模块用monitor打开,在监视完毕后及时用monitoroff便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)用系统任务printtimescale3printtimescale来输出显示一个模块的时间单位和时间精度; (3)用系统函数time和$realtime及%t格式声明来输出EDA工具记录的时间信息。

6.为什么说系统任务reanmenVerilogHDLreanmen可以用来产生用于算法验证的及其复杂的测试用数据流? 在Verilog HDL程序中有两个系统任务readmemb和readmemh,仿使Creadmemh,并用来从文件中读取数据到存储器中,这两个系统任务可以在仿真的任何时刻被执行使用。复杂数据可以用C语言产生,存在文件中,用readmem取出存入存储器,再按节拍输出,这在验证算法逻辑电路时特别有用。

7.为什么熟练地使用条件编译命令可以使源代码有更大的灵活性,可以使用于不同的实现对象,如不同工艺的ASIC或速度规模不同的FBGA或CPLD,从而为软核的商品化创造条件?
合理地使用条件编译和条件执行预处理可以使测试程序适应不同的编译环境,也可以把不同的测试过程编写到一个统一的测试程序中去,可以简化测试的过程,对于复杂设计的验证模块的编写很有实用价值。

相关标签: Verilog