帮忙看下代码问题


能否抽点时间帮我看一下。
原始代码:
module COUNTER(
Rst,
Clk_ro,
Clk_std,
Cnt_numb);
input Rst;
input Clk_ro;
input Clk_std;
output [7:0]Cnt_numb;
reg Flag_ro;
wire Flag_std;
reg bdat1;
reg bdat2;
reg [7:0]Ro_numb;
reg [7:0]Cnt_numb;
always@(negedge Rst or posedge Clk_ro)
begin
if(!Rst)
begin
Ro_numb <= 8'h00;
Flag_ro<=0;
end
else
if(Ro_numb==8'h77)
Flag_ro<=1;
else
Ro_numb <= Ro_numb+1;
end
always@(negedge Rst or posedge Clk_std)
begin
if(!Rst)
{bdat2,bdat1}<=2'b00;
else
{bdat2,bdat1}<={bdat1,Flag_ro};
end
assign Flag_std=bdat2;
always@(negedge Rst or posedge Clk_std)
begin
if(!Rst)
Cnt_numb<=8'h00;
else
if(Flag_std==0)
Cnt_numb<=Cnt_numb+1;
else ;
end
endmodule
测试文件:
initial
begin
Rst=0;
Clk_ro=0;
Clk_std=0;
#20 Rst=1;
#2000 Rst=0;
#20 Rst=1;
#2000 Rst=0;
#20 Rst=1;
#2000 Rst=0;
#20 Rst=1;
end
always #5 Clk_std=~Clk_std;
always #20 Clk_ro=~Clk_ro;
initial
begin
#10000;
$stop;
end


不好意思哈,第一次发图片,有点乱。也没找到删除的地方
我不知道你这个代码想要实现什么功能,但是这段代码
else
if(Ro_numb==8'h77)
Flag_ro<=1;
else
Ro_numb <= Ro_numb+1;
会把Ro_numb固定在8'h77上的.
另外,你的仿真rst信号给的时间点不对导致unknown出来了
Cnt_numb固定在这个值是我想要的。请教下Rst给的时间点不对指的是?从波形看,好像rst和clk同时跳变,虽然前仿没有时序问题,但是同时变化会有问题的,你最好错开一点时间.
另外你的问题到底是什么,你还没说过?
我的问题其实就在这,clk频率相对rst来说变化会很快,我怎么去控制这两个不同时变化呢。尤其是在后仿真有布线延时的影响会变得很难去估计吧
用时钟去同步复位信号,寄存器用异步复位,仿真的时候同步器要用非时序模型代替
十分感谢。仿真的时候同步器要用非时序模型代替。这句话是什么意思哦异步复位同步撤离。
你这个是后仿的么?貌似加了timingcheck啊,理由上面的人已经说了,clk_ro和rst同时作用的问题。你可以通过以下方法来做:
1. 用clk_ro和clk_std同步rst生成每个时钟域的rst。如下:
always @ ( negedge clk_ro )
begin
rst_ro_sync1 <= rst;
rst_ro_sync2 <= rst_ro_sync1;
end
always @ ( negedge clk_std )
begin
rst_std_sync1 <= rst;
rst_std_sync2 <= rst_std_sync1;
end
然后使用rst_ro_sync2作为clk_ro的异步复位,使用rst_std_sync2作为clk_std的异步复位。
需要注意:clk_std和clk_ro要是一直有的,不能被门控,或者说不能跟rst有关系。另外,仿真还是会出问题,我不知道modelsim怎么设置,你在vcs里面应该对rst_ro_sync1和rst_std_sync1设置notimingcheck,否则的话还是会有x,虽然实际电路中不会有x。
2.如果你只是想仿真的话。在testbench里面用以下语句来释放rst。
initial
begin
rst = 1'b0;
.....
@(negedge clk_ro); //这里也有可能使用clk_std。
#10; //这个延迟是根据clk_ro和clk_std之间的相位关系来设置,保证clk_ro没问题后,clk_std也没问题。
rst = 1'b1;
......
end
这个方法就是去适应仿真器脾气的。玩玩的时候用用就可以了。这种情况还没有遇到过,另外有个问题,你的仿真都没有放到过Ro_numb==8'h77的情况么?
学习!
是想通过已经标准时钟频率,测量未知输入时钟频率吗?
是的,不知这样可行不功能上好像没有问题的,但建议先做功能仿真,功能仿真通过了再考虑后仿真或者实现
