首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >由于参数的原因,FF/Latch的常量值为0

由于参数的原因,FF/Latch的常量值为0
EN

Stack Overflow用户
提问于 2019-11-09 20:27:58
回答 1查看 47关注 0票数 0

我正在构建一个UART RX,我想让它在合成时可配置,无论是否接收到奇偶校验位:

代码语言:javascript
复制
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为零,则在有限状态机中会发生以下情况:

代码语言:javascript
复制
receiveData:
    if (current_rx_bit == 8) begin
        if (EXPECT_PARITY_BIT == 1)
            nextState = receiveParity;
        else
            nextState = receiveStop;
    end

变量parity_bit设置如下:

代码语言:javascript
复制
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将为零。这导致了webpack ISE的警告:

代码语言:javascript
复制
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进行编程,以使接收奇偶校验是可选的,并且在合成过程中不会出现警告?

EN

回答 1

Stack Overflow用户

发布于 2019-11-10 01:26:15

因为它是一个非运行时评估,所以您可以使用generate块(假设您的工具集是Verilog-2001 )。

示例(未测试):

代码语言:javascript
复制
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

警告是需要检查的东西,但它们并不总是需要解决。我更喜欢在可能的情况下解决警告,以增加看到真正问题的机会。但在有些情况下,解决这些问题是不值得的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58779278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档