AR# 7140

3.x FPGA Express - Virtex、Virtex-E、Virtex-II の ROM の推論方法

説明

キーワード : Synopsys, FPGA Express, 3.3, 3.5, infer, ROM, primitive, Virtex, Virtex-E, Virtex-II, select-RAM, block, RAM, 推論, プリミティブ, ブロック

重要度 : 標準

概要 :
Virtex、Virtex-E、Virtex-II の ROM の推論方法について

ソリューション

1

FPGA Express バージョン 3.3 およびそれ以降には、次の構文を使用した場合、Virtex デザインの ROM プリミティブを推論する機能があります。 この機能に関して留意事項が 3 点あります。

1. 少なくとも 75% のステートを定義します (infer_mux 属性を使用する場合は 50% でも可能)。

2. これらのコンポーネントは、EDIF ネットリストに ROM16X1 ではなく、LUT4 として書き込まれますが、 どちらも同じようにインプリメントされます。

3. この機能は Virtex ベースのアーキテクチャにのみ使用可能です。

現在のところ、FPGA Express で RAM は推論されません。

FPGA Express 3.5 以降は、次のような場合に ROM のブロック RAM が推論されるようになりました (Virtex、Virtex-E、Virtex-II)。

Virtex/Virtex-E の場合 : アドレス行が少なくとも 10 ビットあり、データ行が 3 ビット以上の場合、ブロック RAM は推論されます。 また、アドレス行が 11 または 12 ビットの場合もブロック RAM が推論されます (この場合、データ幅に制限はありません)。

Virtex-II の場合 : アドレス行が 10 から 14 ビットの場合、ブロック RAM が推論されます (この場合、データ幅に制限はありません)。

infer_mux 属性についての詳細は、(Xilinx Answer 11331) を参照してください。


- 次の VHDL コードが 8 つの LUT にインプリメントされます (出力ビットごとに 2 つ)。

process (ADDRESS)
begin
case ADDRESS is
when "00000" => output <= "1110" ;
when "00001" => output <= "0100" ;
when "00010" => output <= "1101" ;
when "00011" => output <= "0001" ;
when "00100" => output <= "0010" ;
when "00101" => output <= "1111" ;
when "00110" => output <= "1011" ;
when "00111" => output <= "1000" ;
when "01000" => output <= "0011" ;
when "01001" => output <= "1010" ;
when "01010" => output <= "0110" ;
when "01011" => output <= "1100" ;
when "01100" => output <= "0101" ;
when "01101" => output <= "1001" ;
when "01110" => output <= "0000" ;
when "01111" => output <= "0111" ;
when "10000" => output <= "0000" ;
when "10001" => output <= "1111" ;
when "10010" => output <= "0111" ;
when "10011" => output <= "0100" ;
when "10100" => output <= "1110" ;
when "10101" => output <= "0010" ;
when "10110" => output <= "1101" ;
when "10111" => output <= "0001" ;
when "11000" => output <= "1010" ;
when "11001" => output <= "0110" ;
when "11010" => output <= "1100" ;
when "11011" => output <= "1011" ;
when "11100" => output <= "1001" ;
when "11101" => output <= "0101" ;
when "11110" => output <= "0011" ;
when "11111" => output <= "1101" ;
when others => output <= "1101";
end case;
end process;

- infer_mux 属性を使用した次の VHDL コードが 8 つの LUT にインプリメントされます (出力ビットごとに 2 つ)。

process (ADDRESS)
begin
case ADDRESS is -- synopsys infer_mux
when "00000" => output <= "1110" ;
when "00001" => output <= "0100" ;
when "00010" => output <= "1101" ;
when "00011" => output <= "0001" ;
when "00100" => output <= "0010" ;
when "00101" => output <= "1111" ;
when "00110" => output <= "1011" ;
when "00111" => output <= "1000" ;
when "01000" => output <= "0011" ;
when "01001" => output <= "1010" ;
when "01010" => output <= "0110" ;
when "01011" => output <= "1100" ;
when "01100" => output <= "0101" ;
when "01101" => output <= "1001" ;
when "01110" => output <= "0000" ;
when "01111" => output <= "0111" ;
when "10000" => output <= "0000" ;
when others => output <= "1101";
end case;
end process;

メモ : FPGA Express の問題により、ブロック RAM を使用する ROM が正しく推論されません。

この問題は、最新版の 4.2i サービス パックで修正されています。サービス パックは次のサイトから入手できます。
http://support.xilinx.co.jp/support/techsup/sw_updates
この修正は、4.2i サービス パック 2 以降に含まれます。

4.1i サービス パック 2 に含まれる FPGA Express をダウンロードし、インストールしてください。

2

- 次の Verilog コードが 8 つの LUT にインプリメントされます (出力ビットごとに 2 つ)。

always@(address)
begin
case (address)
5'b00000: romout = 4'b1110;
5'b00001: romout = 4'b0100;
5'b00010: romout = 4'b1101;
5'b00011: romout = 4'b0001;
5'b00100: romout = 4'b0010;
5'b00101: romout = 4'b1111;
5'b00110: romout = 4'b1011;
5'b00111: romout = 4'b1000;
5'b01000: romout = 4'b0011;
5'b01001: romout = 4'b1010;
5'b01010: romout = 4'b0110;
5'b01011: romout = 4'b1100;
5'b01100: romout = 4'b0101;
5'b01101: romout = 4'b1001;
5'b01110: romout = 4'b0000;
5'b01111: romout = 4'b0111;
5'b10000: romout = 4'b0000;
5'b10001: romout = 4'b1111;
5'b10010: romout = 4'b0111;
5'b10011: romout = 4'b0100;
5'b10100: romout = 4'b1110;
5'b10101: romout = 4'b0010;
5'b10110: romout = 4'b1101;
5'b10111: romout = 4'b0001;
5'b11000: romout = 4'b1010;
5'b11001: romout = 4'b0110;
5'b11010: romout = 4'b1100;
5'b11011: romout = 4'b1011;
5'b11100: romout = 4'b1001;
5'b11101: romout = 4'b0101;
5'b11110: romout = 4'b0011;
5'b11111: romout = 4'b1101;
default: romout = 4'b1101;
endcase
end

- infer_mux 属性を使用した次の Verilog コードが 8 つの LUT にインプリメントされます (出力ビットごとに 2 つ)。

always@(address)
begin
case (address) // synopsys infer_mux
5'b00000: romout = 4'b1110;
5'b00001: romout = 4'b0100;
5'b00010: romout = 4'b1101;
5'b00011: romout = 4'b0001;
5'b00100: romout = 4'b0010;
5'b00101: romout = 4'b1111;
5'b00110: romout = 4'b1011;
5'b00111: romout = 4'b1000;
5'b01000: romout = 4'b0011;
5'b01001: romout = 4'b1010;
5'b01010: romout = 4'b0110;
5'b01011: romout = 4'b1100;
5'b01100: romout = 4'b0101;
5'b01101: romout = 4'b1001;
5'b01110: romout = 4'b0000;
5'b01111: romout = 4'b0111;
5'b10000: romout = 4'b0000;
default: romout = 4'b1101;
endcase
end

メモ : FPGA Express の問題により、ブロック RAM を使用する ROM が正しく推論されません。

この問題は、最新版の 4.2i サービス パックで修正されています。サービス パックは次のサイトから入手できます。
http://support.xilinx.co.jp/support/techsup/sw_updates
この修正は、4.2i サービス パック 2 以降に含まれます。

4.1i サービス パック 2 に含まれる FPGA Express をダウンロードし、インストールしてください。
AR# 7140
日付 08/11/2003
ステータス アーカイブ
種類 一般