蔡觉平老师verilog上机作业.docx
- 文档编号:3939139
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:16
- 大小:79.55KB
蔡觉平老师verilog上机作业.docx
《蔡觉平老师verilog上机作业.docx》由会员分享,可在线阅读,更多相关《蔡觉平老师verilog上机作业.docx(16页珍藏版)》请在冰豆网上搜索。
蔡觉平老师verilog上机作业
上机作业
题目2:
简述begin-end语句块和fork-join语句块的区别,并写出下面信号对应的程序代码
begin-end语句块和fork-join语句块的区别:
1、执行顺序:
begin-end语句块按照语句顺序执行,fork-join语句块所有语句均在同一时刻执行;
2、语句前面延迟时间的意义:
begin-end语句块为相对于前一条语句执行结束的时间,fork-join语句块为相对于并行语句块启动的时间;
3、起始时间:
begin-end语句块为首句开始执行的时间,fork-join语句块为转入并行语句块的时间;
4、结束时间:
begin-end语句块为最后一条语句执行结束的时间,fork-join语句块为执行时间最长的那条语句执行结束的时间;
5、行为描述的意义:
begin-end语句块为电路中的数据在时钟及控制信号的作用下,沿数据通道中各级寄存器之间的传送过程。
fork-join语句块为电路上电后,各电路模块同时开始工作的过程。
程序如下:
moduleb(a,b);
outputa,b;
rega,b;
initial
begin
a=0;
b=1;
#10a=1;
fork
b=0;
#10b=1;
#20a=0;
join
#10b=0;
#10a=1;
b=1;
end
endmodule
题目3.分别用阻塞和非阻塞赋值语句描述如下图所示移位寄存器的电路图。
程序如下:
moduleblock1(din,clk,out0,out1,out2,out3);
inputdin,clk;
outputout0,out1,out2,out3;
regout0,out1,out2,out3;
always@(posedgeclk)
begin
out3=out2;
out2=out1;
out1=out0;
out0=din;
end
endmodule
modulenon_block1(din,clk,out0,out1,out2,out3);
inputdin,clk;
outputout0,out1,out2,out3;
regout0,out1,out2,out3;
always@(posedgeclk)
begin
out0<=din;
out1<=out0;
out2<=out1;
out3<=out2;
end
endmodule
题目4:
设计16位同步计数器
要求:
(1)分析16位同步计数器结构和电路特点;
(2)用硬件描述语言进行设计;
(3)编写测试仿真并进行仿真。
程序如下:
moduleb;
regclk;
regreset;
wire[3:
0]count,result;
always#5clk=~clk;
initialbeginclk=0;reset=0;#20reset=1;end
aU1(.clk(clk),.reset(reset),.result(result),.count(count));
endmodule
modulea(count,clk,reset,result);
outputcount,result;
inputclk,reset;
reg[3:
0]count;
always@(posedgeclk)
begin
if(!
reset)count=4'b0000;
elsecount=count+1;
end
assignresult=count[0]||count[1]||count[2]||count[3];
endmodule
题目5.试用VerilogHDL门级描述方式描述如下图所示的电路。
程序如下:
modulediwuti(D0,D1,D2,D3,S1,S2,Z);
outputZ;
inputD0,D1,D2,D3,S1,S2;
wirewi1,wi2,w3,w4,w5,w6;
notU1(w1,S1),
U2(w2,S2);
andU3(w6,D3,S2),
U4(w5,D2,S1,w2),
U5(w4,D1,S1,w1),
U6(w3,D0,w1,w2);
orU7(Z,w3,w4,w5,w6);
endmodule
题目6.试用查找真值表的方式实现真值表中的加法器,写出VerilogHDL代码:
Cin
ain
bin
sum
Cout
0
0
0
0
0
0
0
1
1
0
0
1
0
1
0
0
1
1
0
1
1
0
0
1
0
1
0
1
0
1
1
1
0
0
1
1
1
1
1
1
程序如下:
modulefulladder(SUM,C_OUT,A,B,C_IN);
outputSUM,C_OUT;
inputA,B,C_IN;
regSUM,C_OUT;
always@(AorBorC_IN)
case({A,B,C_IN})
3'b000:
SUM<=0;
3'b000:
C_OUT<=0;
3'b001:
SUM<=1;
3'b001:
C_OUT<=0;
3'b010:
SUM<=1;
3'b010:
C_OUT<=0;
3'b011:
SUM<=0;
3'b011:
C_OUT<=1;
3'b100:
SUM<=1;
3'b100:
C_OUT<=0;
3'b101:
SUM<=0;
3'b101:
C_OUT<=1;
3'b110:
SUM<=0;
3'b110:
C_OUT<=1;
3'b111:
SUM<=1;
3'b111:
C_OUT<=1;
endcase
endmodule
题目7:
设计16位同步加法器和乘法器
要求:
(1)分析16位同步加法器和乘法器结构和电路特
点;
(2)用硬件描述语言进行设计;
(3)编写测试仿真并进行仿真。
程序如下:
modulec;
parameteradder16_width=16;
reg[adder16_width-1:
0]ain,bin;
regCin;
wire[adder16_width-1:
0]sum;
wireCout;
initial
begin
ain=10;bin=10;Cin=1;
end
initial
begin
#5ain=16'b1111111111111111;#10bin=1;
end
aU1(.ain(ain),.bin(bin),.Cin(Cin),.Cout(Cout),.sum(sum));
endmodule
moduled;
parameterwidth=16;
reg[width-1:
0]ain,din;
wire[width*2-1:
0]mul;
initialbeginain=2;din=2;end
initialbegin#10ain=100;#15din=100;end
bU1(.ain(ain),.din(din),.mul(mul));
endmodule
modulea(bin,ain,sum,Cout,Cin);
parameterwidth=16;
output[width-1:
0]sum;
outputCout;
input[width-1:
0]ain,bin;
inputCin;
assign{Cout,sum}=ain+bin+Cin;
endmodule
modulec(ain,din,mul);
parameterwidth=16;
input[width-1:
0]ain,din;
output[width*2-1:
0]mul;
assignmul=ain*din;
endmodule
题目8.将下面的状态转移图用VerilogHDL描述。
在图中,状态机的输入只与状态的跳转有关,与状态机的输出无关,因此该状态机为摩尔型状态机。
下面为三段式描述方式
程序如下:
moduleb(clk,out,step,clr);
output[2:
0]out;
inputstep,clk,clr;
reg[2:
0]out;
reg[1:
0]state,next_state;
always@(posedgeclk)
state<=next_state;
always@(stateorclr)
if(clr)
next_state<=0;
else
case(state)
2'b00:
case(step)
1'b0:
beginnext_state<=2'b00;out<=3'b001;end
1'b1:
beginnext_state<=2'b01;out<=3'b001;end
endcase
2'b01:
begin
out<=3'b010;
next_state<=2'b11;
end
2'b11:
case(step)
1'b0:
beginnext_state<=2'b00;out<=3'b100;end
1'b1:
beginnext_state<=2'b10;out<=3'b100;end
endcase
2'b10:
case(step)
1'b0:
beginnext_state<=2'b10;out<=3'b111;end
1'b1:
beginnext_state<=2'b00;out<=3'b111;end
endcase
endcase
endmodule
modulea;
regclk,step,clr;
wire[3:
0]out;
always
#5clk=~clk;
Initial
beginclk=0;clr=1;step=1;end
initial
begin#5clr=0;#80step=0;#100step=1;end
bU1(clk,out,step,clr);
endmodule
题目9.如下图所示电路,若其延迟时间设定如表所示,试写VerilogHDL程序设计该电路。
路径
最小值(min)
典型值(type)
最大值(max)
a_sa_y
10
12
14
s_s0_sa_y
15
17
19
s_sb_y
11
13
15
b_sb_y
10
12
14
程序如下:
modulea(a,s,b,y,s0);
inputa,b,s,s0;
outputy;
assigny=(s&&b)||(s0&&a);
specify
(a=>y)=(10,12,14);
(b=>y)=(10,12,14);
(s=>y)=(11,13,15);
(s0=>y)=(11,13,15);
endspecify
endmodule
moduleb(a,s,b,y);
inputs,a,s,b;
outputy;
wires0;
not#(4)U1(s0,s);
delay_doorU2(a,s,b,y,s0);
endmodule
题目10.设计一个8位数字显示的简易频率计。
要求:
①能够测试10Hz~10MHz方波信号;②电路输入的基准时钟为1Hz,要求测量值以8421BCD码形式输出;③系统有复位键;④采用分层次分模块的方法,用VerilogHDL进行设计。
程序如下:
modulex;
regstandard_clk;
regtest_clk;
wire[7:
0]out;
regreset;
initialbeginreset=0;test_clk=0;standard_clk=0;end
initial#15reset=1;
always#1test_clk=~test_clk;
always#10standard_clk=~standard_clk;
aU1(.reset(reset),.test_clk(test_clk),.standard_clk(standard_clk),.ratio_final(out));
endmodule
modulea(reset,test_clk,standard_clk,ratio_final);
inputreset,test_clk,standard_clk;
output[7:
0]ratio_final;
wiremul_clk;
wirereset_comp;
wire[7:
0]ratio_start;
andU0(reset_comp,reset,standard_clk);
tU1(.ain(test_clk),.din(standard_clk),.mul(mul_clk));
wU2(.clk(mul_clk),.count(ratio_start),.reset(reset_comp));
cU3(.ratio_start(ratio_start),.ratio_final(ratio_final));
endmodule
modulew(clk,count,reset);
inputclk,reset;
outputcount;
parameterbit=8;
reg[bit-1:
0]count;
always@(posedgeclkornegedgereset)
if(!
reset)
count<=8'b00000000;
else
count<=count+1;
endmodule
modulet(ain,din,mul);
parameterwidth=1;
input[width-1:
0]ain,din;
output[width*2-1:
0]mul;
assignmul=ain*din;
endmodule
modulec(ratio_start,ratio_final);
input[7:
0]ratio_start;
output[7:
0]ratio_final;
assignratio_final=2*ratio_start;
endmodule
题目11.用VerilogHDL设计一个4位LED显示器的动态扫描译码电路。
要求:
①4个七段显示器共用一个译码驱动电路;②显示的数码管清晰明亮,无闪烁现象发生。
程序如下:
modulea(out,in);
outputout;
inputin;
reg[6:
0]out;
wire[3:
0]in;
always@(in)
begin
case(in)
4'd0:
out=7'b1111110;
4'd1:
out=7'b0110000;
4'd2:
out=7'b1101101;
4'd3:
out=7'b1111001;
4'd4:
out=7'b0110011;
4'd5:
out=7'b1011011;
4'd6:
out=7'b1011111;
4'd7:
out=7'b1110000;
4'd8:
out=7'b1111111;
4'd9:
out=7'b1111011;
endcase
end
endmodule
modulew(in1,in2,in3,in4,out1,out2,out3,out4);
outputout1,out2,out3,out4;
inputin1,in2,in3,in4;
wire[3:
0]in1,in2,in3,in4;
wire[6:
0]out1,out2,out3,out4;
aU1(.in(in1),.out(out1));
aU2(.in(in2),.out(out2));
aU3(.in(in3),.out(out3));
aU4(.in(in4),.out(out4));
endmodule
modulec;
reg[3:
0]in1,in2,in3,in4;
wire[6:
0]out1,out2,out3,out4;
initial
begin
in1=4'b0010;
in2=4'b0100;
in3=4'b1000;
in4=4'b0000;
end
initial
begin
#5in4=4'b0111;
in3=4'b0110;
in2=4'b0100;
in1=4'b0000;
end
wU1(in1,in2,in3,in4,out1,out2,out3,out4);
endmodule
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 蔡觉平 老师 verilog 上机 作业