基于Verilog的经典数字电路设计(1)加法器

引言加法器是非常重要的,它不仅是其它复杂算术运算的基础,也是 cpu 中 alu 的核心部件(全加器)。两个二进制数之间的算术逻辑运算例如加减乘除,在数字计算机中都是化为若干步加法操作进行的,因此,学好数字电路,从学好加法器开始。
加法器分为半加器和全加器。全加器和半加器相比也就多了那么一个相加的进位输入,全加器就是三位相加,半加器就是二位相加。例如,我们在做加法运算的时候,总是需要进行低位进位的判断,从而再进行下一位的计算,这就是全加器的由来。详细的也可以参考百度百科。
一、半加器的 verilog 代码实现和 rtl 电路实现module half_adder( input wire a, // 加数 input wire b, // 加数 output reg sum, // 和 output reg cout // 进位输出 );// 行为描述 always @(a or b) begin sum = a ^ b; // 实践证明,这里 <= 和 = 的结果都一样;都是纯粹的组合逻辑; cout = a & b; end// 数据流描述// assign sum = a ^ b;// assign cout = a & b;// 门级描述// and(cout,a,b);// xor(sum,a,b);endmodule基于多种方式描述的一个全加器电路的 rtl 电路图如下所示:
半加器的 rtl 电路实现
二、全加器的 verilog 代码实现和 rtl 电路实现module full_adder( input wire a, // 加数 input wire b, // 加数 input wire cin,// 进位输入 output reg sum, // 和 output reg cout // 进位输出 );// 行为描述 always @(a or b or cin) begin {cout,sum} <= a + b + cin; end// 行为描述// always @(a or b or cin) begin// sum = a ^ b ^ cin; // 实践证明,这里 <= 和 = 的结果都一样;都是纯粹的组合逻辑;// cout = a & b | b & cin | a & cin;// end// 数据流描述// assign {cout,sum} = a + b + cin;endmodule这里,“{}” 符号表示的是 “拼接位”,即先计算 a 与 b 的值,当 a 与 b 为 “0” 和 “1” 时,它们之和为 1,那么就是{01},对应 cout 和 sum ;当 a 与 b 为 “1” 和 “1” 时,它们之和为 2,那么就是转换为二进制就是{10},同样对应 cout 和 sum 等等。
基于多种方式描述的一个全加器电路的 rtl 电路图如下所示:
全加器的 rtl 电路实现

福特测试交流方法助力自动驾驶汽车与行人进行交流
能“吃掉”信号的手机壳,你还在用吗?
Pasternack宣布推出完备的5G方案产品组合
阐述了储能电池功率和容量设计的通用方法
2台三菱PLC FX5u能否实现无线数据交互
基于Verilog的经典数字电路设计(1)加法器
MM32G0140 I2C驱动EEPROM
瑞芯微超低功耗WiFi RKi6000智能产品亮相MWC
新形势下的网络终端安全挑战,为终端安全一体化打造“新基建”
邬贺铨:5G使社会进入数据作为生产要素的时代
哪种是更好的电视技术
CDN和边缘计算之间存在着什么联系
科通技术正式成为Power Integrations中国区代理商
吴亦凡倾情代言华为荣耀8 Lite青春版:颜值大赞!2月21日和荣耀V9一起发布
PCB高速信号布线的要点
大数据技术原理与应用
运算放大器在稳压电源应用中的分析及研究
PCB的工艺流程详细讲解
金山文档结合龙芯3C5000/3D5000系列服务器满足文档处理场景需求
噪声对理想的PID控制器又有什么影响呢?