北航电子电路设计数字部分实验报告_第1页
北航电子电路设计数字部分实验报告_第2页
北航电子电路设计数字部分实验报告_第3页
北航电子电路设计数字部分实验报告_第4页
北航电子电路设计数字部分实验报告_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

1、北航电子电路设计数字部分实验报告电子电路设计数字部分实验报告学院:姓名:实验一简单组合逻辑设计实验内容描述一个可综合的数据比较器,比较数据a、b的大小,若相同,则给出结果1,否则给出结果0。实验仿真结果实验代码主程序modulecompare(equal,a,b);input7:0a,b;outputequal;assignequal=(a>b)?1:0;endmodule测试程序modulet;reg7:0a,b;regclock,k;wireequal;initialbegina=0;b=0;clock=0;k=0;endalways#50clock=clock;always(pos

2、edgeclock)begina0=$random%2;a1=$random%2;a2=$random%2;a3=$random%2;a4=$random%2;a5=$random%2;a6=$random%2;a7=$random%2;b0=$random%2;b1=$random%2;b2=$random%2;b3=$random%2;b4=$random%2;b5=$random%2;b6=$random%2;b7=$random%2;endinitialbegin#100000$stop;endcomparem(.equal(equal),.a(a),.b(b);endmodule实验

3、二简单分频时序逻辑电路的设计实验内容用always块和(posedgeclk)或(negedgeclk)的结构表述一个1/2分频器的可综合模型,观察时序仿真结果。实验仿真结果实验代码主程序modulehalf_clk(reset,clk_in,clk_out);inputclk_in,reset;outputclk_out;regclk_out;always(negedgeclk_in)beginif(!reset)clk_out=0;elseclk_out=clk_out;endendmodule测试程序'timescale1ns/100ps'defineclk_cycle5

4、0moduletop;regclk,reset;wireclk_out;always#'clk_cycleclk=clk;initialbeginclk=0;reset=1;#10reset=0;#110reset=1;#100000$stop;endhalf_clkm0(.reset(reset),.clk_in(clk),.clk_out(clk_out);endmodule实验三利用条件语句实现计数分频时序电路实验内容利用10MH木勺时钟,设计一个单周期形状的周期波形。实验仿真结果实验代码主程序modulefdivision(RESET,F10M,out);inputF10M,R

5、ESET;outputout;regout;reg7:0i;always(posedgeF10M)if(!RESET)beginout<=0;i<=0;endelseif(i=2|i=3)beginout=out;i<=i+1;endelseif(i=5)i<=1;elsei<=i+1;endmodule测试程序'timescale1ns/100psmoduledivision_top;regF10M,RESET;wireout;always#50F10M=F10M;initialbeginRESET=1;F10M=0;#90RESET=0;#100RES

6、ET=1;#10000$stop;endfdivisionfdivision(.RESET(RESET),.F10M(F10M),.out(out);endmodule实验四阻塞赋值与非阻塞赋值的区别实验内容比较四种不同的写法,观察阻塞与非阻塞赋值的区别。Blocking:always(posedgeclk)beginb=a;c=b;endBlocking1:always(posedgeclk)beginc=b;b=a;endBlocking2:always(posedgeclk)b=a;always(posedgeclk)c=b;non_Blocking:always(posedgeclk)

7、beginb<=a;c<=b;End实验仿真结果实验代码主程序moduleblocking(clk,a,b,c);output3:0b,c;input3:0a;inputclk;reg3:0b,c;always(posedgeclk)beginb=a;c=b;endendmodule测试部分'timescalelns/IOOps'include"./blocking.v"include"./blockingl.v"include"./blocking2.v"include"./non_blocki

8、ng.v“modulecompareTop;wire3:0b11,c11,b12,c12,b13,c13,b2,c2;reg3:0a;regclk;initialbeginclk=0;forever#50clk=clk;endinitialbegina=4h3;$display(“%d“,a);#100a=4h7;$display(“%d“,a);#100a=4hf;$display(“%d“,a);#100a=4ha;$display(“%d“,a);#100a=4h2;$display(“%d“,a);#100$stop;endblockingblocking(clk,a,b11,c11)

9、;blocking1blocking1(clk,a,b12,c12);blocking2blocking2(clk,a,b13,c13);non_blockingnon_blocking(clk,a,b2,c2);endmodule实验五用always块实现较复杂的组合逻辑实验目的运用always块设计一个8路数据选择器。要求:每路输入数据与输出数据均为4位2进制数,当选择开关(至少3位)或输入数据发生变化时,输出数据也相应地变化。实验仿真结果实验代码主程序modulealu(out,opcode,a1,a2,a3,a4,a5,a6,a7,a8);output3:0out;reg3:0out;

10、input3:0a0,a1,a2,a3,a4,a5,a6,a7;input2:0opcode;always(opcodeora1ora2ora3ora4ora5ora6ora7ora0)begincase(opcode)3d0:out=a0;3d1:out=a1;3d2:out=a2;3d3:out=a3;3d4:out=a4;3d5:out=a5;3d6:out=a6;3d7:out=a7;default:out=4b0000;endcaseendendmodule测试程序'timescalelns/lns'include"./main5.v"module

11、alutext;wire3:0out;reg3:0a1,a2,a3,a4,a5,a6,a7,a8;reg2:0opcode;initialbegina1=$random%16;a2=$random%16;a3=$random%16;a4=$random%16;a5=$random%16;a6=$random%16;a7=$random%16;a8=$random%16;repeat(100)begin#100opcode=$random%8;a1=$random%16;a2=$random%16;a3=$random%16;a4=$random%16;a5=$random%16;a6=$ran

