【问题标题】:Verilog decoder when input is 'X'输入为“X”时的 Verilog 解码器
【发布时间】:2020-01-30 20:01:01
【问题描述】:

我正在尝试在 Verilog 中制作 3 到 9 解码器。该模块在模拟中按预期工作,但仅在输入定义良好时。当输入为“X”时,输出也为“X”。这有点道理,但是即使输入是“X”或“Z”,有没有办法为输出分配值?可能是重置之类的东西?以下是解码器的模板,

always @*
begin
case(3_bit_input)
    3'b000 : begin /*assign outputs*/ end

    3'b001 : begin /*assign outputs*/ end

    3'b010 : begin  /*assign outputs*/ end
    .
    .   
    .
    .
    .
    3'b111 : begin  /*assign outputs*/ end
endcase
end

【问题讨论】:

  • 实际上,当输入为“x”时,输出的值不会改变。如果它是“x”,它将是“x”,如果它是其他东西,它将保持这个东西。该案例将充当闩锁。

标签: logic verilog decoder digital


【解决方案1】:

是的,当输入不完全是任何其他标签时,您可以将default: 标签添加到分支。在您没有详尽考虑所有可能值的任何时候拥有它是个好主意。

但是尝试在动态模拟中处理 X 可能是一场失败的战斗。

【讨论】:

  • 我实际上尝试添加一个 default: 标签,但在综合后模拟期间它仍然不起作用。这正常吗?
  • 这是预期的。 X 传播在门级仿真中变得更糟。那是因为只有一个 X 状态。在实际硬件中,您可以对自身执行未知状态的减法和相等操作,以进入已知状态。但是动态模拟不会跟踪 X 的来源以知道它何时收敛。只有正式的静态检查工具才能做到这一点。
  • 您必须记住,'x' 只是一个 unknown 值。在您的情况下,这是不可能的,因为您列出了所有可能的输入组合。 'X' 仅表示其中一种组合。综合将利用它并生成正确的原理图。所以,'default' 子句只是一个 simulation 工件。
猜你喜欢
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-10
相关资源
最近更新 更多