2017-04-06 191 views
1

这是2个多星期我面临一个挑战,我编程artix 7 FPGA。这个过程是简单的:FATAL_ERROR:达到迭代限制10000达到

  • 串行模块接收2位流(2个字节)根据这些2个字节
  • 多路分离器模块使能在阵列2个比特puf_en

当我添加多路分离模块到whoe设计,在模拟期间,我收到此错误: FATAL_ERROR:达到迭代限制10000。

为解复用器的代码是在这里:

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; 

任何人都可以电话我有什么错我的代码?我测试了severa不同的方法,但我有这个错误。

感谢

+0

什么是'R0_Number' ? – Paebbels

+0

这是一个恒定值等于63 – AB86

+0

我也警告有关串行模块的环路,但是当我停用demux modue时,它可以工作 – AB86

回答

0

的主要问题是在这code.It实际上是相关的环oscillators.In环振有组合循环零延迟和它造成这个问题