Verilog刷题[hdlbits] :Module add

题目:Module add

You are given a module add16 that performs a 16-bit addition. Instantiate two of them to create a 32-bit adder. One add16 module computes the lower 16 bits of the addition result, while the second add16 module computes the upper 16 bits of the result, after receiving the carry-out from the first adder. Your 32-bit adder does not need to handle carry-in (assume 0) or carry-out (ignored), but the internal modules need to in order to function correctly. (In other words, the add16 module performs 16-bit a + b + cin, while your module performs 32-bit a + b).

  • 您将获得一个执行16位加法的模块add16。实例化其中两个以创建一个32位加法器。一个add16模块计算加法结果的下16位,而第二个add16模块在接收到第一个加法器的执行后计算结果的上16位。您的32位加法器不需要处理低位向本位的进位输入信号(假设为0)或本位向高位的进位输出信号(忽略),但内部模块需要这样做才能正常工作。(换句话说,add16模块执行16位a + b + cin,而您的模块执行32位a + b)。

Connect the modules together as shown in the diagram below. The provided module add16 has the following declaration:

  • 将模块连接在一起,如下图所示。所提供的模块add16有以下声明:
    module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
objectivec 复制代码
module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
    //定义低16位加法器的输入与输出信号
    wire [15:0] add1_a;
    wire [15:0] add1_b;
    wire        cout1; //进位信号
    
   //定义高16位加法器的输入与输出信号
    wire [15:0] add2_a;
    wire [15:0] add2_b;
   	
    //对应进行赋值
    assign add1_a = a[15:0];
    assign add1_b = b[15:0];
    
    assign add2_a = a[31:16];
    assign add2_b = b[31:16];
    
    //低16位
    add16 add16_init_1(
        .a(add1_a),
        .b(add1_b),
        .cin(1'b0),
        .sum(sum[15:0]),
        .cout(cout1)
    );
    
    //高16位 
    add16 add16_init_2(
        .a(add2_a),
        .b(add2_b),
        .cin(cout1),
        .sum(sum[31:16])
    );
    
endmodule

上面的代码定义了 wire型变量使代码更加明了,但也可以使用下面的方法,只需定义一个进位信号即可。

objectivec 复制代码
module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
  
    wire        cout1; //进位信号
    //低16位
    add16 add16_init_1(
        .a(a[15:0]),
        .b(b[15:0]),
        .cin(1'b0),
        .sum(sum[15:0]),
        .cout(cout1)
    );
    
    //高16位 
    add16 add16_init_2(
        .a(a[31:16]),
        .b(b[31:16]),
        .cin(cout1),
        .sum(sum[31:16])
    );
    
endmodule
相关推荐
步达硬件12 小时前
【FPGA】FPGA开发流程
fpga开发
我爱C编程1 天前
【仿真测试】基于FPGA的完整16QAM通信链路实现,含频偏锁定,帧同步,定时点,Viterbi译码,信道,误码统计
fpga开发·16qam·帧同步·卷积编码·viterbi译码·维特比译码·频偏锁定
云雾J视界1 天前
AI芯片设计实战:用Verilog高级综合技术优化神经网络加速器功耗与性能
深度学习·神经网络·verilog·nvidia·ai芯片·卷积加速器
s09071362 天前
ZYNQ DMA to UDP 数据传输系统设计文档
网络协议·fpga开发·udp
燎原星火*2 天前
QSPI IP核 基本参数
fpga开发
XINVRY-FPGA2 天前
XCVU9P-2FLGC2104I Xilinx AMD Virtex UltraScale+ FPGA
嵌入式硬件·机器学习·计算机视觉·fpga开发·硬件工程·dsp开发·fpga
FPGA_小田老师2 天前
FPGA Debug:PCIE一直自动重启(link up一直高低切换)
fpga开发·pcie debug·pcie初始化问题
hexiaoyan8272 天前
视频信号检测板卡:208-Base Camera Link 图像信号模拟器
fpga开发·图像信号模拟器·视频信号检测·视频信号分析·智能图像分析
竹君子2 天前
新能源知识库(151) RTDS和RT-LAB比较
fpga开发
brave and determined2 天前
可编程逻辑器件学习(day34):半导体编年史:从法拉第的意外发现到塑造现代文明的硅基浪潮
人工智能·深度学习·fpga开发·verilog·fpga·设计规范·嵌入式设计