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;

我可以合成它并且UART工作,但为什么我收到警告?

恕我直言,rxCounter 应该使用每个可能的值,但是为什么每一秒都会产生警告“没有负载”

我在某处读到这意味着这些网络没有被使用并且将被移除。
但是要从 0 数到 2^n-1,我需要不少于 n 位。

4

3 回答 3

2

这个警告意味着没有人在“听”这些网络。

可以在合成中去除信号。警告不是错误!你只需要了解它们。

我们无法从您的部分代码中评估正在发生的事情。

  • 是否有一个名为 的信号rxCounter_cry
  • 的数据类型是ClockDivider什么?
  • 的价值是dividerCounterBits多少?
  • 在另一个过程中会发生什么?如果不相关,请尝试在没有该过程的情况下运行您的综合。如果它相关的,我们需要看到它。
于 2012-04-22T15:36:25.070 回答
2

Latticengdbuild对于它正在做的工作特别垃圾邮件,我通过我的 makefile 中的 grep 管道 ngdbuild 输出以准确删除这些消息:

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

否则,其中有 2500 多个,消除它们有助于专注于实际问题。

第二个最糟糕的工具链垃圾邮件发送者edif2ngd抱怨它没有明确处理的 Verilog 参数。这是一条两行消息(其中超过 300 条),因此我将其删除:

edif2ngd ... | sed '/Unsupported property/{N;d;}'
于 2012-06-20T10:44:59.013 回答
1

请注意,有时它会使用加法器来实现。最高位不会使用该加法器的进位输出,最低位不会使用符号输入。因此,您会收到如下警告:

警告 - 综合:逻辑网络 'clock_chain/dcmachine/count_171_add_4_1/S0' 没有负载 警告 - 综合:逻辑网络 'clock_chain/dcmachine/count_171_add_4_19/CO' 没有负载

没问题,第 19 位是最高的,所以它不会在任何地方进位,而第 1 位是最低的,所以它不会从任何地方得到符号位。但是,如果您在最高和最低之间的任何位上收到此警告,这通常意味着有问题,但不是错误,因此它会在您测试时构建“有效”的东西,但不会出错案子。如果您使用错误情况对其进行模拟,通常会显示出不希望的结果。

于 2017-01-06T19:51:29.390 回答