【问题标题】:FATAL_ERROR: Iteration limit 10000 is reachedFATAL_ERROR:达到迭代限制 10000
【发布时间】:2017-04-06 14:12:53
【问题描述】:

我面临一个问题已经超过 2 周了,我正在编写一个 artix 7 FPGA。过程很简单:

  • 串行模块接收 2 个比特流(2 个字节)
  • Demux 模块根据这 2 个字节启用数组 puf_en 中的 2 个位

当我将 demux 模块添加到 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;

谁能告诉我我的代码有什么问题?我测试了几种不同的方法,但我有这个错误。

谢谢

【问题讨论】:

  • 什么是R0_Number
  • 它是一个等于 63 的常数值
  • 我也警告过串行模块的循环,但是当我停用 demux 模块时它可以工作
  • 立即没有任何看起来令人震惊的错误。只是您不需要敏感列表中的 clk 以外的其他内容。如果您要提供一个最小的实体/架构对和一个展示问题的测试平台,那么有人可能会看一看。可能这甚至不是您的问题的根源(例如,您通过任何更改都没有忘记在 clk
  • 如果没有 demux 的端口(所有声明),知道它的输出在哪里使用以及如何使用,看来问题出在这个过程中。只有一个循环语句,它有一个 for 迭代方案。没有不在时钟边沿上的分配(没有组合循环)。请提供Minimal, Complete and Verifiable example。这可能是由于您的环形振荡器(组合反馈)中的零延迟分配而发生的。毫不拖延地,您将遇到增量周期限制。 puf_en_s 用在什么地方?

标签: vhdl fpga fatal-error xilinx vivado


【解决方案1】:

主要问题不在此代码中。它实际上与环形振荡器相关。在环形振荡器中,有零延迟的组合循环,它导致了这个问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2018-02-24
    • 2023-03-16
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多