12、dom%16;a7=$random%16;a8=$random%16;end#100$stop;endalualu(out,opcode,a1,a2,a3,a4,a5,a6,a7,a8);endmodule实验六在VerilogHDL中使用函数实验目的设计一个带控制端的逻辑运算电路,分别完成正整数的平方、立方和最大数为5的阶乘运算。实验仿真结果实验代码主程序moduletryfunct(clk,n,result1,result2,result3,reset);output31:0result1,result2,result3;input3:0n;inputreset,clk;reg31:0re

13、sult1,result2,result3;always(posedgeclk)beginif(!reset)beginresult1<=0;result2<=0;result3<=0;endelsebeginresult1<=fun1(n);result2<=fun2(n);result3<=fun3(n);endendfunction31:0fun1;input3:0operand;fun1=operand*operand;endfunctionfunction31:0fun2;input3:0operand;beginfun2=operand*oper

14、and;fun2=operand*fun2;endendfunctionfunction31:0fun3;input3:0operand;reg3:0index;beginfun3=1;if(operand<11)for(index=2;index<=operand;index=index+1)fun3=index*fun3;elsefor(index=2;index<=10;index=index+1)fun3=index*fun3;endendfunctionendmodule测试程序'include"./main6.v"、timescale1

15、ns/100psmoduletryfunctTop;reg3:0n,i;regreset,clk;wire31:0result1,result2,result3;initialbeginclk=0;n=0;reset=1;#100reset=0;#100reset=1;for(i=0;i<=15;i=i+1)begin#200n=i;end#100$stop;endalways#50clk=clk;tryfunctm(.clk(clk),.n(n),.result1(result1),.result2(result2),.result3(result3),.reset(reset);en

16、dmodule实验七在VerilogHDL中使用任务(task)实验目的用两种不同方法设计一个功能相同的模块,该模块能完成四个8位2进制输入数据的冒泡排序。第一种,模仿原题例子中用纯组合逻辑实现;第二种,假设8位数据是按照时钟节拍串行输入的,要求用时钟触发任务的执行法,每个时钟周期完成一次数据交换操作。实验仿真结果实验代码主程序1modulerank(ra,rb,rc,rd,a,b,c,d);output7:0ra,rb,rc,rd;input7:0a,b,c,d;reg7:0ra,rb,rc,rd,va,vb,vc,vd,tmp;regi;always(aorborcord)beginva,

17、vb,vc,vd=a,b,c,d;repeat(7)beginexchange(va,vb);exchange(vb,vc);exchange(vc,vd);endra,rb,rc,rd=va,vb,vc,vd;endtaskexchange;inout7:0x,y;reg7:0tmp;if(x>y)begintmp=x;x=y;y=tmp;endendtaskendmodule测试部分1'timescale1ns/100ps'include“main7.v“moduletask_Top;reg7:0a,b,c,d;wire7:0ra,rb,rc,rd;initialbe

18、gina=0;b=0;c=0;d=0;repeat(50)begin#100a=$random%255;b=$random%255;c=$random%255;d=$random%255;end#100$stop;endrankrank(.ra(ra),.rb(rb),.rc(rc),.rd(rd),.a(a),.b(b),.c(c),.d(d);endmodule主程序2modulerank(a,rst,clk,ra,rb,rc,rd);output7:0ra,rb,rc,rd;input7:0a;inputclk,rst;reg7:0ra,rb,rc,rd;reg7:0va,vb,vc,v

19、d;reg3:0i;always(posedgeclkornegedgeclk)beginif(!rst)beginva=0;vb=0;vc=0;vd=0;i=0;endelsebeginif(i<8)begini=i+1;va=a;exchange(va,vb);exchange(vb,vc);exchange(vc,vd);exchange(va,vb);exchange(vb,vc);exchange(va,vb);ra,rb,rc,rd=va,vb,vc,vd;endendendtaskexchange;inout7:0x,y;reg7:0tmp;if(x>y)begint

20、mp=x;x=y;y=tmp;endendtaskendmodule测试部分2'timescale1ns/100ps'include“main7_other.v"moduletask_Top;reg7:0a;wire7:0ra,rb,rc,rd;regclk,rst;initialbegina=0;rst=0;clk=0;#50rst=1;#100a=8$random;#100a=8$random;#100a=8$random;#100a=8$random;#100a=8$random;#100a=8$random;#100a=8$random;#100a=8$ran

21、dom;#100$stop;endalways#100clk=clk;rankrank(.a(a),.rst(rst),.clk(clk),.ra(ra),.rb(rb),.rc(rc),.rd(rd);endmodule实验八利用有限状态机进行时序逻辑的设计实验目的设计一个串行数据检测器。要求连续四个或四个以上为1时输出1,其他输入情况下为0.实验仿真结果实验代码主程序moduleseqdet(x,z,clk,rst,state);inputx,clk,rst;outputz;output2:0state;reg2:0state;wirez;parameterIDLE=d0,A=d1,B=d2,C=d3,D=d4;assignz=(state=D&&x=1)?1:0;always(posedgeclk)if(!rst)beginstate<=IDLE;endelsecasex(state)IDLE:if(x=1)beginstate<=A;endA:if(x=1)beginstate<=B;endelsebe

温馨提示

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

评论

0/150

提交评论