0

uart (現在 11) のインスタンスごとに、Lattice Diamond からこれらの警告を受け取りました。

WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_14' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_0_COUT1_9_14' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_12' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_10' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_8' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_6' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_4' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_2' has no load
WARNING - ngdbuild: logical net 'UartGenerator_0_Uart_i/Uart/rxCounter_cry_0' has no load

VHDLコードは

entity UART is 
    generic (
        dividerCounterBits: integer := 16
    );
    port (
        Clk         : in  std_logic;                        -- Clock signal
        Reset       : in  std_logic;                        -- Reset input
        ClockDivider: in  std_logic_vector(15 downto 0);

        ParityMode  : in std_logic_vector(1 downto 0);      -- b00=No, b01=Even, b10=Odd, b11=UserBit
    [...]


architecture Behaviour of UART is
    constant oversampleExponent : integer := 4;

    subtype TxCounterType is integer range 0 to (2**(dividerCounterBits+oversampleExponent))-1;
    subtype RxCounterType is integer range 0 to (2**dividerCounterBits)-1;
    signal rxCounter: RxCounterType;
    signal txCounter: TxCounterType;
    signal rxClockEn: std_logic; -- clock enable signal for receiver
    signal txClockEn: std_logic; -- clock enable signal for transmitter
begin
    rxClockdivider:process (Clk, Reset)
    begin
        if Reset='1' then
        rxCounter <= 0;
        rxClockEn <= '0';
    elsif Rising_Edge(Clk) then
        -- RX counter (oversampled)
        if rxCounter = 0 then
            rxClockEn <= '1';
            rxCounter <= to_integer(unsigned(ClockDivider));
        else
            rxClockEn <= '0';
            rxCounter <= rxCounter - 1;
        end if;
    end if;
    end process;

    txClockDivider: process (Clk, Reset)
    [...]

    rx: entity work.RxUnit
    generic map (oversampleFactor=>2**oversampleExponent)
    port map (Clk=>Clk, Reset=>Reset, ClockEnable=>rxClockEn, ParityMode=>ParityMode,
            ReadA=>ReadA, DataO=>DataO, RxD=>RxD, RxAv=>RxAv, ParityBit=>ParityBit,
            debugout=>debugout
             );

end Behaviour;

これは単一の Uart であり、それらすべて (現在 11 個の uart) を作成するために、私はこれを使用します

-- UARTs

    UartGenerator: For i IN 0 to uarts-1 generate
    begin
        Uart_i : entity work.UartBusInterface 
            port map (Clk=>r_qclk, Reset=>r_reset, 
                cs=>uartChipSelect(i), nWriteStrobe=>wr_strobe, nReadStrobe=>rd_strobe,
                address=>AdrBus(1 downto 0), Databus=>DataBus,
                TxD=>TxD_PAD_O(i), RxD=>RxD_PAD_I(i),
                txInterrupt=>TxIRQ(i), rxInterrupt=>RxIRQ(i), debugout=>rxdebug(i));

        uartChipSelect(i) <= '1' when to_integer(unsigned(adrbus(5 downto 2)))=i+4 and r_cs0='0' else '0';
    end generate;

私はそれを統合でき、uarts は機能しますが、なぜ警告が表示されたのですか?

IMHO rxCounter は可能な値を 1 つずつ使用する必要がありますが、1 秒ごとに「負荷がありません」という警告が表示されるのはなぜですか?

これは、これらのネットが使用されておらず、削除されることを意味することをどこかで読みました。
しかし、0 から 2^n-1 までカウントするには、少なくとも n ビットが必要です。

4

3 に答える 3

2

Latticengdbuildは、実行中のジョブに対して特にスパムです。ngdbuild出力をmakefileのgrepにパイプして、これらのメッセージを正確に削除します。

ngdbuild ... | grep -v "ngdbuild: logical net '.*' has no load"

それ以外の場合は2500以上ありますが、それらを排除すると、実際の問題に集中するのに役立ちます。

2番目に悪いツールチェーンスパマーはedif2ngd、明示的に処理されていないVerilogパラメーターについて不平を言っています。これは2行のメッセージ(これらのうち300以上)なので、次のように削除します。

edif2ngd ... | sed '/Unsupported property/{N;d;}'
于 2012-06-20T10:44:59.013 に答える
2

この警告は、誰もそれらのネットを「聞いていない」ことを意味します。

合成で削除される信号があっても問題ありません。警告はエラーではありません! それらに注意する必要があります。

部分的なコードから何が起こっているかを評価することはできません。

  • という名前の信号はありrxCounter_cryますか?
  • のデータ型はClockDivider何ですか?
  • の値はdividerCounterBits?
  • 他のプロセスではどうなりますか?関係がない場合は、そのプロセスなしで合成を実行してみてください。関連する場合、それを見る必要があります。
于 2012-04-22T15:36:25.070 に答える