UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

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
作成日 07/29/1999
最終更新日 08/11/2003
ステータス アーカイブ
タイプ 一般