HDLBits(1)——Modules:Hierarchy(下)

简介: 目录HDLBits——Modules:Hierarchy问题19 Module将信息连接到端口By positionBy name问题20 Connecting ports by position(Module pos)问题21 Connecting ports by name(Module name)问题22 Three modules(Module shift)问题23 Modules and vectors(Module shift8)问题24 Adder 1(Module add)问题25 Adder 2(Module fadd)问题26 Carry-selec

问题26 Carry-select adder (Module cseladd)

问题25 实现的加法器叫做行波进位加法器(RCA: Ripple-Carry Adder),缺点是计算进位输出的延迟是相当慢的(最坏的情况下,来自于进位输入),前一级加法器计算完成之前,后一级加法器不能开始计算,使得加法器的计算延迟变大。


在本练习中,为您提供与前一练习相同的模块 add16,它将两个 16 位数字与进位相加,并产生一个进位和 16 位和。您必须使用您自己的 162 对 1 多路复用器来实例化其中的三个以构建进位选择加法器。

如下图所示将模块连接在一起。提供的模块 add16 具有以下声明:

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

module top_module(
    input [31:0] a,
    input [31:0] b,
    output [31:0] sum
);
    wire [15:0] sum1;
    wire [15:0] sum2;
    wire [15:0] sum3;
    wire        cout;
    assign sum = cout ? {sum3, sum1} : {sum2, sum1};
    add16 add161(
        .a    (a[15:0]  ),
        .b    (b[15:0]  ),
        .sum  (sum1   ),
        .cin  (1'b0   ),
        .cout (cout   )
    );
    add16 add162(
        .a    (a[31:16] ),
        .b    (b[31:16] ),
        .sum  (sum2   ),
        .cin  (1'b0   ),
        .cout (     )
    );
    add16 add163(
        .a    (a[31:16] ),
        .b    (b[31:16] ),
        .sum  (sum3   ),
        .cin  (1'b1   ),
        .cout (     )
    );
endmodule


问题27 Adder–subtractor (Module addsub)

减法器可以由加法器来构建,对其中一个数取相反数(逐位取反加1)即可。最终结果是一个可以执行两种操作的电路:(a + b + 0) 和 (a + ~b + 1)。如果您想更详细地了解该电路的工作原理,请参阅 Wikipedia。


为您提供了一个 16 位加法器模块,您需要对其进行两次实例化:module add16 (

input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
1

当 sub 为 1 时,使用 32 位的异或门对 b 进行取反(这也可以被视为 b[31:0] 与 sub 复制 32 次相异或),同时 sub 信号连接到加法器的进位。

module top_module(
    input [31:0] a,
    input [31:0] b,
    input sub,
    output [31:0] sum
);
    wire cout;
    wire [31:0] b_com;
    assign b_com = {32{sub}}^ b;  
    add16 add161(
        .a    (a[15:0]    ),
        .b    (b_com[15:0]  ),
        .cin  (sub      ),
        .cout (cout     ),
        .sum  (sum[15:0]    )
    );
    add16 add162(
        .a    (a[31:16]   ),
        .b    (b_com[31:16] ),
        .cin  (cout     ),
        .cout (       ),
        .sum  (sum[31:16]   )
    );
endmodule


结语

注意巩固练习

相关文章
|
3月前
|
人工智能 语音技术
ModuleNotFoundError: AutomaticSpeechRecognitionPipeline: No module named ‘funasr‘
这篇文章描述了在运行阿里语音AI模型的语音识别时遇到的`ModuleNotFoundError: No module named ‘funasr’`错误,并提供了通过`pip install funasr --upgrade -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html`命令重新安装funasr模块的解决方法。
ModuleNotFoundError: AutomaticSpeechRecognitionPipeline: No module named ‘funasr‘
|
4月前
|
计算机视觉 Python
【Python】已解决:ModuleNotFoundError: No module named ‘cv2’
【Python】已解决:ModuleNotFoundError: No module named ‘cv2’
475 0
|
6月前
|
JavaScript 前端开发
CMD和UMD,ES Module的差别
CMD和UMD,ES Module的差别
|
5月前
|
机器学习/深度学习 数据可视化 Python
No module named 'pytorch_wavelets'问题如何解决
【6月更文挑战第21天】No module named 'pytorch_wavelets'问题如何解决
300 0
codeforces 344B - Simple Molecules
题意就是给出3个原子的化学价,然后组成一个分子,要保证这个分子是稳定的,如果你还记得高中化学知识的话这个很容易理解,然后让你求出1-2 2-3 1-3 号原子之间有几条键, 这里我分别用ta tb tc 表示, 用数学的方法表示出来的话就是a = tc + tb; b = ta+tc; c = ta + tb;可能有多种情况,只要输出一种即可。
41 0
|
JavaScript 前端开发
每天3分钟,重学ES6-ES12(十八)ES Module(一)
每天3分钟,重学ES6-ES12(十八)ES Module
83 0
|
JavaScript 前端开发
每天3分钟,重学ES6-ES12(十八)ES Module(二)
每天3分钟,重学ES6-ES12(十八)ES Module
80 0
|
TensorFlow 算法框架/工具 Python
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
|
决策智能
运筹优化25:ModuleNotFoundError: No module named ‘docplex‘
运筹优化25:ModuleNotFoundError: No module named ‘docplex‘
运筹优化25:ModuleNotFoundError: No module named ‘docplex‘
|
机器学习/深度学习 算法 安全
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本
1174 0
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本