AR# 17481

|

6.1i XST - 「FATAL_ERROR: Xst:Portability /export/Port_Main.h: 127:1.13」 というエラー メッセージが表示される

説明

キーワード : internal, HDL, VHDL, Verilog, 致命的, 内部, エラー

XST で、次のエラー メッセージが表示されます。

"FATAL_ERROR:Xst:Portability/export/Port_Main.h:127:1.13."

ザイリンクスでは、XST で発生するすべての致命的なエラーを修正するよう努めており、将来のバージョンの機能を向上させるため、発生した問題を解析しています。 そのため、エラーがこのアンサーで回避できる場合でも、次の Web サイトからウェブケースを開くようお願いします。

http://www.xilinx.co.jp/support/clearexpress/websupport.htm

ソリューション

1

上記の致命的なエラーは、さまざまな理由で発生します。 合成レポートの最後の数項目を参照して、XST で最後に何が実行されたかを確認してください。これが合成オプションに関連している場合は、そのオプションをオフにして合成を再実行してください。 XST で、エラーの原因となった合成エンジンの部分がバイパスされ、問題が解消する場合があります。 まず、次の手順に従い、Project Navigator でアドバンス オプションが表示されていることを確認します。

1. [Edit] をクリックします。
2. [Preferences] をクリックします。
3. [Processes] タブをクリックします。
3. [Property display level] を [Advanced] に設定します。
4. [OK] をクリックします。

合成オプションを設定するには、次の手順に従います。

1. 合成する HDL ファイルをハイライトします。
2. プロセス ウィンドウで [Synthesize - XST] を右クリックします。
3. [Properties] をクリックします。

設定可能なすべての合成プロパティが表示されます。

メモ : [HDL Options] タブの [Shift Register Extraction] により、致命的なエラーが解決するケースが多いようです。

2

ブロック RAM/ROM を推論すると、XST で致命的なエラーが発生する場合があります。

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

また、RAM/ROM 推論を [Auto] から [Distributed] に変更しても、この問題を回避できます。
1. 最上位の HDL ファイルをハイライトします。
2. プロセス ウィンドウで [Synthesize - XST] を右クリックします。
3. [Properties] をクリックします。
4. [HDL Options] タブをクリックします。
5. [RAM Style] または [ROM Style] を [Auto] から [Distributed] に変更します。
6. [OK] をクリックします。

3

定数の配列にダイナミック インデックスが使用されると、XST で致命的なエラーが表示されます。

constant my_2d_array : 2d_array := (000, 111);
T <= my_2d_array(I)(J); -- I と J は定数ではなく信号

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

また、この問題は次のように中間信号を使用しても回避できます。

constant C : 2d_array := (000, 111);
T1 <= C(I);
T2 <= T1(J);

4

上記の致命的なエラーは、VHDL でブール型のポートが使用されていると表示されます。

entity tim_e is
port ( CLK: in std_logic;
d: in boolean;
end tim_e;

architecture behavioral_tim_e of tim_e is

begin
process(CLK)
begin
if (CLK'event) and (CLK = '0') then

if (d = FALSE) then
end if;
end if; --CLK
end process; --CLK
end behavioral_tim_e;


この問題を回避するには、別のタイプのポートを使用してください。

entity tim_e is
port ( CLK: in std_logic;
d: in std_logic;
end tim_e;

architecture behavioral_tim_e of tim_e is

begin
process(CLK)
begin
if (CLK'event) and (CLK = '0') then

if (d = '1') then
end if;
end if; --CLK
end process; --CLK
end behavioral_tim_e;

5

混合言語モードの場合、インスタンシエーションで 1 ビット幅を超えるポートのすべてが使用されていないと、XST で致命的なエラーが発生します。

entity mid_entity;
:
:
u1 : bottom_inst
port map
:
port_bottom (1 downto 0) => port_mid (1 downto 0), -- ポートが接続されている
:
:

module top (...);
:
:
mid_entity u1 (
:
.mid_port[1:0] (), //最終的には、ポートは未接続となり致命的なエラーが発生する
:
:

この問題を回避するには、未使用のポートを実際のポートではなく open に接続してください。

u1 : bottom_inst
port map
:
port_bottom (1 downto 0) => open, -- ポートを open に接続
:
:

6

宣言された信号の幅が十分でないと、XST で内部エラーが発生します。

reg [11:0] tpkt_size;
:
:

コードの記述 :
tpkt_size [15:8] <= SR_DATA ;

信号幅を修正すると、この問題を解決できます。

7

比較に使用されるベクタが減算にも使用されていると、致命的なエラーが発生します。 リソース共有がオフの場合、このモジュールを合成すると、致命的なエラーが発生します。

2 つのレジスタの減算を取り出して異なる文で評価し、この差を元の減算で使用すると、モジュールが問題なく合成されます。

次のモジュールの合成では、致命的なエラーが発生します。

Verilog コードの例
module test(clk, A, C);
input clk;
input [1:0] A;
input C;

reg [1:0] B;
reg [1:0] D;

always@(posedge clk)
begin
B <= D;
end

// wire delta = B - A;
always@(A or B or C)
begin
if ((B == 2'b00) || (C == 1'b0))
D <= 2'b00 - (B - A);
// D <= 2'b00 - delta;
end

endmodule

減算部分を取り出して個別に評価すると、問題なく合成できます。

Verilog コードの例
module test(clk, A, C);
input clk;
input [1:0] A;
input C;

reg [1:0] B;
reg [1:0] D;

always@(posedge clk)
begin
B <= D;
end

wire delta = B - A;
always@(A or B or C)
begin
if ((B == 2'b00) || (C == 1'b0))
// D <= 2'b00 - (B - A);
D <= 2'b00 - delta;
end

8

使用中のパッケージ内で信号を宣言している場合、致命的なエラーが発生します。

この問題を回避するには、信号をグローバルに宣言せずに、使用するアーキテクチャ内で宣言してください。

9

このエラーは、次のようにザイリンクス ツールのインストール ディレクトリにスペースが含まれていると発生します。

C:\Program Files\Xilinx

この問題を修正するには、ディレクトリを次のように変更してください。

C:\Xilinx

10

この致命的なエラーは、リソース共有オプションがオフになっている場合、次のような構文で発生します。

q <= -(a-b);

この問題を回避するには、リソース共有オプションをオンにしてください。

1. [Synthesize - XST] を右クリックします。
2. [Properties] をクリックします。
3. [HDL Options] タブをクリックします。
4. [Resource Sharing] をオンにします。

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

11

信号に複数のドライバがあると、このエラーが発生することがあります。
AR# 17481
日付 05/09/2012
ステータス アーカイブ
種類 一般
People Also Viewed