testbench问题:时钟和复位都是对的,就是out没有正常显示结果
时间:10-02
整理:3721RD
点击:
这是我的Counter4_tp代码:`timescale 1ns/1ns
module Counter4_tp;
reg clk,reset,ena;
wire[3:0] out;
parameter DELY=100;
Counter4 mycount(
.sys_clk(clk),
.sys_rst_n(reset),
.ena(ena),
.dout(out)
);
always #(DELY/2) clk=~clk;
initial
begin
clk=0;
ena=0;
reset=0;
#DELY reset=1;
#DELY reset=0;
#DELY ena=1;
#(DELY*20) $finish;
end
endmodule
这是我的Counter4.v代码:
module Counter4(
//input
sys_clk,
sys_rst_n,
ena,
//output
dout,
cout
);
//input ports
input sys_clk; //system clock;
input sys_rst_n; //system reset, low is active;
input ena; //
//output ports
output [3:0] dout;
output cout;
//reg define
reg [3:0] counter;
//wire define
/*******************************************************************************************************
** Main Program
**
********************************************************************************************************/
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0) begin
counter <= 1'b0;
end
else if (ena == 1'b1) begin
counter <= counter + 1'b1;
end
end
assign cout = &counter;
assign dout = counter;
endmodule
//end of RTL code
波形在附件中,为何输出out没有正常显示呢,谢谢各位!
module Counter4_tp;
reg clk,reset,ena;
wire[3:0] out;
parameter DELY=100;
Counter4 mycount(
.sys_clk(clk),
.sys_rst_n(reset),
.ena(ena),
.dout(out)
);
always #(DELY/2) clk=~clk;
initial
begin
clk=0;
ena=0;
reset=0;
#DELY reset=1;
#DELY reset=0;
#DELY ena=1;
#(DELY*20) $finish;
end
endmodule
这是我的Counter4.v代码:
module Counter4(
//input
sys_clk,
sys_rst_n,
ena,
//output
dout,
cout
);
//input ports
input sys_clk; //system clock;
input sys_rst_n; //system reset, low is active;
input ena; //
//output ports
output [3:0] dout;
output cout;
//reg define
reg [3:0] counter;
//wire define
/*******************************************************************************************************
** Main Program
**
********************************************************************************************************/
always @(posedge sys_clk or negedge sys_rst_n) begin
if (sys_rst_n ==1'b0) begin
counter <= 1'b0;
end
else if (ena == 1'b1) begin
counter <= counter + 1'b1;
end
end
assign cout = &counter;
assign dout = counter;
endmodule
//end of RTL code
波形在附件中,为何输出out没有正常显示呢,谢谢各位!

没有正常输出时正常的,因为在ena信号拉高之前,你一直处于复位(reset=0), 模块代码不可能跳转到
else if (ena == 1'b1) begin
counter <= counter + 1'b1;
end
按照您的意见已经改好了,真的非常感谢啊,大哥!
你的复位信号最后保持为低了
