verilog HDL实验复习代码Word文件下载.docx
《verilog HDL实验复习代码Word文件下载.docx》由会员分享,可在线阅读,更多相关《verilog HDL实验复习代码Word文件下载.docx(17页珍藏版)》请在冰点文库上搜索。
![verilog HDL实验复习代码Word文件下载.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/ddd37da9-0c9f-41ec-b073-7b475acf2039/ddd37da9-0c9f-41ec-b073-7b475acf20391.gif)
assignout=s0?
(s1?
in4:
in3):
in2:
in1);
实验六 6选1数据选择器
moduletest6(out,in1,in2,in3,in4,in5,in6,s0,s1,s2);
inputin1,in2,in3,in4,in5,in6,s0,s1,s2;
outputregout;
always@(in1,in2,in3,in4,in5,in6,s0,s1,s2)
case({s0,s1,s2})
3'
b000:
out=in1;
b001:
out=in2;
b010:
out=in3;
b101:
out=in4;
b011:
out=in5;
b100:
out=in6;
default:
out=3'
bx;
endcase
endmodule
实验七3-8译码器(Assign)
moduletest7(a,y,g1,g2a,g2b);
input[2:
0]a;
inputg1,g2a,g2b;
output[7:
0]y;
assigny=(g1&
&
!
g2a&
g2b)?
((a==3'
b000)?
8'
b1111_1110
:
(a==3'
b001)?
b1111_1101
b010)?
b1111_1011
b011)?
b1111_0111
b100)?
b1110_1111
b101)?
b1101_1111
b110)?
b1011_1111
b0111_1111)
b1111_1111;
实验八 3-8译码器(Always)
moduletest8(a,y,g1,g2a,g2b);
input[2:
outputreg[7:
always@(a,g1,g2a,g2b)
if(g1&
~g2a&
~g2b)
begincase(a)
y=8'
b1111_1110;
b1111_1101;
b1111_1011;
b1111_0111;
b1110_1111;
b1101_1111;
b110:
b1011_1111;
b111:
b0111_1111;
endcase
end
elsey=8'
1.设计一个模10计数器(异步清零,同步置数)
modulecount_10(cout,qout,data,reset,clk,set);
inputreset,clk,set,data;
outputcout;
outputreg[3:
0]qout;
always@(posedgeclkornegedgereset)
begin
if(!
reset)qout<
=0;
elseif(set)qout<
elseif(qout<
=9)qout<
=qout+1;
elseqout<
assigncout=(qout==9)?
1:
0;
2.设计一个模60计数器(异步清零,同步置数)
modulecount60(qout,cout,data,load,reset,clk);
inputload,clk,reset;
input[7:
0]data;
elseif(load)qout<
elsebegin
if(qout[3:
0]==9)
beginqout[3:
0]<
if(qout[7:
4]==5)qout[7:
4]<
elseqout[7:
=qout[7:
4]+1;
elseqout[3:
=qout[3:
0]+1;
assigncout=(qout==8'
d59)?
3.设计一个BCD码加法器(两个4bit)
moduleadda1(ina,inb,cin,cout,sum);
input[3:
0]ina,inb;
inputcin;
output[1:
0]cout;
output[3:
0]sum;
assign{cout,sum}=((ina+inb+cin)>
9)?
(ina+inb+cin+6):
(ina+inb+cin);
endmodule
4.设计一个4bit加减计数器
moduleaddjj(d,clk,clr,ld,updown,qd);
inputclk,clr,ld,updown;
0]d;
output[3:
0]qd;
reg[3:
0]cnt;
assignqd=cnt;
always@(posedgeclk)
clr)cnt<
=8'
h00;
elseif(ld)cnt<
elseif(updown)cnt<
=cnt+1;
elsecnt<
=cnt-1;
5.设计一个2、4、8分频电路
modulefdiv248(clkin,clk1_1_2,clk2_1_4,clk3_1_8);
inputclkin;
outputregclk1_1_2,clk2_1_4,clk3_1_8;
always@(posedgeclkin)
clk1_1_2<
=~clk1_1_2;
always@(posedgeclk1_1_2)
clk2_1_4<
=~clk2_1_4;
always@(posedgeclk2_1_4)
clk3_1_8<
=~clk3_1_8;
6. 设计一个2N分频电路(N=7)
modulefdiv14(clkin,clk14);
outputclk14;
reg[3:
assignclk14=(cnt<
6)?
if(cnt<
13)cnt<
=cnt+4'
b1;
=4'
end
7.设计一个M+N分频器(N=5;
M=7)
modulefd5_7(clk,clk5_7);
inputclk;
outputclk5_7;
assignclk5_7=(cnt<
4)?
11)cnt<
8.设计一个17分频器(占空比50%)01
modulefd17(clk,clk17,m,n);
outputclk17;
outputreg[4:
0]m,n;
assignclk17=((m<
8)?
0)|((n<
0);
if(m<
16)m<
=m+4'
elsem<
always@(negedgeclk)
if(n<
16)n<
=n+4'
elsen<
一位全加器的仿真
(1)VerylogHDL源代码
moduleadd1(ina,inb,cin,cout,sum);
inputina,inb,cin;
outputsum,cout;
assign{cout,sum}=ina+inb+cin;
(2)测试代码
`timescale1ns/1ns
moduleadd1_tb;
regina,inb,cin;
wirecout,sum;
add1u1(ina,inb,cin,cout,sum);
parameterdelay=100;
integeri;
initial
for(i=1;
i<
500;
i=i+1)
cin=0;
ina=0;
inb=0;
#delaycin=0;
ina=1;
inb=1;
#delaycin=1;
#delayina=0;
#delay;
二.4选1数据选择器
modulemux4_1(out,in1,in2,in3,in4,s0,s1);
inputin1,in2,in3,in4,s0,s1;
outputout;
assignout=s0?
modulemux4_1_tb;
regc0,c1,c2,c3;
regs0,s1;
wireout;
parameterdelay=100;
mux4_1u1(out,c0,c1,c2,c3,s0,s1);
initial
c0=0;
c1=0;
c2=0;
c3=0;
{s0,s1}=00;
#delayc0=1;
#delayc0=0;
c1=1;
{s0,s1}=01;
c2=1;
{s0,s1}=10;
c3=1;
{s0,s1}=11;
三.模60计数器的仿真
modulecount60(clk,clr,q_h,q_l,c);
inputclk,clr;
0]q_h,q_l;
outputregc;
always@(posedgeclkornegedgeclr)
begin
if(~clr)beginq_l<
c<
elseif(q_l<
9)beginq_l<
=q_l+1;
c=0;
elsebeginq_l<
=1;
always@(posedgecornegedgeclr)
if(~clr)beginq_h<
elseif(q_h<
5)beginq_h<
=q_h+1;
elsebeginq_h<
modulecount60_tb;
regclk,clr;
wire[3:
0]q_h,q_l;
wirec;
count60u1(clk,clr,q_h,q_l,c);
always#delayclk=~clk;
begin
clk=0;
clr=1;
#delayclr=0;
#123clr=1;
#(delay*1000)$stop;
initial$monitor($time,,,"
clk=%bclr=%bq_h=%dq_l=%dc=%b"
clk,clr,q_h,q_l,c);
四.模60BCD计数器的仿真
modulecount60_bcd_tb;
wire[7:
wirecout;
reg[7:
0]data;
regload,reset,clk;
count60u1(qout,cout,data,load,reset,clk);
initial
reset=1;
load=0;
data=0;
#delayreset=0;
#155reset=1;
#delayload=1;
data=20;
#(delay*2)load=0;
#(delay*500)$stop;
clk=%breset=%bload=%bdata=%dqout=%dcout=%b"
clk,reset,load,data,qout,cout);
五.4bit加减计数器的仿真
moduleadd_tb;
regclk,clr,ld,updown;
reg[3:
0]d;
addjju1(d,clk,clr,ld,updown,qd);
always#(delay/2)clk=~clk;
ld=0;
d=0;
updown=1;
#(delay*2)clr=0;
#187clr=1;
ld=1;
d=5;
#(delay*2)ld=0;
#(delay*20)updown=0;
#(delay*200)$stop;
clr=%bld=%bd=%dupdown=%bqd=%d"
clr,ld,d,updown,qd);
六.14分频器的仿真
modulefdiv_tb;
regclkin;
wireclk14;
fdiv14u1(clkin,clk14);
always#delayclkin=~clkin;
initial
clkin=0;
#(delay*500)$stop;
clkin=%bclk14=%b"
clkin,clk14);