您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北航电子电路设计数字部分实验报告
电子电路设计数字部分实验报告学院:姓名:实验一简单组合逻辑设计实验内容描述一个可综合的数据比较器,比较数据a、b的大小,若相同,则给出结果1,否则给出结果0。实验仿真结果实验代码主程序modulecompare(equal,a,b);input[7:0]a,b;outputequal;assignequal=(ab)?1:0;endmodule测试程序modulet;reg[7:0]a,b;regclock,k;wireequal;initialbegina=0;b=0;clock=0;k=0;endalways#50clock=~clock;always@(posedgeclock)begina[0]={$random}%2;a[1]={$random}%2;a[2]={$random}%2;a[3]={$random}%2;a[4]={$random}%2;a[5]={$random}%2;a[6]={$random}%2;a[7]={$random}%2;b[0]={$random}%2;b[1]={$random}%2;b[2]={$random}%2;b[3]={$random}%2;b[4]={$random}%2;b[5]={$random}%2;b[6]={$random}%2;b[7]={$random}%2;endinitialbegin#100000$stop;endcomparem(.equal(equal),.a(a),.b(b));endmodule实验二简单分频时序逻辑电路的设计实验内容用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_cycle50moduletop;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实验三利用条件语句实现计数分频时序电路实验内容利用10MHz的时钟,设计一个单周期形状的周期波形。实验仿真结果实验代码主程序modulefdivision(RESET,F10M,out);inputF10M,RESET;outputout;regout;reg[7:0]i;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;#100RESET=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)beginb=a;c=b;End实验仿真结果实验代码主程序moduleblocking(clk,a,b,c);output[3:0]b,c;input[3:0]a;inputclk;reg[3:0]b,c;always@(posedgeclk)beginb=a;c=b;endendmodule测试部分`timescale1ns/100ps`include./blocking.v`include./blocking1.v`include./blocking2.v`include./non_blocking.vmodulecompareTop;wire[3:0]b11,c11,b12,c12,b13,c13,b2,c2;reg[3:0]a;regclk;initialbeginclk=0;forever#50clk=~clk;endinitialbegina=4'h3;$display(%d,a);#100a=4'h7;$display(%d,a);#100a=4'hf;$display(%d,a);#100a=4'ha;$display(%d,a);#100a=4'h2;$display(%d,a);#100$stop;endblockingblocking(clk,a,b11,c11);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);output[3:0]out;reg[3:0]out;input[3:0]a0,a1,a2,a3,a4,a5,a6,a7;input[2:0]opcode;always@(opcodeora1ora2ora3ora4ora5ora6ora7ora0)begincase(opcode)3'd0:out=a0;3'd1:out=a1;3'd2:out=a2;3'd3:out=a3;3'd4:out=a4;3'd5:out=a5;3'd6:out=a6;3'd7:out=a7;default:out=4'b0000;endcaseendendmodule测试程序`timescale1ns/1ns`include./main5.vmodulealutext;wire[3:0]out;reg[3:0]a1,a2,a3,a4,a5,a6,a7,a8;reg[2:0]opcode;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={$random}%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);output[31:0]result1,result2,result3;input[3:0]n;inputreset,clk;reg[31:0]result1,result2,result3;always@(posedgeclk)beginif(!reset)beginresult1=0;result2=0;result3=0;endelsebeginresult1=fun1(n);result2=fun2(n);result3=fun3(n);endendfunction[31:0]fun1;input[3:0]operand;fun1=operand*operand;endfunctionfunction[31:0]fun2;input[3:0]operand;beginfun2=operand*operand;fun2=operand*fun2;endendfunctionfunction[31:0]fun3;input[3:0]operand;reg[3:0]index;beginfun3=1;if(operand11)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`timescale1ns/100psmoduletryfunctTop;reg[3:0]n,i;regreset,clk;wire[31:0]result1,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));endmodule实验七在VerilogHDL中使用任务(task)实验目的用两种不同方法设计一个功能相同的模块,该模块能完成四个8位2进制输入数据的冒泡排序。第一种,模仿原题例子中用纯组合逻辑实现;第二种,假设8位数据是按照时钟节拍串行输入的,要求用时钟触发任务的执行法,每个时钟周期完成一次数据交换操作。实验仿真结果实验代码主程序1modulerank(ra,rb,rc,rd,a,b,c,d);output[7:0]ra,rb,rc,rd;input[7:0]a,b,c,d;reg[7:0]ra,rb,rc,rd,va,vb,vc,vd,tmp;regi;always@(aorborcord)begin{va,vb,vc,vd}={a,b,c,d};repeat(7)beginexchange(va,vb);exchange(vb,vc);exchange(vc,vd);end{ra,rb,rc,rd}={va,vb,vc,vd};endtaskexchange;inout[7:0]x,y;reg[7:0]tmp;if(xy)begintmp=x;x=y;y
本文标题:北航电子电路设计数字部分实验报告
链接地址:https://www.777doc.com/doc-6172269 .html