AR# 8183

SYNPLIFY : HDL (VHDL/Verilog) での ROM の推測方法

説明

キーワード : Asynchronous, select, rom, synplicity, 非同期, 選択

重要度 : 標準

概要 :
Synplify 5.3 の新機能の 1 つは ROM の推測です。
推測された ROM をザイリンクスの ROM プリミティブ、ROM16X1 および ROM32X1 にマップします。
ザイリンクス ROM プリミティブは、syn_romstyle という属性を使って推測されます。
現在は、select_rom だけが、この属性でサポートされています。 この属性は、次の例に示すように ROM の出力に設定されます。

注 : Synplicity 5.3 でテスト済みです。

ソリューション

1

VHDL の例

library IEEE;
use IEEE.std_logic_1164.all;
entity rom is
port ( a: in std_logic_vector(3 downto 0);
z: out std_logic_vector(3 downto 0)
);
attribute syn_romstyle : string;
attribute syn_romstyle of z : signal is "select_rom";
end rom;

architecture rtl of rom is
begin
process(a)
begin
case a is
when "0000" => z <= "1010";
when "0001" => z <= "0100";
when "0010" => z <= "0111";
when "0011" => z <= "0010";
when "0100" => z <= "0101";
when "0101" => z <= "1001";
when "0110" => z <= "1011";
when "1001" => z <= "0001";
when "1010" => z <= "1111";
when "1011" => z <= "0110";
when "1100" => z <= "1000";
when "1101" => z <= "1110";
when "1110" => z <= "1100";
when others => z <= "0000";
end case;
end process;
end rtl;

2

SDC の例:
Synplify では、VHDL/Verilog デザインを一度実行してから、[HDL Analyst] の [RTL] から [Hierarchical View] を選択します。
注 : ROM モジュール名の例: z_18[3:0]

[New Constraint File] アイコンをクリックし、[Attributes] タブを選択して、次の内容を入力します。
[Object] 列に z_18[3:0] (ROM インスタンス名)
[Attribute] 列に syn_romstyle
[Value] 列に select_rom

上記の入力内容を保存し、再度実行します。

あるいは、<filename>.sdc に次の行を入力します。
define_attribute {z_18[3:0]} syn_romstyle {select_rom}

3

Verilog の例 :

module testrom(a, z);
input [3:0] a;
output [3:0] z;

reg [3:0] z /* synthesis syn_romstyle = "select_rom" */;

always @(a)
begin
case(a)
4'b0000: z = 4'hA;
4'b0001: z = 4'h4;
4'b0010: z = 4'h7;
4'b0011: z = 4'h2;
4'b0100: z = 4'h5;
4'b0101: z = 4'h9;
4'b0110: z = 4'hB;
4'b1001: z = 4'h1;
4'b1010: z = 4'hF;
4'b1011: z = 4'h6;
4'b1100: z = 4'h8;
4'b1101: z = 4'hE;
4'b1110: z = 4'hC;
default : z = 4'h0;
endcase
end

endmodule

AR# 8183
日付 04/24/2007
ステータス アーカイブ
種類 一般