FATAL_ERROR: Iteration limit 10000 is reached
FATAL_ERROR: Iteration limit 10000 is reached
我遇到一个问题已经超过 2 周了,我正在对 artix 7 FPGA 进行编程。过程很简单:
- 一个串行模块接收 2 个比特流(2 个字节)
- Demux模块根据这2个字节启用数组中的2位puf_en
当我将 demux 模块添加到 whoe 设计时,在模拟期间我收到此错误:
FATAL_ERROR:达到迭代限制10000。
demux 的代码在这里:
PUF_STATE_PROCESS:process(clk,uart_read,PUF_signal,UART_READ_FLAG)
begin
if (rising_edge(clk)) then
if (uart_read="11111111") then-- this means reset
stop_s<='0';
puf_signal<=initial;
reset_s<='1';
LED_S<="1111";
else
case puf_signal is
When initial=>
reset_s<='1';
puf_en_s<=(others=>'0');
LED_S<="0001";
--if UART_READ_FLAG='1' then
if uart_read/="11111110" then
else
stop_s<='0';
puf_signal<=ch_i;
end if;
-- end if;
When ch_i =>
if UART_READ="11111110" or UART_READ="11111111" then
else
ch_i_s<=(uart_read);
puf_signal<=ch_j;
LED_S<="0010";
end if;
when ch_j=>
if UART_READ="11111110" or UART_READ="11111111" or uart_read=ch_i_s then
else
ch_j_s<=(uart_read);
mux_en_s_j<=uart_read;
puf_signal<=start;
timer_s<=(others=>'0');
LED_S<="0011";
end if;
when start=>
reset_s<='0';
if timer_start<10000 then
mux_en_s_i<=ch_i_s;
mux_en_s_j<=ch_j_s;
timer_start<=timer_start+1;
for i in 0 to (RO_Number) loop
if i=ch_i_s then
puf_en_s(i)<='1';
elsif i=ch_j_s then
puf_en_s(i)<='1';
else
puf_en_s(i)<='0';
end if;
end loop;
LED_S<="0100";
else
puf_signal<=finish;
timer_start<=0;
LED_S<="0101";
end if;
when finish=>
if timer_s<timer_max_value then
timer_s<=timer_s+'1';
puf_en_s<=(others=>'0');
LED_S<="0100";
else
stop_s<='1';
timer_s<=(others=>'0');
LED_S<="0111";
puf_signal<=initial;
end if;
end case;
end if;
end if;
end process;
任何人都可以告诉我我的代码有什么问题吗?我测试了几种不同的方法,但我遇到了这个错误。
谢谢
主要问题不在于此 code.It 实际上与环形 oscillators.In 环形振荡器相关,存在零延迟的组合循环,它导致了这个问题
我遇到一个问题已经超过 2 周了,我正在对 artix 7 FPGA 进行编程。过程很简单:
- 一个串行模块接收 2 个比特流(2 个字节)
- Demux模块根据这2个字节启用数组中的2位puf_en
当我将 demux 模块添加到 whoe 设计时,在模拟期间我收到此错误: FATAL_ERROR:达到迭代限制10000。
demux 的代码在这里:
PUF_STATE_PROCESS:process(clk,uart_read,PUF_signal,UART_READ_FLAG)
begin
if (rising_edge(clk)) then
if (uart_read="11111111") then-- this means reset
stop_s<='0';
puf_signal<=initial;
reset_s<='1';
LED_S<="1111";
else
case puf_signal is
When initial=>
reset_s<='1';
puf_en_s<=(others=>'0');
LED_S<="0001";
--if UART_READ_FLAG='1' then
if uart_read/="11111110" then
else
stop_s<='0';
puf_signal<=ch_i;
end if;
-- end if;
When ch_i =>
if UART_READ="11111110" or UART_READ="11111111" then
else
ch_i_s<=(uart_read);
puf_signal<=ch_j;
LED_S<="0010";
end if;
when ch_j=>
if UART_READ="11111110" or UART_READ="11111111" or uart_read=ch_i_s then
else
ch_j_s<=(uart_read);
mux_en_s_j<=uart_read;
puf_signal<=start;
timer_s<=(others=>'0');
LED_S<="0011";
end if;
when start=>
reset_s<='0';
if timer_start<10000 then
mux_en_s_i<=ch_i_s;
mux_en_s_j<=ch_j_s;
timer_start<=timer_start+1;
for i in 0 to (RO_Number) loop
if i=ch_i_s then
puf_en_s(i)<='1';
elsif i=ch_j_s then
puf_en_s(i)<='1';
else
puf_en_s(i)<='0';
end if;
end loop;
LED_S<="0100";
else
puf_signal<=finish;
timer_start<=0;
LED_S<="0101";
end if;
when finish=>
if timer_s<timer_max_value then
timer_s<=timer_s+'1';
puf_en_s<=(others=>'0');
LED_S<="0100";
else
stop_s<='1';
timer_s<=(others=>'0');
LED_S<="0111";
puf_signal<=initial;
end if;
end case;
end if;
end if;
end process;
任何人都可以告诉我我的代码有什么问题吗?我测试了几种不同的方法,但我遇到了这个错误。
谢谢
主要问题不在于此 code.It 实际上与环形 oscillators.In 环形振荡器相关,存在零延迟的组合循环,它导致了这个问题