Verilog教程第三版夏闻宇第三部分练习题答案.docx
《Verilog教程第三版夏闻宇第三部分练习题答案.docx》由会员分享,可在线阅读,更多相关《Verilog教程第三版夏闻宇第三部分练习题答案.docx(9页珍藏版)》请在冰点文库上搜索。
Verilog教程第三版夏闻宇第三部分练习题答案
Verilog-教程(第三版)夏闻宇-第三部分练习题答案
1.设计一个字节(8位)的比较器,要求:
比较两个字节的大小,如a[7:
0]大于b[7:
0],则输出高电平,否则输出低电平;并改写测试模型,使其能进行比较全面的测试。
模块源代码:
测试模块的源代码:
`timescale1ns/1ps
modulet;
reg[7:
0]a;
reg[7:
0]b;
regclock;
wireout;
initialbegin
a=0;
b=0;
clock=0;
end
always#50clock=~clock;
always@(posedgeclock)
begin
a={$random}%256;
b={$random}%256;
end
initialbegin#1000$stop;end
compareuut(.out(out),.a(a),.b(b));
endmodule
modulecompare(out,a,b);
input[7:
0]a,b;
outputout;
regout;
always@(aorb)
begin
if(a>b)
out=1;
else
out=0;
end
endmodule
仿真结果:
由图有:
当a=8'01100101,b=8'00010010(即a>b时),输出out为高电平;当a=8'00000001,b=8'00001101(即a
2.依然作clk_in的2分频clk_out,要求输出时钟的相位与上面的1/2分频器的输出正好相反。
编写测试模块,给出仿真波形。
书上1/2分频器时序波形
模块源代码:
测试模块源代码:
仿真波形:
由上图可知clk_out的输出波形相位与前面输出波形相反。
3.利用10MHZ的时钟,设计一个单周期形状的周期波形。
分析:
时钟信号f=10MHZ,分频1/20,f1=500KHZ时,j从0计到9(10个数)跳转完成半个周期,T0/2=;图中可把T分为三段即T1=T3=20us=200*(所以在T1阶段j要计200个数),而T2=10us可用延迟10000ns翻转达到。
图中T=50us之后不显示,所以测试时到达50000ns时停止。
故其模块源代码和测试模块源代码如下:
模块源代码:
测试模块源代码:
仿真波形:
4.在blocking模块中按如下两种写法,仿真与综合的结果会有什么样的变化作出仿真波形,分析综合结果。
模块源代码:
模块源代码:
综合结果
综合结果
由以上图形可知,其综合结果一样。
其仿真图形如下所示:
分析:
当时钟上升沿来临,b1、b2的值一样都等于时钟上升沿到来前a的值,两种写法的
区别在于c值的不同。
第一种写法c1的值等于前一个b1的值;第二种写法c2的值等于b2
的值即c1比c2慢一个时钟信号周期。
5.运用always块设计一个8路数据选择器。
要求:
每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应变化。
模块源代码:
测试模块源代码:
仿真波形如下: