源文件:
`timescale 1ns / 1ps
module clk_counter(
input sys_clk,
input rst_n,
input gate,
output reg[31:0] clk_cnt,
output reg counter_valid
);
always@(posedge sys_clk or negedge rst_n)
begin
if(rst_n == 1'b0)
begin
clk_cnt <= 32'd0;
counter_valid <= 1'b0;
end
else if(gate == 1'b1)
begin
clk_cnt <= clk_cnt + 32'd1;
end
else if(gate == 1'b0)
begin
counter_valid <= 1'b1;
end
end
endmodule
仿真激励文件:
`timescale 1ns / 1ps
module vtf_clk_counter;
//inputs
reg clk;
reg rst_n;
reg gate;
//outputs
wire[31:0] clk_cnt;
wire counter_valid;
clk_counter uut(
.sys_clk(clk),
.rst_n(rst_n),
.gate(gate),
.clk_cnt(clk_cnt),
.counter_valid(counter_valid)
);
initial begin
clk = 0;
rst_n = 0;
gate = 0;
#100;
rst_n = 1;
#100;
gate = 1;
#1000;
gate = 0;
end
always #25 clk = ~clk;
endmodule
仿真波形:
引用: chenzhufly 发表于 2022-6-7 10:45 文件没问题啊,放大一下波形看看,现在的时间刻度是ms,太大了
好的,感谢,问题已经解决了
引用: chenzhufly 发表于 2022-6-13 11:15 解决了也说一下,怎么解决了啊,好给遇到同样问题的坛友有一些借鉴的地方
你发帖仿真图片说没问题,以为是自己粗心了没有调时间轴,
现在有点忘了,好像是顶层模块调用这个模块的时候参数的位宽没有对应好,32位的clk_count[31:0]传成一位位宽了。