问题

时序电路设计并测试,设计一个模24的计数器。具有高电平的异步复位信号rst、同步置数信号load、上升沿触发时钟clk,置数数输入data,输出计数值sum和进位值cont。测试信号通过monitor或display文本显示。

verilog代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
module count24(rst,load,clk,data,sum,cont);   
input rst,load,clk;
input [4:0] data;
output sum;
output cont;
reg [4:0] sum;
initial
begin
sum=5'b00000;
end
always @(posedge clk or negedge rst)
begin
if(!rst) sum=5'b00000;
else if(load) sum=data;
else if(sum==5'b10111) sum=0;
else sum=sum+1'b1;
end
assign cont = sum[0]&sum[1]&sum[2]&sum[4];
endmodule

仿真测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
`timescale 1ps/1ps
module count24_vlg_tst();
reg eachvec;
reg clk;
reg [4:0] data;
reg load;
reg rst;
wire cont;
wire [4:0] sum;
count24 i1 (
.clk(clk),
.cont(cont),
.data(data),
.load(load),
.rst(rst),
.sum(sum)
);
initial
begin
$display("Running testbench");
clk=0;
rst=1;
load=0;
data=5'b01010;
#5 rst=0;
#1 $display("rst:%b -- sum:%b", rst,sum);
rst=1;
#5 load=1;
#1 $display("load:%b -- sum:%b", load,sum);
load=0;
#100 $stop;
end
always
begin
#1 clk=~clk; $display("sum:%b -- cont:%b", sum,cont);
end
endmodule

仿真结果