AR# 50934

14.1 - ISIM - ネストされたループ文が正しく機能しない

説明

次のコードがあります。

   ladder2: for i in 0 to 14 generate begin
  process (clk, rst) begin 
   if rst = '1' then
--     xin(i+1,3) <= "00" & x"000";
--     xin(i+1,2) <= "00" & x"000";
--     xin(i+1,1) <= "00" & x"000";
--     xin(i+1,0) <= "00" & x"000";
    LADD:
    for j in 0 to 3 loop
     xin(i+1,j) <= "00" & x"000";
    end loop;
    

 

コメントアウトされている行は動作するのですが、ループ以降は実行するのですが、予期動作ではありません。

ソリューション

ループと generate 文の動作が異なっているのが原因です。

 

次のコードでも同じ動作が得られます。

 

ladder2: for i in 0 to 14 generate begin
  gen1:  for j in 0 to 3 generate begin
     process (clk, rst) begin           
        if rst = '1' then
             xin(i+1,j) <= "00" & x"000";
        elsif rising_edge(clk) then
             xin(i+1,?) <= xin(i,j);
        end if;
     end process;   
  end generate;
end generate;

AR# 50934
日付 12/16/2014
ステータス アクティブ
種類 一般
デバイス
ツール