verilog HDL实验复习代码.docx
- 文档编号:4339805
- 上传时间:2023-05-07
- 格式:DOCX
- 页数:17
- 大小:16.75KB
verilog HDL实验复习代码.docx
《verilog HDL实验复习代码.docx》由会员分享,可在线阅读,更多相关《verilog HDL实验复习代码.docx(17页珍藏版)》请在冰点文库上搜索。
verilogHDL实验复习代码
实验一 简单D触发器
moduletest1(q,d,clk);
inputd,clk;
outputregq;
always@(posedgeclk)
q<=d;
endmodule
实验二同步置数D触发器
moduletest2(q,d,set,data,clk);
inputd,clk,set,data;
outputregq;
always@(posedgeclk)
begin
if(~set)q<=data;
elseq<=d;
end
endmodule
实验三 同步置数异步清零的D触发器
moduletest3(q,d,set,data,clr_n,clk);
inputd,clk,set,data,clr_n;
outputregq;
always@(posedgeclkornegedgeclr_n)
begin
if(~clr_n)q<=1'b0;
elseif(~set)q<=data;
elseq<=d;
end
endmodule
实验四 带反输出的D触发器
moduletest4(q,qn,d,clk);
inputd,clk;
outputqn;
outputregq;
assignqn=~q;
always@(posedgeclk)
begin
q<=d;
end
endmodule
实验五 4选1数据选择器
moduletest5(out,in1,in2,in3,in4,s0,s1);
inputin1,in2,in3,in4,s0,s1;
outputout;
assignout=s0?
(s1?
in4:
in3):
(s1?
in2:
in1);
endmodule
实验六 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;
3'b001:
out=in2;
3'b010:
out=in3;
3'b101:
out=in4;
3'b011:
out=in5;
3'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)?
8'b1111_1101
:
(a==3'b010)?
8'b1111_1011
:
(a==3'b011)?
8'b1111_0111
:
(a==3'b100)?
8'b1110_1111
:
(a==3'b101)?
8'b1101_1111
:
(a==3'b110)?
8'b1011_1111
:
8'b0111_1111)
:
8'b1111_1111;
endmodule
实验八 3-8译码器(Always)
moduletest8(a,y,g1,g2a,g2b);
input[2:
0]a;
inputg1,g2a,g2b;
outputreg[7:
0]y;
always@(a,g1,g2a,g2b)
begin
if(g1&~g2a&~g2b)
begincase(a)
3'b000:
y=8'b1111_1110;
3'b001:
y=8'b1111_1101;
3'b010:
y=8'b1111_1011;
3'b011:
y=8'b1111_0111;
3'b100:
y=8'b1110_1111;
3'b101:
y=8'b1101_1111;
3'b110:
y=8'b1011_1111;
3'b111:
y=8'b0111_1111;
default:
y=8'b1111_1111;
endcase
end
elsey=8'b1111_1111;
end
endmodule
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<=data;
elseif(qout<=9)qout<=qout+1;
elseqout<=0;
end
assigncout=(qout==9)?
1:
0;
endmodule
2.设计一个模60计数器(异步清零,同步置数)
modulecount60(qout,cout,data,load,reset,clk);
inputload,clk,reset;
input[7:
0]data;
outputreg[7:
0]qout;
outputcout;
always@(posedgeclkornegedgereset)
begin
if(!
reset)qout<=0;
elseif(load)qout<=data;
elsebegin
if(qout[3:
0]==9)
beginqout[3:
0]<=0;
if(qout[7:
4]==5)qout[7:
4]<=0;
elseqout[7:
4]<=qout[7:
4]+1;
end
elseqout[3:
0]<=qout[3:
0]+1;
end
end
assigncout=(qout==8'd59)?
1:
0;
endmodule
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;
input[3:
0]d;output[3:
0]qd;reg[3:
0]cnt;
assignqd=cnt;
always@(posedgeclk)
begin
if(!
clr)cnt<=8'h00;
elseif(ld)cnt<=d;
elseif(updown)cnt<=cnt+1;
elsecnt<=cnt-1;
end
endmodule
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;
endmodule
6. 设计一个2N分频电路(N=7)
modulefdiv14(clkin,clk14);
inputclkin;outputclk14;reg[3:
0]cnt;
assignclk14=(cnt<6)?
1:
0;
always@(posedgeclkin)
begin
if(cnt<13)cnt<=cnt+4'b1;
elsecnt<=4'b0;
end
endmodule
7.设计一个M+N分频器(N=5;M=7)
modulefd5_7(clk,clk5_7);
inputclk;
outputclk5_7;
reg[3:
0]cnt;
assignclk5_7=(cnt<4)?
1:
0;
always@(posedgeclk)
begin
if(cnt<11)cnt<=cnt+4'b1;
elsecnt<=4'b0;
end
endmodule
8.设计一个17分频器(占空比50%)01
modulefd17(clk,clk17,m,n);
inputclk;
outputclk17;
outputreg[4:
0]m,n;
assignclk17=((m<8)?
1:
0)|((n<8)?
1:
0);
always@(posedgeclk)
begin
if(m<16)m<=m+4'b1;
elsem<=4'b0;
end
always@(negedgeclk)
begin
if(n<16)n<=n+4'b1;
elsen<=4'b0;
end
endmodule
一位全加器的仿真
(1)VerylogHDL源代码
moduleadd1(ina,inb,cin,cout,sum);
inputina,inb,cin;
outputsum,cout;
assign{cout,sum}=ina+inb+cin;
endmodule
(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)
begin
cin=0;ina=0;inb=0;
#delaycin=0;ina=1;inb=0;
#delaycin=0;inb=1;
#delaycin=1;
#delayina=0;
#delay;
end
endmodule
二.4选1数据选择器
(1)VerylogHDL源代码
modulemux4_1(out,in1,in2,in3,in4,s0,s1);
inputin1,in2,in3,in4,s0,s1;
outputout;
assignout=s0?
(s1?
in4:
in3):
(s1?
in2:
in1);
endmodule
(2)测试代码
`timescale1ns/1ns
modulemux4_1_tb;
regc0,c1,c2,c3;
regs0,s1;
wireout;
parameterdelay=100;
mux4_1u1(out,c0,c1,c2,c3,s0,s1);
initial
begin
c0=0;c1=0;c2=0;c3=0;{s0,s1}=00;
#delayc0=1;c1=0;c2=0;c3=0;{s0,s1}=00;
#delayc0=0;c1=0;c2=0;c3=0;{s0,s1}=00;
#delayc0=0;c1=1;c2=0;c3=0;{s0,s1}=01;
#delayc0=0;c1=0;c2=0;c3=0;{s0,s1}=01;
#delayc0=0;c1=0;c2=1;c3=0;{s0,s1}=10;
#delayc0=0;c1=0;c2=0;c3=0;{s0,s1}=10;
#delayc0=0;c1=0;c2=0;c3=1;{s0,s1}=11;
#delayc0=0;c1=0;c2=0;c3=0;{s0,s1}=11;
#delay;
end
endmodule
三.模60计数器的仿真
(1)VerylogHDL源代码
modulecount60(clk,clr,q_h,q_l,c);
inputclk,clr;
outputreg[3:
0]q_h,q_l;
outputregc;
always@(posedgeclkornegedgeclr)
begin
if(~clr)beginq_l<=0;c<=0;end
elseif(q_l<9)beginq_l<=q_l+1;c=0;end
elsebeginq_l<=0;c<=1;end
end
always@(posedgecornegedgeclr)
begin
if(~clr)beginq_h<=0;end
elseif(q_h<5)beginq_h<=q_h+1;end
elsebeginq_h<=0;end
end
endmodule
(2)测试代码
`timescale1ns/1ns
modulecount60_tb;
regclk,clr;
wire[3:
0]q_h,q_l;
wirec;
parameterdelay=100;
count60u1(clk,clr,q_h,q_l,c);
always#delayclk=~clk;
initial
begin
clk=0;clr=1;
#delayclr=0;
#123clr=1;
#(delay*1000)$stop;
end
initial$monitor($time,,,"clk=%bclr=%bq_h=%dq_l=%dc=%b",clk,clr,q_h,q_l,c);
endmodule
四.模60BCD计数器的仿真
(1)VerylogHDL源代码
modulecount60(qout,cout,data,load,reset,clk);
inputload,clk,reset;
input[7:
0]data;
outputreg[7:
0]qout;
outputcout;
always@(posedgeclkornegedgereset)
begin
if(!
reset)qout<=0;
elseif(load)qout<=data;
elsebegin
if(qout[3:
0]==9)
beginqout[3:
0]<=0;
if(qout[7:
4]==5)qout[7:
4]<=0;
elseqout[7:
4]<=qout[7:
4]+1;
end
elseqout[3:
0]<=qout[3:
0]+1;
end
end
assigncout=(qout==8'd59)?
1:
0;
endmodule
(2)测试代码
`timescale1ns/1ns
modulecount60_bcd_tb;
wire[7:
0]qout;
wirecout;
reg[7:
0]data;
regload,reset,clk;
parameterdelay=100;
count60u1(qout,cout,data,load,reset,clk);
always#delayclk=~clk;
initial
begin
clk=0;reset=1;load=0;data=0;
#delayreset=0;
#155reset=1;
#delayload=1;data=20;
#(delay*2)load=0;data=20;
#(delay*500)$stop;
end
initial$monitor($time,,,"clk=%breset=%bload=%bdata=%dqout=%dcout=%b",clk,reset,load,data,qout,cout);
endmodule
五.4bit加减计数器的仿真
(1)VerylogHDL源代码
moduleaddjj(d,clk,clr,ld,updown,qd);
inputclk,clr,ld,updown;
input[3:
0]d;output[3:
0]qd;reg[3:
0]cnt;
assignqd=cnt;
always@(posedgeclk)
begin
if(!
clr)cnt<=8'h00;
elseif(ld)cnt<=d;
elseif(updown)cnt<=cnt+1;
elsecnt<=cnt-1;
end
endmodule
(2)测试代码
`timescale1ns/1ns
moduleadd_tb;
regclk,clr,ld,updown;
reg[3:
0]d;
wire[3:
0]qd;
parameterdelay=100;
addjju1(d,clk,clr,ld,updown,qd);
always#(delay/2)clk=~clk;
initial
begin
clk=0;clr=1;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;
end
initial$monitor($time,,,"clr=%bld=%bd=%dupdown=%bqd=%d",clr,ld,d,updown,qd);
endmodule
六.14分频器的仿真
(1)VerylogHDL源代码
modulefdiv14(clkin,clk14);
inputclkin;outputclk14;reg[3:
0]cnt;
assignclk14=(cnt<6)?
1:
0;
always@(posedgeclkin)
begin
if(cnt<13)cnt<=cnt+4'b1;
elsecnt<=4'b0;
end
endmodule
(2)测试代码
`timescale1ns/1ns
modulefdiv_tb;
regclkin;
wireclk14;
parameterdelay=100;
fdiv14u1(clkin,clk14);
always#delayclkin=~clkin;
initial
begin
clkin=0;
#(delay*500)$stop;
end
initial$monitor($time,,,"clkin=%bclk14=%b",clkin,clk14);
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- verilog HDL实验复习代码 HDL 实验 复习 代码
![提示](https://static.bingdoc.com/images/bang_tan.gif)