Vhdl 错误(10818):Can';I don’我不能推断在的注册号。。因为它的值不在时钟边缘之外
我是vhdl新手,有两个问题:Vhdl 错误(10818):Can';I don’我不能推断在的注册号。。因为它的值不在时钟边缘之外,vhdl,Vhdl,我是vhdl新手,有两个问题: 主题->错误(10818)中的一个:无法在reset_BLOCK.vhd(49)处推断“syn_reset”的寄存器,因为它的值不在时钟边缘之外 错误(10822):复位块处的HDL错误。vhd(49):无法在此时钟边缘上实现分配寄存器 我搜索过任何提示,但没有找到任何与我的问题(代码)相匹配的提示。我想在时钟的下降沿和上升沿之间发送一个序列。也许我只是不懂vhdl。代码如下: reset\u signal\u write:进程(sclk\u reset\u
- 主题->错误(10818)中的一个:无法在reset_BLOCK.vhd(49)处推断“syn_reset”的寄存器,因为它的值不在时钟边缘之外
- 错误(10822):复位块处的HDL错误。vhd(49):无法在此时钟边缘上实现分配寄存器
reset\u signal\u write:进程(sclk\u reset\u in,init)
开始
选中:如果init='1',则
scs_reset此代码是用于模拟的,还是您希望它在合成时能够工作?如果它需要合成,你不能逃脱“X ns之后”——它不会起作用。但如果这只是为了模拟,那就没问题了。另请看:我想合成它,我之前看过那篇文章,但我没有看到任何有用的东西。要获得这些延迟,你必须创建一个计数器,每隔10、15或30 ns勾选一次,并将其与FSM结合使用,以控制输出的顺序。通常,在同一过程中混合上升沿
和下降沿
是一个坏主意。这会让你在路上遇到时间问题。您可以将
中的sclk_reset_视为计数器所需的100MHz、66MHz或33MHz时钟注册的数据,并从上升沿运行所有内容。此外,您仅在有下降沿时检查是否有上升沿。这永远不会是真的。
reset_signal_write :process (sclk_reset_in,init)
begin
selected :if init = '1' then
scs_reset <= '0' ;
sdata_reset <= '1';
syn_reset <= '0' after 30 ns;
falling_edge_detected :if falling_edge(sclk_reset_in) then
sdata_reset <= '0' after 30 ns;
sdata_reset <= '1' after 60 ns ;
sdata_reset <= '0' after 90 ns;
sdata_reset <='1' after 120 ns;
rising_edge_detected :if rising_edge(sclk_reset_in) then
syn_reset <= '1' after 30 ns;
scs_reset <= '1' after 60 ns;
end if rising_edge_detected;
end if falling_edge_detected ;