FF / Latch имеет постоянное значение 0 из-за параметра - PullRequest
0 голосов
/ 09 ноября 2019

Я собираю UART RX и хочу сделать его настраиваемым во время синтеза, либо не получен бит четности:

module uart_rx # (
    parameter EXPECT_PARITY_BIT = 0,
    parameter CLK_PER_BAUD = 434,
    parameter CLK_PER_BAUD_WIDTH = 9
) (
    input clk,
    input rst,
    input uart_rx,
    output reg data_ready,
    output reg parity_bit = 1'H0,
    output [7:0] data
);

Если EXPECT_PARITY_BIT равен нулю, в FSM происходит следующее:

receiveData:
    if (current_rx_bit == 8) begin
        if (EXPECT_PARITY_BIT == 1)
            nextState = receiveParity;
        else
            nextState = receiveStop;
    end

Переменная parity_bit установлена ​​следующим образом:

always @(posedge clk) begin
    if (rst == 1)
        parity_bit <= 1'H0;
    else if (receive_parity == 1 && mtimer_done == 1)
        parity_bit <= uart_rx;
end

Receive_parity только в состоянии receiveParity, что означает, что parity_bit будет нулевым, если не используется. Это приводит к предупреждению от веб-пакета ISE:

Xst:1293 - FF/Latch <parity_bit> has a constant value of 0 in block <uart_rx>. This FF/Latch will be trimmed during the optimization process.

И я хочу исправить это предупреждение. Как мне запрограммировать мой UART RX так, чтобы паритет получения был необязательным, и во время синтеза не появлялось никаких предупреждений?

1 Ответ

0 голосов
/ 09 ноября 2019

Поскольку это оценка не во время выполнения, вы можете использовать блок генерации (при условии, что ваш набор инструментов соответствует требованиям Verilog-2001).

Пример (не проверен):

generate
  if (EXPECT_PARITY_BIT == 1) begin : g_parity
    always @(posedge clk) begin
      if (rst == 1)
        parity_bit <= 1'H0;
      else if (receive_parity == 1 && mtimer_done == 1)
        parity_bit <= uart_rx;
    end
  end
  else begin : g_no_parity
    initial parity_bit = 1'b0;
  end
endgenerate

Предупреждения - это то, что нужно пересмотреть, но их не всегда нужно разрешать. Я предпочитаю разрешать предупреждения, когда это возможно, чтобы увеличить шансы увидеть реальные проблемы. Но есть случаи, когда это не стоит усилий, чтобы решить.

...