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"
模块声明
module top_module (
input [31:0] a,
input [31:0] b,
output [31:0] sum
);