Verilog 教程第三版夏闻宇 练习题答案_第1页
Verilog 教程第三版夏闻宇 练习题答案_第2页
Verilog 教程第三版夏闻宇 练习题答案_第3页
Verilog 教程第三版夏闻宇 练习题答案_第4页
Verilog 教程第三版夏闻宇 练习题答案_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1 设计一个字节(8位)的比较器,要求:比较两个字节的大小,如a7:0大于b7:0,则输出高电平,否则输出低电平;并改写测试模型,使其能进行比较全面的测试。模块源代码: 测试模块的源代码:timescale 1ns / 1psmodule t;reg 7:0 a;reg 7:0 b; reg clock;wire out;initial begina = 0;b = 0; clock=0;endalways #50 clock=clock;always (posedge clock) begina=$random%256;b=$random%256; endinitial begin #100

2、0 $stop;end compare uut (.out(out), .a(a), .b(b); endmodulemodule compare(out,a,b);input 7:0 a,b;output out;reg out;always (a or b) beginif(a>b) out=1;else out=0;endendmodule仿真结果: 由图有:当a=801100101,b=800010010(即a>b时),输出out为高电平;当a=800000001,b=800001101(即a<b时),输出out为低电平,故满足要求。2.依然作clk_in的2分频cl

3、k_out,要求输出时钟的相位与上面的1/2分频器的输出正好相反。编写测试模块,给出仿真波形。书上1/2分频器时序波形模块源代码: 测试模块源代码:timescale 1ns / 100psmodule top;reg clk;reg reset;wire clk_out; always #50 clk=clk;initial beginclk = 0;reset = 1;#10 reset=0;#110 reset=1;#100000 $stop;endhalf_clk uut (.clk_in(clk), .reset(reset), .clk_out(clk_out);endmodule

4、module half_clk(clk_in,reset,clk_out);input clk_in,reset;output clk_out;reg clk_out;always (posedge clk_in)begin if(!reset) clk_out=1;else clk_out=clk_out;endendmodule 仿真波形:由上图可知clk_out的输出波形相位与前面输出波形相反。3. 利用10 MHZ的时钟,设计一个单周期形状的周期波形。分析:时钟信号f=10MHZ,分频1/20,f1=500KHZ时,j从0计到9(10个数)跳转完成半个周期,T0/2 =0.1us;图中

5、可把T分为三段即T1=T3=20us=200*0.1us(所以在T1阶段j要计200个数),而T2=10us可用延迟10000ns翻转达到。图中T=50us之后不显示,所以测试时到达50000ns时停止。故其模块源代码和测试模块源代码如下:模块源代码: 测试模块源代码:module fdivision(reset,F10M,F500K);input reset,F10M;output F500K;reg F500K;reg 7:0 j;always (posedge F10M) begin if(!reset) begin F500K=0; j=0; end else if(j=199) be

6、gin j=0;F500K=F500K;#10000 F500K=F500K; endelsej=j+1;endendmoduletimescale 1ns / 100psdefine clk_cycle 50module fdivision_Top;reg reset;reg F10M_clk;wire F500K_clk;always #clk_cycle F10M_clk=F10M_clk;initial beginreset = 1;F10M_clk = 0;#100 reset=0;#100 reset=1; #49800 $stop;/因为前面已经延迟了200个单位时间,再延迟49

7、800个单位时间到达50000ns。endfdivision uut (.reset(reset), .F10M(F10M_clk), .F500K(F500K_clk); endmodule仿真波形:4.在blocking模块中按如下两种写法,仿真与综合的结果会有什么样的变化?作出仿真波形,分析综合结果。always (posedge clk) begin c=b; b=a; endAlways (posedge clk) b=a;Always (posedge clk) c=b; module blocking_2(clk,a,b,c);input 3:0 a;input clk;outp

8、ut 3:0 b,c;reg 3:0 b,c;always (posedge clk) b=a;always (posedge clk) c=b;endmodulemodule blocking_1(clk,a,b,c);input 3:0 a;input clk;output 3:0 b,c;reg 3:0 b,c;always (posedge clk) begin c=b;b=a; endendmodule模块源代码: 模块源代码: 综合结果 综合结果由以上图形可知,其综合结果一样。其仿真图形如下所示:分析:当时钟上升沿来临,b1、b2的值一样都等于时钟上升沿到来前a的值,两种写法的区别

9、在于c值的不同。第一种写法c1的值等于前一个b1的值;第二种写法c2的值等于b2的值即c1比c2慢一个时钟信号周期。5.运用always块设计一个8路数据选择器。要求:每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应变化。模块源代码: 测试模块源代码:timescale 1ns / 1psmodule m;wire 3:0 out;reg 3:0 i0;reg 3:0 i1;reg 3:0 i2;reg 3:0 i3;reg 3:0 i4;reg 3:0 i5;reg 3:0 i6;reg 3:0 i7;reg 2:0 s;initial be

10、gins=0;repeat(20)begin#100 i0=$random%15;i1=$random%15;i2=$random%15;i3=$random%15;i4=$random%15;i5=$random%15;i6=$random%15; i7=$random%15;s=s+1; end#100 $stop;endselect8_to_1 uut (i0,i1,i2,i3,i4,i5,i6,i7,s,out);endmodulemodule select8_to_1(i0,i1,i2,i3,i4,i5,i6,i7,s,out);input 3:0 i0,i1,i2,i3,i4,i5,i6,i7;input 2:0 s;output 3:0 out;reg 3:0 out;always (i0,i1,i2,i3,i4,i5,i6,i7,s)begin case(s)3'b000: out

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论