AR# 20182

v2.1 CORE Generator Aurora - VHDL Pro-X モジュールが初期化されない

説明

キーワード : LogiCORE Aurora, error, v2, Aurora, initialize, エラー, 初期化

重要度 : 標準

概要 :
VHDL Pro-X モジュールが初期化されません。 VHDL では、ポート マップされた信号の結合などポート マッピングでの連結オペレーションが行われません。 このため、最上位の Verilog モジュールを VHDL に変換する際に、ソース コードに信号を追加する必要があります。 MGT RX インターフェイスを Aurora Lane ロジックに接続する信号がこれにあたります。MGT に送られる信号は、Verilog コードでコンカチネーションとして処理されたビット選択されたサブセットです。 残念ながら、この代入文の左辺 (LHS) は不正です。原則として、信号は、出力信号が 2 度代入されるように接続します。

ソリューション

CORE Generator で生成したモジュールでこの問題を解消するには、次の手順に従ってください。

2 バイトのシングル レーンを使用したデザインの場合 :

1. コード内で次の代入文を見つけます。 レーンごとに 1 つのセットがあります。

rx_data_#_vec <= open_rx_data_i(48#+47 downto 48#) & rx_data_i(16*#+15 downto 16#);
rxnotintable_#_vec <= open_rx_not_in_table_i(6#+5 downto 6#) & rx_not_in_table_i(2#+1 downto 2#);
rxdisperr_#_vec <= open_rx_disp_err_i(6#+5 downto 6#) & rx_disp_err_i(2#+1 downto 2#);
rxcharisk_#_vec <= open_rx_char_is_k_i(6#+5 downto 6#) & rx_char_is_k_i(2#+1 downto 2#);
rxchariscomma_#_vec <= open_rx_char_is_comma_i(6#+5 downto 6#) & rx_char_is_comma_i(2#+1 downto 2#);

# は、0 から始まるレーン番号です。 たとえば、レーン 0 には、次を含むセクションがあります。

rx_data_0_vec <= open_rx_data_i(47 downto 0) & rx_data_i(15 downto 0);
rxnotintable_0_vec <= open_rx_not_in_table_i(5 downto 0) & rx_not_in_table_i(1 downto 0);
rxdisperr_0_vec <= open_rx_disp_err_i(5 downto 0) & rx_disp_err_i(1 downto 0);
rxcharisk_0_vec <= open_rx_char_is_k_i(5 downto 0) & rx_char_is_k_i(1 downto 0);
rxchariscomma_0_vec <= open_rx_char_is_comma_i(5 downto 0) & rx_char_is_comma_i(1 downto 0);


2. ビット幅を維持しながら、代入文の 左辺 (LHS) と右辺 (RHS) を入れ替えます。

rx_data_i(16*#+15 downto 16#) <= rx_data_#_vec(15 downto 0);
rx_not_in_table_i(2#+1 downto 2#) <= rxnotintable_#_vec(1 downto 0);
rx_disp_err_i(2#+1 downto 2#) <= rxdisperr_#_vec(1 downto 0);
rx_char_is_k_i(2#+1 downto 2#) <= rxcharisk_#_vec(1 downto 0);
rx_char_is_comma_i(2#+1 downto 2#) <= rxchariscomma_#_vec(1 downto 0);

# は、0 から始まるレーン番号です。 たとえば、レーン 2 は次のようになります。

rx_data_i(47 downto 32) <= rx_data_2_vec(15 downto 0);
rx_not_in_table_i(5 downto 4) <= rxnotintable_2_vec(1 downto 0);
rx_disp_err_i(5 downto 4) <= rxdisperr_2_vec(1 downto 0);
rx_char_is_k_i(5 downto 4) <= rxcharisk_2_vec(1 downto 0);
rx_char_is_comma_i(5 downto 4) <= rxchariscomma_2_vec(1 downto 0);


4 バイトのレーンを使用したデザインの場合、手順は同じですが、名前は若干異なります。

1. コード内で次の代入文を見つけてください。 レーンごとに 1 つのセットがあります。

rx_data_map_i(64*#+63 downto 64#) <= open_rx_data_i(32*#+31 downto 32#) & rx_data_i(32*#+31 downto 32#);
rx_not_in_table_map_i(8*#+7 downto 8#) <= open_rx_not_in_table_i(4*#+3 downto 4#) & rx_not_in_table_i(4*#+3 downto 4#);
rx_disp_err_map_i(8*#+7 downto 8#) <= open_rx_disp_err_i(4*#+3 downto 4#) & rx_disp_err_i(4*#+3 downto 4#);
rx_char_is_k_map_i(8*#+7 downto 8#) <= open_rx_char_is_k_i(4*#+3 downto 4#) & rx_char_is_k_i(4*#+3 downto 4#);
rx_char_is_comma_map_i(8*#+7 downto 8#) <= open_rx_char_is_comma_i(4*#+3 downto 4#) & rx_char_is_comma_i(4*#+3 downto 4#);

# は、0 から始まるレーン番号です。 たとえば、レーン 0 には、次を含むセクションがあります。

rx_data_map_i(63 downto 0) <= open_rx_data_i(31 downto 0) & rx_data_i(31 downto 0);
rx_not_in_table_map_i(7 downto 0) <= open_rx_not_in_table_i(3 downto 0) & rx_not_in_table_i(3 downto 0);
rx_disp_err_map_i(7 downto 0) <= open_rx_disp_err_i(3 downto 0) & rx_disp_err_i(3 downto 0);
rx_char_is_k_map_i(7 downto 0) <= open_rx_char_is_k_i(3 downto 0) & rx_char_is_k_i(3 downto 0);
rx_char_is_comma_map_i(7 downto 0) <= open_rx_char_is_comma_i(3 downto 0) & rx_char_is_comma_i(3 downto 0);

2. ビット幅を維持しながら、代入文の 左辺 (LHS) と右辺 (RHS) を入れ替えます。

rx_data_i(32*#+31 downto 32#) <= rx_data_map_i(64*#+31 downto 64#);
rx_not_in_table_i(4*#+3 downto 4#) <= rx_not_in_table_map_i(8*#+3 downto 8#);
rx_disp_err_i(4*#+3 downto 4#) <= rx_disp_err_map_i(8*#+3 downto 8#);
rx_char_is_k_i(4*#+3 downto 4#) <= rx_char_is_k_map_i(8*#+3 downto 8#);
rx_char_is_comma_i(4*#+3 downto 4#) <= rx_char_is_comma_map_i(8*#+3 downto 8#);

# は、0 から始まるレーン番号です。 たとえば、レーン 2 は、次のようになります。

rx_data_i(95 downto 64) <= rx_data_map_i(159 downto 128);
rx_not_in_table_i(11 downto 8) <= rx_not_in_table_map_i(19 downto 16);
rx_disp_err_i(11 downto 8) <= rx_disp_err_map_i(19 downto 16);
rx_char_is_k_i(11 downto 8) <= rx_char_is_k_map_i(19 downto 16);
rx_char_is_comma_i(11 downto 8) <= rx_char_is_comma_map_i(19 downto 16);
AR# 20182
日付 12/15/2012
ステータス アーカイブ
種類 一般