我需要一个可以在达到800时重置的计数器,或者当输入中出现下降沿时,我会收到错误,例如“不支持的时钟语句”或“无法合成错误的同步描述”
我尝试了几件事,我需要这样的东西if rising_edge(clk) then
if Counter >= 800 OR rising_edge(X) then
Counter <= (others => '0');
else
Counter <= Counter + 1;
end if
X是重置计数器的输入信号,计数器是STD_LOGIC_VECTOR
谢谢你:)
答案 0 :(得分:0)
它表示“错误同步”描述,因为您尝试用多个时钟源描述寄存器。有一些FPGA系列支持这一点,但这种情况很少见且不常见。
首先,你写了“输入中的下降沿”然后使用了“rising_edge(X)”......
其次,没有办法计数器是std_logic_vector与你做整数常量的比较。我假设至少未签名。当然,除非您使用已弃用的软件包 - 您不应该使用它!
第三,你没有提到X与clk之间的任何关系。
标准解决方案是
counter_p : process (
clk,
reset
)
begin
if reset = '0' then
counter <= 0;
elsif rising_edge(clk) then
counter <= counter + 1;
if (counter = 800) then
counter <= 0;
end if;
end if;
end process counter_p;
如果X是同步的,则执行同步复位。
如果你真的只需要在下降沿进行异步复位 - 这意味着当复位被置位时,就在断言边沿之后的时钟上 - 那么你将不得不求助于使用clk和移位寄存器进行过采样,测试下降边缘并从中生成(a)同步复位。
答案 1 :(得分:0)
除时钟外,您不能在任何信号的上升沿动作。您必须查看先前的值和当前值,并确定它是否“上升”。本周似乎有很多类似的问题!
例如: