跳到主要内容

1.3.7 加法器2

在这个练习中,您将创建一个具有两层层次结构的电路。您将实例化两个(已提供)模块,每个模块都将实例化16个(您需要编写的)模块。因此,您需要编写两个模块:top_module 和 add1。top_module 调用 add16 模块,而每个 add16 模块内部则调用 add1 模块。

类似于之前的 module_add 练习,您会获得一个执行16位加法的模块 add16。您需要实例化两个这样的模块来创建一个32位加法器。其中一个模块计算加法结果的低16位,而第二个模块计算结果的高16位。您的32位加法器不需要处理进位输入(假设为0)或进位输出(忽略)。

按照下图所示连接这些模块。所提供的 add16 模块具有以下声明:

module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );

在每个 add16 模块内部,实例化了16个全加器(add1模块,未提供)来实际执行加法操作。您需要编写一个全加器模块,其声明如下:

module add1 ( input a, input b, input cin, output sum, output cout );

回顾一下,全加器计算的是 a+b+cin 的和与进位输出。

总结一下,此设计中共有三个模块:

  • top_module —— 您的顶级模块,包含两个...
  • add16(已提供)—— 一个16位加法器模块,由16个...
  • add1 —— 一个1位全加器模块组成。

如果您提交的代码缺少 add1 模块,将会收到一个错误消息,提示 “实体 add1 未定义”。错误信息示例为:

module add1Error (12006): Node instance "user_fadd[0].a1" instantiates undefined entity "add1"

alt text

模块声明

module top_module (
input [31:0] a,
input [31:0] b,
output [31:0] sum
);

做题区