verilog HDLBits刷题“Module fadd”--模块 fadd---加法器2

📅 2026/7/17 13:46:37
verilog HDLBits刷题“Module fadd”--模块 fadd---加法器2
一、题目在本练习中您将创建一个具有两个层次级别的电路。您将实例化 provided 的两个副本每个副本将实例化 您必须写入 的 16 个副本。因此您必须编写两个模块 和 .top_moduleadd16add1top_moduleadd1喜欢module_add您将获得一个执行 16 位加法的模块。您必须实例化其中两个才能创建一个 32 位加法器。一个模块计算加法结果的低 16 位而第二个模块计算结果的高 16 位。您的 32 位加法器不需要处理 carry-in 假设为 0 或 carry-out ignored。add16add16add16如下图所示将模块连接在一起。提供的模块具有以下声明add16add16module add16 ( input[15:0]a, input[15:0]b, inputcin, output[15:0]sum, outputcout);在每个 中实例化 16 个完全加法器 module not provided 以实际执行加法。您必须编写具有以下声明的完整 adder 模块add16add1module add1 ( input a, input b, input cin, output sum, output cout );回想一下全加器计算 abcin 的和和并结出。总之此设计中有三个模块top_module— 您的顶级模块其中包含两个...add16提供 — 一个 16 位加法器模块由 16 个...add1— 一个 1 位全加法器模块。如果您的提交缺少 您将收到一条错误消息显示 .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 );二、分析在顶层例化子模块应该是只需要例化与顶层模块直接相连的子模块add16实例化两个16位全加器实现不带进位输出的32位加法器。在模块add1中实现的是一位的全加器。三、代码实现module top_module ( input [31:0] a, input [31:0] b, output [31:0] sum );// wire c_mid; add16 inst1(.a(a[15:0]),.b(b[15:0]),.cin(1b0),.cout(c_mid),.sum(sum[15:0])); add16 inst2(.a(a[31:16]),.b(b[31:16]),.cin(c_mid),.cout(),.sum(sum[31:16])); endmodule module add1 ( input a, input b, input cin, output sum, output cout ); assign {cout,sum}abcin; endmodule 或者 module top_module ( input [31:0] a, input [31:0] b, output [31:0] sum );// wire cout1; add16 instance1(a[15:0],b[15:0],1b0,sum[15:0],cout1); add16 instance2(a[31:16],b[31:16],cout1,sum[31:16],); endmodule module add1 ( input a, input b, input cin, output sum, output cout ); assign sumabcin; assign cout(ab)|(acin)|(cinb); endmodule四、时序