hdlbits系列verilog解答(always块if语句2)-32

文章目录

    • 一、问题描述
    • 二、verilog源码
    • 三、仿真结果


一、问题描述

常见的错误来源:如何避免锁存器
在设计电路时,首先要考虑电路:

  • 我想要这个逻辑门
  • 我想要一个具有这些输入并产生这些输出的组合逻辑
  • 我想要一个组合逻辑,然后是一组触发器

你不能做的是先写代码,然后希望它能生成一个合适的电路。
If (cpu_overheated) then shut_off_computer = 1;
If (~arrived) then keep_driving = ~gas_tank_empty;

语法正确的代码并不一定会产生合理的电路(组合逻辑 + 触发器)。通常的原因是:“在您指定的情况之外会发生什么?Verilog的答案是:保持输出不变。

这种“保持输出不变”的行为意味着需要记住当前状态,从而产生锁存器。组合逻辑(例如,逻辑门)无法记住任何状态。注意 Warning (10240): … inferring latch(es)" 消息。除非锁存器是故意的,否则它几乎总是表明存在错误。组合电路必须在所有条件下为所有输出分配一个值。这通常意味着您始终需要 else 为输出分配子句或默认值。

以下代码包含创建锁存器的错误行为。修复这些错误,以便只有在计算机确实过热时才会关闭计算机,并在到达目的地或需要加油时停止驾驶。

你可能感兴趣的:(verilog语言,fpga开发)