您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > verilog实验设计&仿真结果
集成电路与Verilog语言——实验课设计注:采用NC仿真日期:2012年11月集成电路与verilog语言实验报告第2页共16页实验1:分别用门级建模、数据流级建模、和行为级建模实现一个2选1的MUX,两个输入端分别为A和B,当选择端SEL=0时,输出F选择A;当选择端SEL=1时,输出F选择B。门级建模:源代码://MUX2to1gatelevelmoduleMUX_gate(a,b,sel,f);inputa;inputb;inputsel;outputf;regf;wirensel,y1,y2;notunot(nsel,sel);andu1and(y1,a,nsel);andu2and(y2,b,sel);oruor(f,y1,y2);endmodule综合结果:ABSEL集成电路与verilog语言实验报告第3页共16页TB代码:moduletb_MUX_gate;//Inputsrega;regb;regsel;//Outputswiref;//InstantiatetheUnitUnderTest(UUT)MUX_gateuut(.a(a),.b(b),.sel(sel),.f(f));initialbegin//InitializeInputsa=0;b=0;sel=0;//Wait100nsforglobalresettofinish#10//Addstimulusherea=1;b=0;sel=0;#10;a=1;b=0;sel=1;#10;#10$finish;endendmodule仿真结果:集成电路与verilog语言实验报告第4页共16页数据流级建模:源代码://MUX2to1datapromoduleMUX_datapro(a,b,sel,f);inputa;inputb;inputsel;outputf;regf;wirensel,y1,y2;assignnsel=~sel;assigny1=a&nsel;assigny2=b&sel;assignf=y1|y2;endmodule综合结果:TB代码:moduletb_MUX_datarpro;//Inputsrega;regb;regsel;//Outputswiref;//InstantiatetheUnitUnderTest(UUT)MUX_dataprouut(.a(a),.b(b),.sel(sel),.f(f));集成电路与verilog语言实验报告第5页共16页initialbegin//InitializeInputsa=0;b=0;sel=0;//Wait100nsforglobalresettofinish#10;//Addstimulusherea=1;b=0;sel=0;#10;a=1;b=0;sel=1;#10;#10$finish;enendmodule仿真结果:行为级建模:源代码://MUX2to1behavmoduleMUX_behav(f,a,b,sel);inputa,b,sel;outputf;regf;regy1,y2,nsel;always@(aorborsel)beginnsel=~sel;y1=a&nsel;y2=b&sel;f=y1|y2;endendmodule综合结果:集成电路与verilog语言实验报告第6页共16页TB代码:moduletb_MUX_behav;//Inputsrega;regb;regsel;//Outputswiref;//InstantiatetheUnitUnderTest(UUT)MUX_behavuut(.a(a),.b(b),.sel(sel),.f(f));initialbegin//InitializeInputsa=0;b=0;sel=0;//Wait100nsforglobalresettofinish#10;//Addstimulusherea=1;b=0;sel=0;#10;a=1;b=0;sel=1;#10;#10$finish;endendmodule仿真结果:集成电路与verilog语言实验报告第7页共16页实验2题目:实现一个计数器,计数时计数器可从0计到10。源代码:modulecounter(din,up1_down0,clk,nrst,sta1_pau0,load,counter);input[3:0]din;inputup1_down0;inputclk;inputnrst;inputsta1_pau0;inputload;output[3:0]counter;reg[3:0]counter;always@(posedgeclkornegedgenrst)beginif(~nrst)counter=4'b0000;elseif(load)counter=din;elsebeginif(~sta1_pau0)counter=counter;elseif(up1_down0)if(counter==10)counter=4'b0000;elsecounter=counter+1;elseif(counter==0)counter=4'b1010;elsecounter=counter-1;endendendmodule综合结果:集成电路与verilog语言实验报告第8页共16页TB代码:moduletb2;//Inputsreg[3:0]din;regup1_down0;regclk;regnrst;regsta1_pau0;regload;//Outputswire[3:0]counter;//InstantiatetheUnitUnderTest(UUT)counteruut(.din(din),.up1_down0(up1_down0),.clk(clk),.nrst(nrst),.sta1_pau0(sta1_pau0),.load(load),.counter(counter));initialclk=1'b0;always#5clk=~clk;initialbegin//InitializeInputsdin=0;up1_down0=0;nrst=0;sta1_pau0=0;load=0;//Wait100nsforglobalresettofinish#50;集成电路与verilog语言实验报告第9页共16页//Addstimulushere//从0开始加计数din=4'b0111;nrst=1;up1_down0=1;sta1_pau0=1;#210;//暂停sta1_pau0=0;#20;//从7开始减计数load=1;#10;load=0;sta1_pau0=1;up1_down0=0;#200;#20$finish;endendmodule仿真结果:实验3题目:由Morre状态机设计一个简单的交通灯,假定红灯时间为9个时间单位,绿灯时间为6个时间单位,黄灯时间为3个时间单位。源代码:modulelight_machine(clk,nrst,y,t);inputclk;inputnrst;output[1:0]y;output[3:0]t;reg[3:0]q;reg[1:0]y;reg[1:0]state;reg[3:0]t;parametergreen=2'b00,yellow=2'b01,red=2'b11;集成电路与verilog语言实验报告第10页共16页initialbeginq=4'b0;t=4'b0;endalways@(posedgeclkornegedgenrst)beginif(!nrst)beginstate=green;y=2'bz;endelsecase(state)green:beginq=q+1;t=q;if(q==5)beginq=4'b0;state=yellow;endelsebeginy=2'b00;state=green;endendyellow:beginq=q+1;t=q;if(q==2)beginq=4'b0;state=red;endelsebeginy=2'b01;state=yellow;endendred:beginq=q+1;t=q;if(q==8)beginq=4'b0;state=green;endelse集成电路与verilog语言实验报告第11页共16页beginy=2'b11;state=red;endendendcaseendendmodule综合结果:TB代码:moduletb_2;//Inputsregclk;regnrst;//Outputswire[1:0]y;wire[3:0]t;//InstantiatetheUnitUnderTest(UUT)light_machineuut(.clk(clk),.nrst(nrst),.y(y),.t(t));initialclk=1'b0;always#5clk=~clk;initialbegin//InitializeInputsnrst=0;//Wait100nsforglobalresettofinish#30;//Addstimulusherenrst=1;#500;集成电路与verilog语言实验报告第12页共16页#20$finish;endendmodule仿真结果:实验4题目:对一个400MHz的时钟分别完成2、4、8分频。源代码:moduledivclk(clkin,nrst,din,clkout);inputclkin;inputnrst;input[1:0]din;outputclkout;reg[28:0]q;regclkout;initialbeginq=29'b0;endalways@(posedgeclkinornegedgenrst)beginif(~nrst)q=29'b0;elseq=q+29'b1;endalways@(posedgeclkin)begincase(din)2'b00:clkout=q[0];2'b01:clkout=q[1];2'b10:clkout=q[2];default:集成电路与verilog语言实验报告第13页共16页clkout=1'bz;endcaseendendmodule综合结果:TB文件:moduletb_div;//Inputsregclkin;regnrst;reg[1:0]din;//Outputswireclkout;//InstantiatetheUnitUnderTest(UUT)divclkuut(.clkin(clkin),.nrst(nrst),.din(din),.clkout(clkout));initialclkin=1'b0;always#1.25clkin=~clkin;initialbegin//InitializeInputsnrst=0;din=2'b11;//Wait100nsforglobalresettofinish#50;//Addstimulusherenrst=1;din=2'b00;#50;din=2'b01;#50;din=2'b10;#50;集成电路与verilog语言实验报告第14页共16页din=2'b11;#50;#20$finish;endendmodule仿真结果:实验5题目:按照病情严重程度将8名病人分配到8个病房,1号病房病情最轻,8号病房病人病情最严重。每个病房有一个按钮用于呼叫医生,在医生办公室有个显示屏,用于显示哪个病房按了按钮。由于病情不同,要求当病情较严重的病房按了按钮后,医生办公室的显示屏要优先显示其病房号。源代码:modulepriority_encoder(clk,I0,I1,I2,I3,I4,I5,I6,I7,Y);inputclk;inputI0;inputI1;inputI2;inputI3;inputI4;inputI5;inputI6;in
本文标题:verilog实验设计&仿真结果
链接地址:https://www.777doc.com/doc-3617288 .html