Verilog 由于参数的原因,FF/Latch的常量值为0
我正在构建一个UART RX,我想让它的合成时间可配置,无论是否接收到奇偶校验位:Verilog 由于参数的原因,FF/Latch的常量值为0,verilog,xilinx,Verilog,Xilinx,我正在构建一个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,
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_奇偶校验位为零,则FSM中会发生以下情况:
receiveData:
if (current_rx_bit == 8) begin
if (EXPECT_PARITY_BIT == 1)
nextState = receiveParity;
else
nextState = receiveStop;
end
变量奇偶校验位设置如下:
always @(posedge clk) begin
if (rst == 1)
parity_bit <= 1'H0;
else if (receive_parity == 1 && mtimer_done == 1)
parity_bit <= uart_rx;
end
始终@(posedge clk)开始
如果(rst==1)
奇偶校验位因为它是一个非运行时评估,所以您可以使用生成块(假设您的工具集是Verilog-2001恭维)
示例(未测试):
生成
如果(期望奇偶校验位==1)开始:g\U奇偶校验
始终@(posedge clk)开始
如果(rst==1)
我很久以前就放弃了抑制警告。在我的C或C++代码中,我仍然这样做,在HDL中,我发现它是不可能的。当然是Xilinx工具。
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.
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