【FPGA】Verilog:BCD 加法器的实现


0x00 XOR 运算在 2 的补码加减法中的应用

2 的补码加减法的特点是,当从某个数中减去负数时,将其转换为正数的加法来计算,并将减去正数的情况转换为负数的加法来计算,从而将所有减法运算转换为加法运算。在这种情况下,两个数的加法运算中产生进位的情况是在加法位的所有位都为 1 时。

换句话说,可以使用 AND 门来检测产生进位的情况。在两个数的加法运算中,进位传播的情况是在加法位的两个位中只有一个被设置为 1 时。这是因为从较低位传递上来的进位位会再次传递到下一个位,因此可以使用 XOR 门来检测进位传播的情况。

  • carry-generate funciton:\color{}g_i=x_iy_i
  • carry-propagate function:\color{}p_i=x_i\oplus y_i

0x01 BCD 运算

在 BCD 中,使用4位值作为操作数,但由于只表示 0 到 9 的数字,因此只使用 0000 到 1001 的二进制数,而不使用 1010 到 1111 的二进制数(don't care)。

因此,不能使用常规的 2'complement 运算来计算,需要额外的处理:如果 4 位二进制数的运算结果在 1010 到 1111 的范围内,需要将 6 (即 0110),添加到运算结果中。

BCD 运算例子

0x02 BCD 加法器的实现

关于 BCD 加法器的结果和模拟过程进行说明(Verilog源代码,输出示例,详细描述过程)。

💬 Design source:

module BCD2(input Cin,input a1,input a2,input a3,input a4,input b1,input b2,input b3,input b4,output sum1,output sum2,output sum3,output sum4,output cout);
wire s1,s2,s3,s4;
wire c1,c2,c3,c4;
wire C1,C2,C3,C4;assign s1 = (a1^b1)^Cin;
assign c1 = (Cin && (a1^b1)) || (a1 && b1);assign s2 = (a2^b2)^c1;
assign c2 = (c1 && (a2^b2)) || (a2 && b2);assign s3 = (a3^b3)^c2;
assign c3 = (c2 && (a3^b3)) || (a3 && b3);assign s4 = (a4^b4)^c3;
assign c4 = (c3 && (a4^b4)) || (a4 && b4);///
assign cout = (c4 || (s3 && s4) || (s2 && s4));assign sum1 = s1;
assign C1 = (0 && (s1^0)) || (s1 && 0);assign sum2 = (s2^cout)^C1;
assign C2 = (C1 && (s2^cout)) || (s2 && cout);assign sum3 = (s3^cout)^C2;
assign C3 = (C2 && (s3^cout)) || (s3 && cout);assign sum4 = (s4^0)^C3;
assign C4 = (C3 && (s4^0)) || (s4 && 0);endmodule

💬 Testbench:

`timescale 1ns / 1psmodule BCD2_tb;
reg Cin,a1,a2,a3,a4,b1,b2,b3,b4;
wire sum1,sum2,sum3,sum4,cout;BCD2 u_BCD2 (.Cin(Cin ),.a1(a1 ),.a2(a2 ),.a3(a3 ),.a4(a4 ),.b1(b1 ),.b2(b2 ),.b3(b3 ),.b4(b4 ),.sum1(sum1 ),.sum2(sum2 ),.sum3(sum3 ),.sum4(sum4 ),.cout(cout )
);initial beginCin = 1'b0;a1 = 1'b0;a2 = 1'b0;a3 = 1'b0;a4 = 1'b0;b1 = 1'b0;b2 = 1'b0;b3 = 1'b0;b4 = 1'b0;
endalways@(Cin or a1 or a2 or a3 or a4 or b1 or b2 or b3 or b4) beginCin <=#10 ~Cin;a1 <= #20 ~a1;a2 <= #40 ~a2;a3 <= #80 ~a3;a4 <= #160 ~a4;b1 <= #320 ~b1;b2 <= #640 ~b2;b3 <= #1280 ~b3;b4 <= #2560 ~b4;
endinitial begin#5120$finish;
endendmodule

🚩 运行结果如下:

📜 Schematic:

实现的 BCD 加法器是一种将 4 位加法器运算结果转换为 BCD 表示的设备。如果运算结果是一个大于 9 的数字,我们只需加上 6 (0110)。为了实现这一点,该装置由两个加法器电路组成:一个用于执行 4 位加法器运算,另一个电路用于在第一个运算结果大于 9 时加上 0110(补偿电路)。

0x03 补充:Single-level 16 bit 超前进位加法器

四个 4 位超前进位加法器可以合并成一个 16 位超前进位加法器。它是四个并行结构的串行连接,是并行和串行结构的混合体。

0x04 补充:2-level 16-bit 超前进位加法器

2 级 16 位超前进位加法器是一种通过使用双 CLA 发生器,比单级 16 位超前进位加法器更能减少通过栅极所需的延迟的结构。

2-level 16-bit Carry Look-ahead Adder

📌 [ 笔者 ]   최역우(韩)
📃 [ 更新 ]   2022.9.20
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

Introduction to Logic and Computer Design, Alan Marcovitz, McGrawHill, 2008

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/207262.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringAMQP 快速入门

SpringAMQP 快速入门 1. 创建项目2. 快速入门2.2.1 消息发送2.2.2 消息接收 3. 交换机3.1 Fanout Exchange&#xff08;扇出交换机&#xff09;3.1.1 创建队列与交换机3.1.2 消息接收3.1.3 消息发送 3.2 Direct Exchange&#xff08;直连交换机&#xff09;3.2.1 创建交换机与队…

Validate 验证规则详解

前言: 以前小编发过一篇Validate 验证规则 如何使用的&#xff0c;没有去将Validate 验证规则的原理应用场景&#xff0c;这篇文章来完善一下。 不知道如何使用的朋友可以点击下面传送门 传送门 讲解: Validate 验证规则通常指的是在 Web 开发中&#xff0c;使用验证器&…

【开源】基于Vue.js的智慧社区业务综合平台

文末获取源码&#xff0c;项目编号&#xff1a; S 077 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S077。} 文末获取源码&#xff0c;项目编号&#xff1a;S077。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 业务类型模块2.2 基础业务模块2.3 预…

精选Axure原型设计模板,RP原型组件库(PC端移动端元件库及Axure函数及运算符说明)

好的原型组件会大大的提高产品经理的工作效率&#xff0c;现精选了一批Axure 8的原型设计模板&#xff0c;包含了原型设计的常用元素和AxureRP 8函数及运算符的说明文档&#xff0c;及各种设备模板框架。 分享给大家可以共同学习&#xff0c;文末可下载完整原型组件包~&#x…

苹果手机ios系统安装了一个免签应用书签webclip描述文件该如何卸载?

随着移动应用的普及&#xff0c;越来越多的用户开始关注到苹果免签的应用。相比于需要通过 App Store 审核和签名的应用&#xff0c;免签应用无需经过苹果的审核过程&#xff0c;可以直接安装和使用。那么&#xff0c;苹果免签应用是如何制作的呢&#xff1f;本文将介绍制作苹果…

SQL进阶 | CASE表达式

本文所有案例基于《SQL进阶教程》实现。 概述 SQL中的CASE表达式是一种通用的条件表达式&#xff0c;类似于其他语言中的if/else语句。它用于在SQL语句中实现条件逻辑。CASE表达式以WHEN子句开始&#xff0c;后面跟着一个或多个WHEN条件&#xff0c;每个WHEN条件后面跟着一个TH…

C++相关闲碎记录(3)

1、reference wrapper 例如声明如下的模板&#xff1a; template <typename T> void foo(T val); 如果调用使用&#xff1a; int x; foo(std::ref(x)); T变成int&&#xff0c;而使用调用 int x; foo(std::cref(x)); T变成const int&。 这个特性被C标准库用…

fijkplayer flutter 直播流播放

fijkplayer flutter 直播流播放 fijkplayer 是 ijkplayer 的 Flutter 封装&#xff0c; 是一款支持 android 和 iOS 的 Flutter 媒体播放器插件&#xff0c; 由 ijkplayer 底层驱动。 通过纹理&#xff08;Texture&#xff09;接入播放器视频渲染到 Flutter 中。 前言 目前使用…

PostgreSQL 技术内幕(十二) CloudberryDB 并行化查询之路

随着数据驱动的应用日益增多&#xff0c;数据查询和分析的量级和时效性要求也在不断提升&#xff0c;对数据库的查询性能提出了更高的要求。为了满足这一需求&#xff0c;数据库引擎不断经历创新&#xff0c;其中并行执行引擎是性能提升的重要手段之一&#xff0c;逐渐成为数据…

One-to-Few Label Assignment for End-to-End Dense Detection阅读笔记

One-to-Few Label Assignment for End-to-End Dense Detection阅读笔记 Abstract 一对一&#xff08;o2o&#xff09;标签分配对基于变换器的端到端检测起着关键作用&#xff0c;最近已经被引入到全卷积检测器中&#xff0c;用于端到端密集检测。然而&#xff0c;o2o可能因为…

elasticsearch 内网下如何以离线的方式上传任意的huggingFace上的NLP模型(国内避坑指南)

es自2020年的8.x版本以来&#xff0c;就提供了机器学习的能力。我们可以使用es官方提供的工具eland&#xff0c;将hugging face上的NLP模型&#xff0c;上传到es集群中。利用es的机器学习模块&#xff0c;来运维部署管理模型。配合es的管道处理&#xff0c;来更加便捷的处理数据…

吴恩达《机器学习》12-1:优化目标

在机器学习的旅程中&#xff0c;我们已经接触了多种学习算法。在监督学习中&#xff0c;选择使用算法 A 还是算法 B 的重要性逐渐减弱&#xff0c;而更关键的是如何在应用这些算法时优化目标。这包括设计特征、选择正则化参数等因素&#xff0c;这些在不同水平的实践者之间可能…

UG NX二次开发(C#)-求曲线在某一点处的法矢和切矢

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中创建一个曲线3、直接放代码4、测试案例1、前言 最近确实有点忙了,好久没更新博客了。今天恰好有时间,就更新下,还请家人们见谅。 今天我们讲一下如何获取一条曲线上某一条曲…

注意力机制的快速学习

注意力机制的快速学习 注意力机制 将焦点聚焦在比较重要的事物上 我&#xff08;查询对象Q&#xff09;&#xff0c;这张图&#xff08;被查询对象V&#xff09; 我看一张图&#xff0c;第一眼&#xff0c;就会判断那些东西对我而言比较重要&#xff0c;那些对于我不重要&…

Pytorch从零开始实战12

Pytorch从零开始实战——DenseNet算法实战 本系列来源于365天深度学习训练营 原作者K同学 文章目录 Pytorch从零开始实战——DenseNet算法实战环境准备数据集模型选择开始训练可视化总结 环境准备 本文基于Jupyter notebook&#xff0c;使用Python3.8&#xff0c;Pytorch2.…

DevEco Studio 运行项目有时会自动出现.js和.map文件

运行的时候报错了&#xff0c;发现多了.js和.map&#xff0c;而且还不是一个&#xff0c;很多个。 通过查询&#xff0c;好像是之前已知问题了&#xff0c;给的建议是手动删除(一个一个删)&#xff0c;而且有的评论还说&#xff0c;一周出现了3次&#xff0c;太可怕了。 搜的过…

【网络编程】-- 02 端口、通信协议

网络编程 3 端口 端口表示计算机上的一个程序的进程 不同的进程有不同的端口号&#xff01;用来区分不同的软件进程 被规定总共0~65535 TCP,UDP&#xff1a;65535 * 2 在同一协议下&#xff0c;端口号不可以冲突占用 端口分类&#xff1a; 公有端口&#xff1a;0~1023 HT…

亚信安慧AntDB数据库中级培训ACP上线,中国移动总部首批客户认证通过

近日&#xff0c;亚信安慧AntDB数据库ACP&#xff08;AntDB Certified Professional&#xff09;中级培训课程于官网上线。在中国移动总部客户运维团队、现场项目部伙伴和AntDB数据库成员的协同组织下&#xff0c;首批中级认证学员顺利完成相关课程的培训&#xff0c;并获得Ant…

自然语言处理22-基于本地知识库的快速问答系统,利用大模型的中文训练集为知识库

大家好,我是微学AI,今天给大家介绍一下自然语言处理22-基于本地知识库的快速问答系统,利用大模型的中文训练集为知识库。我们的快速问答系统是基于本地知识库和大模型的最新技术,它利用了经过训练的中文大模型,该模型使用了包括alpaca_gpt4_data的开源数据集。 一、本地…