我正在构建一个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为零,则在有限状态机中会发生以下情况:
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;
endReceive_parity只有在receiveParity状态下才是高的,这意味着如果不使用,parity_bit将为零。这导致了webpack 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进行编程,以使接收奇偶校验是可选的,并且在合成过程中不会出现警告?
发布于 2019-11-10 01:26:15
因为它是一个非运行时评估,所以您可以使用generate块(假设您的工具集是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警告是需要检查的东西,但它们并不总是需要解决。我更喜欢在可能的情况下解决警告,以增加看到真正问题的机会。但在有些情况下,解决这些问题是不值得的。
https://stackoverflow.com/questions/58779278
复制相似问题