AR# 32189

Serial RapidIO v5.1 - コアのサンプル デザイン ファイルが合成でラッチを推論する

説明

VHDL バージョンの Serial RapidIO v5.1 コアのサンプル デザインを使用すると、XST 合成でラッチが生成されますが、reg_manager.vhd、tickler.vhd および target_user.vhd ソースに対して次のような警告メッセージが表示されます。

"WARNING:Xst:737 - Found 1-bit latch for signal <mresp_data_26>. Latches may be generated from incomplete case or if statements."

ハードウェアでは、これらのラッチの結果により、メンテナンス書き込みまたは読み出しに断続的にエラーが発生する場合があります。

ソリューション


ここに記述しているラッチの問題は、Serial RapidIO v5.2 コアで修正される予定です。当面の間は次を変更して、サンプル デザイン ファイルでラッチが削除されるようにしてください。

reg_manager.vhd ファイル :

v5.1 のコード :

process (clk, reset_n) begin
if (reset_n = '0') then
mresp_data <= x"0000000000000000" after TCQ;

elsif (tx_cs = TX_GET_D0) then
mresp_data(0 to 31) <= mgt_rx_data after TCQ;

elsif (tx_cs = TX_GET_D1) then
mresp_data(32 to 63) <= mgt_rx_data after TCQ;
end if;
end process;

次のように変更します。

process (clk, reset_n) begin
if (reset_n = '0') then
mresp_data_int <= x"0000000000000000" after TCQ;

elsif rising_edge(clk) then
if (tx_cs = TX_GET_D0) then
mresp_data_int(0 to 31) <= mgt_rx_data after TCQ;
mresp_data_int(32 to 63) <= mresp_data_int2(32 to 63) after TCQ;

elsif (tx_cs = TX_GET_D1) then
mresp_data_int(0 to 31) <= mresp_data_int2(0 to 31) after TCQ;
mresp_data_int(32 to 63) <= mgt_rx_data after TCQ;
end if;
end if;
end process;

mresp_data <= mresp_data_int;
mresp_data_int2 <= mresp_data_int;

Verilog サンプル デザイン (reg_manager.v) には次の変更も必要です。

v5.1 のコード :

always @(sel_bus_q or mgt_di_phy or mgt_di_usr or mgt_di_log)
begin
case (sel_bus_q)
3'b011: mgt_rx_data = mgt_di_phy;
3'b101: mgt_rx_data = mgt_di_log;
3'b110: mgt_rx_data = mgt_di_usr;
default: mgt_rx_data = mgt_rx_data;
endcase
end

次のように変更します。

always @(sel_bus_q or mgt_di_phy or mgt_di_usr or mgt_di_log)
begin
case (sel_bus_q)
3'b011: mgt_rx_data = mgt_di_phy;
3'b101: mgt_rx_data = mgt_di_log;
3'b110: mgt_rx_data = mgt_di_usr;
default: mgt_rx_data = 32'hx;
endcase
end



改訂履歴

04/02/2009 - 初期リリース
08/21/2009 - Verilog の修正を追加
AR# 32189
日付 12/15/2012
ステータス アクティブ
種類 一般