蔡觉平老师,verilog上机作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
上机作业
题目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 语句块为电路上电后,各电路模块同时开始工作的过程。 程序如下: module b(a,b); output a,b; reg a,b; initial begin a=0; b=1; #10 a=1; fork b=0; #10 b=1; #20 a=0; join
#10 b=0; #10 a=1; b=1; end
endmodule
A B
题目3.分别用阻塞和非阻塞赋值语句描述如下图所示移位寄存器的电路图。
程序如下:
module block1(din,clk,out0,out1,out2,out3);
input din,clk;
output out0,out1,out2,out3;
reg out0,out1,out2,out3;
always@(posedge clk)
begin
out3=out2;
out2=out1;
out1=out0;
out0=din;
end
endmodule
module non_block1(din,clk,out0,out1,out2,out3); input din,clk;
output out0,out1,out2,out3;
reg out0,out1,out2,out3;
always@(posedge clk)
begin
out0<=din;
out1<=out0;
out2<=out1;
out3<=out2;
end
endmodule
题目4:设计16位同步计数器
要求:(1)分析16位同步计数器结构和电路特点;
(2)用硬件描述语言进行设计;
(3)编写测试仿真并进行仿真。
程序如下:
module b;
reg clk;
reg reset;
wire [3:0]count,result;
always #5 clk=~clk;
initial begin clk=0;reset=0; #20 reset=1;end
a U1(.clk(clk),.reset(reset),.result(result),.count(count)); endmodule
module a(count,clk,reset,result);
output count,result;
input clk,reset;
reg [3:0]count;
always@(posedge clk)
begin
if(!reset) count=4'b0000;
else count=count+1;
end
assign result=count[0]||count[1]||count[2]||count[3]; endmodule
题目5.试用Verilog HDL门级描述方式描述如下图所示的电路。
Z
程序如下:
module diwuti(D0,D1,D2,D3,S1,S2,Z);
output Z;
input D0,D1,D2,D3,S1,S2;
wire wi1,wi2,w3,w4,w5,w6;
not U1(w1,S1),
U2(w2,S2);
and U3(w6,D3,S2),
U4(w5,D2,S1,w2),
U5(w4,D1,S1,w1),
U6(w3,D0,w1,w2); or U7(Z,w3,w4,w5,w6); endmodule
output SUM,C_OUT; input A,B,C_IN;
reg SUM,C_OUT; always@(A or B or C_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)编写测试仿真并进行仿真。
程序如下:
module c;
parameter adder16_width=16;
reg [adder16_width-1:0]ain,bin;
reg Cin;
wire [adder16_width-1:0]sum;
wire Cout;
initial
begin
ain=10;bin=10;Cin=1;
end
initial
begin
#5 ain=16'b1111111111111111;#10 bin=1;
end
a U1(.ain(ain),.bin(bin),.Cin(Cin),.Cout(Cout),.sum(sum)); endmodule
module d;
parameter width=16;
reg [width-1:0]ain,din;
wire [width*2-1:0]mul;
initial begin ain=2;din=2; end
initial begin #10 ain=100;#15 din=100; end
b U1(.ain(ain),.din(din),.mul(mul));
endmodule
module a(bin,ain,sum,Cout,Cin);