1

デザインをXilinxISE13.1で合成しました。ターゲットデバイスはVirtex5です。次に、次の警告が発生しました。

 WARNING:Xst:819 - "F:/FRONT-END/h264/inter/src/eei/eei_mvd.vhd" 
line 539: One or more signals are missing in the process sensitivity list. 
To enable synthesis of FPGA/CPLD hardware, XST will assume that all necessary signals are present in the sensitivity list. 
Please note that the result of the synthesis may differ from the initial design specification. The missing signals are:    
<mvd_l0<3><3>>, <mvd_l0<3><2>>, <mvd_l0<3><1>>, <mvd_l0<3><0>>, <mvd_l0<2><3>>, <mvd_l0<2><2>>,
 <mvd_l0<2><1>>, <mvd_l0<2><0>>, <mvd_l0<1><3>>, <mvd_l0<1><2>>, <mvd_l0<1><1>>, <mvd_l0<1><0>>,
 <mvd_l0<0><3>>, <mvd_l0<0><2>>, <mvd_l0<0><1>>, <mvd_l0<0><0>>, <mvd_l1<3><3>>, <mvd_l1<3><2>>,
 <mvd_l1<3><1>>, <mvd_l1<3><0>>, <mvd_l1<2><3>>, <mvd_l1<2><2>>, <mvd_l1<2><1>>, <mvd_l1<2><0>>,
 <mvd_l1<1><3>>, <mvd_l1<1><2>>, <mvd_l1<1><1>>, <mvd_l1<1><0>>, <mvd_l1<0><3>>, <mvd_l1<0><2>>, 
<mvd_l1<0><1>>, <mvd_l1<0><0>>, <mvd<0>>, <mvd<1>>

これが私のソースコードです:

proc_update_next: process(mvd_l0, mvd_l1, mvd, subMBPart_Idx, MBPart_Idx, eei_info )
  begin
    --// Init
    next_mvd_l0 <= mvd_l0;
    next_mvd_l1 <= mvd_l1;
    --// Change
    if eei_info.mb_type =  BLK_8x8 then
      for  i in 3 downto 0 loop
        for  j  in 3 downto 0  loop
          if i = to_integer(unsigned(MBPart_Idx))  and j = to_integer(unsigned(subMBPart_Idx)) then
            next_mvd_l0(i)(j)  <=  mvd(0);
            next_mvd_l1(i)(j)  <=  mvd(1);
          end  if;
        end  loop;
      end loop;
    else
      for  i in 3 downto 0 loop
        if i = to_integer(unsigned(MBPart_Idx)) then
          next_mvd_l0(i)(0)  <=  mvd(0);
          next_mvd_l1(i)(0)  <=  mvd(1);
        end  if;
      end loop;
    end if;
  end process;

更新:コードを少し変更しましたが、それでもこの警告が表示されます。

mvd_l0とmvd_l1は2次元配列であり、感度リストに表示されます。ソースコードが抽象的すぎて、ISEが理解できない可能性があることを知っています。

Virtex 7(ラボでは利用できません)で試してみましたが、エラーはありません。だから、私の質問はこの警告を修正する方法ですか?ラッチにつながる可能性があるため、この警告を無視することはできません。

4

3 に答える 3

2

VHDL-2008コンストラクトprocess(all)を使用して、読み取られるすべての信号を感度リストに含めるようにツールに指示します。

または、クロックにのみ敏感なクロックプロセスにすることで、心配する必要もありません。

于 2013-02-27T10:53:08.213 に答える
0

next_mvd_l0およびのようなシグナルnext_mvd_l1は、一連の条件に対して 1 回だけ設定する必要があります。「init」セクションはまだ問題です。プロセスのリセットを回避する場合は、ローカル変数を使用することをお勧めします。

最適なオプション: 感度リストにリセットを追加し、有効になっている場合は、next_mvd_* を初期値に設定します

--// Init
if (reset = '1') then
    next_mvd_l0 <= mvd_l0;
    next_mvd_l1 <= mvd_l1;
end if;

2 番目のオプション: ローカル変数を使用する

proc_update_next: process(mvd_l0, mvd_l1, mvd, subMBPart_Idx, MBPart_Idx, eei_info )
    variable mvd_10_local : 2dArrayType;
    variable mvd_11_local : 2dArrayType;
begin
    --// Init
    mvd_10_local := mvd_l0;
    mvd_11_local := mvd_l1;
    --// Change
    if eei_info.mb_type =  BLK_8x8 then
        for  i in 3 downto 0 loop
            for  j  in 3 downto 0  loop
                if i = to_integer(unsigned(MBPart_Idx))  and j = to_integer(unsigned(subMBPart_Idx)) then
                    mvd_10_local(i)(j)  :=  mvd(0);
                    mvd_11_local(i)(j)  :=  mvd(1);
                end  if;
            end  loop;
        end loop;
    else
        for  i in 3 downto 0 loop
            if i = to_integer(unsigned(MBPart_Idx)) then
                    mvd_10_local(i)(j)  :=  mvd(0);
                    mvd_11_local(i)(j)  :=  mvd(1);
            end  if;
        end loop;
    end if;
    next_mvd_l0 <= mvd_10_local;
    next_mvd_l1 <= mvd_l1_local;
end process;
于 2013-02-26T15:36:23.903 に答える
0

VHDL レコード コンストラクト (eei_info.mb_type) を使用します。すべてのレコード要素を sens-list に追加して、xst を満足させることができます。私はこの警告を無視します。

于 2013-03-04T16:19:43.257 に答える