verilog硬件描述语言 上机
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《硬件描述语言》上机作业西电微电子
\
第一题:用Verilog语言的结构描述和行为描述分别设计下面的电路。
A[0] Array B[0]
A[1]
B[1]
A[2]
B[2]
结构描述:
电路设计:
module hw1(A,B,Y); input[2:0] A,B;
output Y;
wire w1,w2,w3;
xor U1(w1,A[0],B[0]);
xor U2(w2,A[1],B[1]);
xor U3(w3,A[2],B[2]);
nor U4(Y,w1,w2,w3);
endmodule
仿真测试:
module test_hw1;
reg[2:0] A,B;
wire Y;
hw1 U1(A,B,Y);
initial
begin
A=3'b000;B=3'b000;
#50 A=3'b000;B=3'b000;
#50 A=3'b111;B=3'b111;
#50 A=3'b000;B=3'b110;
#50 A=3'b111;B=3'b000;
#50 A=3'b110;B=3'b110;
#50 A=3'b011;B=3'b010;
#50 A=3'b001;B=3'b011;
#50 A=3'b111;B=3'b010;
#50 $stop;
end
initial $monitor($time,"\tA=%d\tB=%d\tY=%d",A,B,Y); Endmodule
行为描述:
电路设计:
module hw2(A,B,Y);
input[2:0] A,B;
output Y;
wire Y;
assign Y=~((A[0]^B[0])||(A[1]^B[1])||(A[2]^B[2])); endmodule
仿真测试:
module test_hw2;
reg[2:0] A,B;
wire Y;
hw2 U1(A,B,Y);
initial
begin
A=3'b000;B=3'b000;
#50 A=3'b000;B=3'b000;
#50 A=3'b111;B=3'b111;
#50 A=3'b000;B=3'b110;
#50 A=3'b111;B=3'b000;
#50 A=3'b110;B=3'b110;
#50 A=3'b011;B=3'b010;
#50 A=3'b001;B=3'b011;
#50 A=3'b111;B=3'b010;
#50 $stop;
end
initial $monitor($time,"\tA=%b\tB=%b\tY=%b",A,B,Y); endmodule
第二题:参数化电路设计
1. 用行为描述方式实现下图所示的具有“one -hot”(独热)状态的环形计数器。要求使用参数化的模块。 parameter SIZE =3; input clock, reset;
output [SIZE -1:0]counter;
说明:低电平同步复位,此时counter 最低位为“1”,其余位均为“0”。
clk ]res et
]]
2. 编写测试程序来验证该模块的正确性,要求测试对象是一个5位的独热状态环形计数器。 电路设计:
module hw3(counter,clock,reset); parameter SIZE =3; input clock,reset; output[SIZE-1:0]counter; reg[SIZE-1:0]counter;
always@(posedge clock)
if(reset)
counter<=1;
else
counter<={ counter[0],counter[SIZE-1:1]};
endmodule
仿真测试代码:
module test_hw3;
reg clock,reset;
wire counter;
hw3 U1(counter,clock,reset);
always
#50 clock=~clock;
initial
begin
clock=0;
#20 reset=1;
#40 reset=0;
#500 $stop;
end
initial
begin
$monitor($time,"\tclock=%b\treset=%b\tcounter=%b",clock,reset,counter );
end
endmodule
第三题:计数器设计
1.用DFF实现二分频;
要求:
(1)画出数字电路原理图;
(2)采用行为描述方式实现DFF,其中DFF具有异步清零功能;
电路设计:
module hw4(Q,clk,reset);
output Q;
input clk,reset;
reg Q;
always@(posedge clk or reset)
if(!reset)
Q<=1'b0;
else
Q=~Q;
endmodule
仿真测试:
module test_hw4;
wire Q;
reg clk,reset;
hw4 U1(Q,clk,reset);
always #50 clk=~clk;
initial
begin
reset=0; clk=0;
#10 reset=1;
#30 reset=0;
#10 reset=1;
#500 $finish;
end
initial
$monitor($time,"\treset=%b\tclk=%b\tQ=%b",reset,clk,Q); endmodule