Verilog 全加器

17 Mar 2025 | 4 分钟阅读

全加器是一个数字组件,它使用逻辑门实现三个数字。它是处理器 ALU 内的主要组件,用于递增地址、表格索引、缓冲指针以及需要加法的其他地方。

一个一位全加器将三个一位二进制数相加,两个输入位,一个进位位,并输出一个和和一个进位位。

全加器通过使用两个半加器并对它们的最终输出进行运算来形成。半加器将两个二进制数相加。全加器是一个组合电路,因此可以在 Verilog 语言中建模。

两个输出进位的逻辑表达式如下所示。A、B 是两位二进制数的输入变量,Cin 是进位输入,Cout 是 Sum 和 Carry 的输出变量。

Verilog Full Adder

真值表

ABCinCout求和
00000
00101
01001
01110
10001
10110
11010
11111

示例

下面显示了一个 4 位加法的示例,它通过信号 a 和 b 接受两个二进制数。

加法器是一个组合电路。因此,Verilog 可以使用带有assign的连续赋值或带有包含所有输入的敏感度列表的always块对其进行建模。

以下代码显示了使用always块,只要其任何输入更改值就会执行。

硬件原理图

Verilog Full Adder

测试平台

首先,添加时间尺度指令。它以反引号`开头,但不以分号结尾。时间尺度指令用于指定进一步模块中使用的时间单位和时间分辨率(一皮秒)。时间分辨率是确定模块中时间单位的精确度的精度因子。

接下来是模块和变量声明。

  • 寄存器 (reg) 类型保存值,直到下一个值由时钟脉冲驱动到它上,并且始终位于initialalways块下。它用于对输入应用激励。
  • 导线 (wire) 用于声明被动变量。它们的值不会改变,也不能在内部分配,始终是一个初始块。

然后是模块实例化。

  • 测试平台将激励应用于被测设备 (DUT)。DUT 必须在测试平台下实例化。端口映射是将测试平台的模块与设计模块链接起来。
  • 现在我们将对输入变量进行初始激励。这是在initial块下完成的。
  • 我们也可以使用 $finish 在预先提到的延迟时间内停止模拟。

不同的东西是使用了两个系统任务

  • $dumpfile用于将 net 和寄存器值的变化转储到 VCD 文件(值变化转储文件)中。
  • $dumpvars用于指定哪些变量应转储到由文件名参数指定的文件名中。
  • 现在,这取决于用户是否要在 TCL 控制台上显示模拟结果。我们使用了$monitor,它会在信号的值发生变化时显示该信号的值。
  • 它在always块内执行,并且敏感度列表与上一节中解释的相同。
  • 格式说明符%t为我们提供了当前的模拟时间,而%d用于以十进制显示变量的值。

当 a 和 b 相加得到一个大于 4 位宽的数字时,和将回滚到零,并且 c_out 变为 1。例如,黄色高亮显示的行相加得到 0x11,并且较低的 4 位被分配给 sum,第 4 位分配给 c_out。


下一主题优先级编码器