我有一个基本的计数器示例,计数器是6位宽。
reg[5:0] currcounterval_reg;
always @(posedge clk_g0)
currcounterval_reg <= currcounterval_reg+ 1'b1;
我的约束 Virtex 7芯片上的时钟频率为83 Mhz 912ns。计数器没有复位,输出连接到板引脚。当我运行电路时,我看到如所附(硬件运行)o / p所示切换信号。在附带的屏幕截图中,如果你看看计数器,在7(7)之后,我应该得到'8'......但它首先切换到'12',因为bit-2比其他的更晚。我有一个xor门下游,我比较两个计数器的o / p。如何避免陷入这个问题?
无论我做什么约束,它都不会消失。请帮我一些删除切换的策略。
如果您有更多问题,请随时问我。
你可以在这里找到我的波形 http://i.imgur.com/btEMiFD.png?1
感谢。
答案 0 :(得分:2)
我猜这是一个不正确的约束问题。但请尝试明确连接同步计数器以解决问题。
reg[5:0] counter;
always @(posedge clk_g0)
begin
counter[0] <= ~counter[0] ;
counter[1] <= (counter[0] ) ? ~counter[1] : counter[1];
counter[2] <= (&counter[1:0] ) ? ~counter[2] : counter[2];
counter[3] <= (&counter[2:0] ) ? ~counter[3] : counter[3];
counter[4] <= (&counter[3:0] ) ? ~counter[4] : counter[4];
counter[5] <= (&counter[4:0] ) ? ~counter[5] : counter[5];
end
答案 1 :(得分:2)
您需要使XOR输出同步。 XOR输出应该转到FF的D输入,该输入在同一个上升沿计时,使计数器递增。将FF的Q输出置于FPGA引脚而不是XOR输出。
您不应尝试匹配两个计数器的组合逻辑延迟和路由延迟。从两个计数器到XOR门的延迟路径几乎肯定会有所不同,因此快速XOR(如Virtex 7)会产生毛刺。在一个无关紧要的良好同步设计中,因为您只关心组合逻辑输出在下一个时钟边沿之前是有效的。