十进制转8421_BCD码

article/2025/10/26 8:42:44

目录

一、BCD码简介

二、十进制转8421BCD码转换思路

三、程序编写

四、仿真验证

总结



一、BCD码简介

       BCD码(Binary-Coded Decimal‎),用4位二进制数来表示1位十进制数中的0~9这10个数码,是一种二进制的数字编码形式,常应用于计算机内部十进制与二进制之间的转换。

      BCD码可分为有权码无权码两类。其中,常见的有权BCD码有8421码、2421码、5421码;无权BCD码有余3码、余3循环码、格雷码。8421码,顾名思义,自高到低,每个位上的权值分别是8,4,2,1,例如十进制9用8421BCD码表示为1001;2421码和5421码与8421码类似,只是每个位上的权重不同,例如十进制9用2421BCD码表示为1111,十进制9用5421BCD码表示为1100;余3码是在8421码的基础上加3,例如十进制9用余3码表示为1100;余3循环码每个编码中0、1没有确定的权值,相邻码字之间只有一位不同,避免过度码产生的噪声。

     下图给出了常用的BCD码

二、十进制转8421BCD码转换思路

       以十进制数234为例:

       第一步:8'd234对应的二进制8'b1110_1010,由于十进制数234共有三位,每位转换为8421BCD码后对应4个比特位,因此在8'b1110_1010的前边加上3*4=12个0,构成20'b0000_0000_0000_1110_1010

      第二步:将20'b0000_0000_0000_1110_1010向左进行移位,每移一位后,分别判断BCD码最高位、次高位、最低位共三组码字对应的十进制码是否大于4,如果该组码字大于4,则在改组对应十进制码的基础上加3,如果该码字小于等于4,则继续进行下一次移位

     第三步:向左移位8次后,结束移位,此时前12位就是该十进制对应的8421BCD码

三、程序编写

        下图给出该模块的示意图:

 

  输入信号:时钟信号                              sys_clk

                   复位信号                              sys_res

                   输入十进制数                      data

  输出信号:个位                                     unit

                   十位                                     ten

                   百位                                     hun

                   千位                                     tho

                   万位                                     t_tho

                   十万位                                 h_tho

     输入信号是20位的二进制数,对应十进制共6位,所以在20位二进制数的前边补上6*4=24个0,构成44位的二进制数,向左移位20次,即可得出对应的8421BCD码

  下边给出该模块的时序图:

   下边给出Verilog代码:

module bcd_8421(input                sys_clk,input	         sys_res,input          [19:0]data,output    reg  [3:0 ]unit,output    reg  [3:0 ]ten,output    reg  [3:0 ]hun,output    reg  [3:0 ]tho,output    reg  [3:0 ]t_tho,output    reg  [3:0 ]h_tho
);
reg  [4 : 0]cnt_shift;
reg  [43: 0]data_shift;
reg         shift_flag;always@(posedge sys_clk or negedge sys_res)if(!sys_res)shift_flag <= 1'b0;elseshift_flag <= ~shift_flag;
always@(posedge sys_clk or negedge sys_res)if(!sys_res)cnt_shift <= 5'd0;else if(cnt_shift == 5'd21&&shift_flag == 1'b1)cnt_shift <= 5'd0;else if(shift_flag == 1'b1)cnt_shift <= cnt_shift + 1'b1;always@(posedge sys_clk or negedge sys_res)if(!sys_res)data_shift <= 44'd0;else if(cnt_shift == 5'd0)data_shift <= {24'b0,data};else if(cnt_shift != 5'd0 && cnt_shift < 5'd21 && shift_flag == 1'b1)data_shift <= data_shift << 1;else if(cnt_shift != 5'd0 && cnt_shift < 5'd21 && shift_flag == 1'b0)begindata_shift[43:40] <= data_shift[43:40]>4 ? data_shift[43:40]+ 3: data_shift[43:40];data_shift[39:36] <= data_shift[39:36]>4 ? data_shift[39:36]+ 3: data_shift[39:36];data_shift[35:32] <= data_shift[35:32]>4 ? data_shift[35:32]+ 3: data_shift[35:32];data_shift[31:28] <= data_shift[31:28]>4 ? data_shift[31:28]+ 3: data_shift[31:28];data_shift[27:24] <= data_shift[27:24]>4 ? data_shift[27:24]+ 3: data_shift[27:24];data_shift[23:20] <= data_shift[23:20]>4 ? data_shift[23:20]+ 3: data_shift[23:20];end else if(cnt_shift == 5'd21)data_shift <= data_shift;	always@(posedge sys_clk or negedge sys_res)if(!sys_res)beginunit   <=    4'd0;ten    <=    4'd0;hun    <=    4'd0;tho    <=    4'd0;t_tho  <=    4'd0;h_tho  <=    4'd0;end else if(cnt_shift == 5'd21)beginunit   <=   data_shift[23:20];ten    <=   data_shift[27:24];hun    <=   data_shift[31:28];tho    <=   data_shift[35:32];t_tho  <=   data_shift[39:36];h_tho  <=   data_shift[43:40];end 	
endmodule

四、仿真验证

   下边给出测试文件的代码:

`timescale 1ns/1ns
module tb_bcd_8421();
reg         clk    ;
reg         res    ;
reg   [19:0]data   ;
wire   [3:0]unit   ;  
wire   [3:0]ten    ; 
wire   [3:0]hun    ; 
wire   [3:0]tho    ; 
wire   [3:0]t_tho  ; 
wire   [3:0]h_tho  ;initial beginclk <= 1'b0;res <= 1'b0;#200 res <= 1'b1;
end 
always	#10 clk <= ~clk;
//assign data =  20'd987654;
initial  begindata <= 20'd987_654;#1000 data <= 20'd456_123;#2000 data <= 20'd1237_89;#500  data <= 20'd147_852;end 
//两次数据间隔时间需大于840nsbcd_8421 u_bcd_8421(.sys_clk (clk)    ,.sys_res (res)    ,.data    (data)    ,.unit    ( unit )    ,.ten     ( ten  )    ,.hun     ( hun  )    ,.tho     ( tho  )    ,.t_tho   ( t_tho)    ,.h_tho   ( h_tho)
);endmodule 

下图是Modelsim中仿真的结果:

      每次转换所需的时间至少需要840ns,上图中输入的十进制数20‘d123789与20‘d147852间隔时间小于840ns,因此,20'd123789没有完成转换。


总结

    初次创作,难免文章中存在错误,希望读者能够及时纠正并给予私信,望大家共同进步!


http://chatgpt.dhexx.cn/article/IxJHCMZb.shtml

相关文章

十进制数转换BCD码

有必要仔细阐述这一节&#xff0c;目前就是用在数码管显示&#xff0c;在单片机使用时&#xff0c;我们通常是将十进制数字进行/和%运算&#xff0c;得到每个位置的十进制数字&#xff0c;在这里可能是为了节省使用存储器的量&#xff0c;运用的是加三移位法具体其实就是将每个…

C语言:十进制、BCD码互换

目录 1、复杂版 2、简易版 最近写单片机 RTC 日期、时间配置&#xff0c;需要实现十进制、BCD码互换&#xff0c;将示例Demo分享给各位朋友&#xff1a; BCD是指用二进制来表示十进制数的编码&#xff0c;即&#xff1a;用4位二进制来表示一位十进制数&#xff0c;因此4位二进…

BCD码转化为十进制数

2019独角兽企业重金招聘Python工程师标准>>> 什么是BCD码&#xff1a;用4位二进制数来标识十进制数中的0-9这十个数的编码形式&#xff0c;简称为BCD码。BCD码优点&#xff1a;这种编码形式使二进制和十进制之间的转换能够快捷进行。采用BCD码&#xff0c;既可保存数…

BCD码以及各进制之间的相互转换

目录 前言 一、BCD码 二、进制互转 1、任意进制转十进制&#xff1a;系数X基数 ^ 权值&#xff08;累加&#xff09; 2、任意进制转二进制 前言 主要学习什么是BCD码&#xff0c;以及二进制、八进制、十进制、十六进制之间的相互转换 一、BCD码 BCD码就是以四位二进制数为一…

BCD码与十进制数间转换

一、前言&#xff1a; 这几天在项目协议对接的时候有一部分功能是获取系统时间功能与校时功能。小马哥获取到时间后打印了一下 2020-5-26 20:06:32&#xff0c;一看时间是对的&#xff0c;然后美滋滋的组装协议发送平台测试了。测试的时候发现月、日、时分秒数据都正常&#x…

黑马Python笔记3

输入时&#xff0c;占位符在引号里面&#xff0c;而要接受的变量在引号外面eg:"…%d"%player) expected an indented block&#xff1a;缩进错误。if对缩进有要求&#xff0c;python对缩进要求严格 if表判断 双等号一定要记住&#xff01;&#xff01;&#xff01; i…

2021-03-30 黑马Python学习笔记

操作系统OS&#xff08;Operation System&#xff09; 操作系统作用 1、直接操作硬件 2、把操作硬件的代码封装成系统调用&#xff0c;供其他成员间接操作硬件 没有安装操作系统的计算机被称为裸机 如果想在裸机上运行程序&#xff0c;必须用机器语言书写程序 如果计算机上…

黑马python在线培训

过去的2017年这一年&#xff0c;Python 开发者在全球快速增长&#xff0c;国内小伙伴学习 Python 的热情一路高涨。同时&#xff0c;Python 成为大量开发者推荐的入门编程语言和第二编程语言。2017年12月&#xff0c;Python 在 TIOBE 全球编程语言年度排行榜上升至第四&#xf…

黑马python培训安排

在分享资源之前&#xff0c;大家可以先想清楚未来的职业发展方向。毕竟只有找到未来职业发展方向&#xff0c;才更清楚当下重点学习的内容。 根据上图我们基本上一目了然&#xff0c;找到自己未来要发展的方向。在找到之后可以在各个招聘app上了解一下相关岗位的技能要求是什么…

[学习笔记]黑马程序员python教程

文章目录 思维导图Python基础知识图谱面向对象SQL入门和实战Python高阶技巧 第一阶段第九章&#xff1a;Python异常、模块与包1.9.1异常的捕获1.9.1.1 为什么要捕获异常1.9.1.2 捕获常规的异常1.9.1.3 捕获指定的异常1.9.1.4 捕获多个异常1.9.1.5 捕获全部异常1.9.1.6 异常的el…

黑马python6.0培训视频

关于对Python有一些了解的同学&#xff0c;肯定都会说Python语法简洁适合新手&#xff0c;便于阅读等这些方面。实际上是这样的&#xff0c;很多国内计算机专业都是C语言作为第一门学习的语言&#xff0c;很多国外的却是Python入门。因为Python可以让你在短时间内找到成就感&am…

黑马 Python 数据结构与算法第一章

背景知识 1.数组是一种线性表结构&#xff0c;其用一块连续的内存空间&#xff0c;来存储一组具有相同类型的数据&#xff1b; 2.时间复杂度&#xff0c;也叫做渐进时间复杂度&#xff0c;通常用大O公式书写&#xff0c;表示代码的执行时间随数据规模增长的变化趋势&#xff0c…

黑马程序员 python 数据分析 代码_2020年最新版 5.0程序员 黑马python人工智能数据分析机器学习软件测试全栈开发...

阶段一: 5.0课程资料 收起 第一章: 1-Python基础语法v5.0 第二章: 2-面向对象编程v5.0 第三章: 3-linux命令v5.0 第四章: 4-多任务编程v5.0 第五章: 5-web服务器v5.0 第六章: 6-web前端开发基础v5.0 第七章: 7-MySQL数据库v5.0 第八章: 8-mini-web框架v5.0 第九章: 9-django框架…

黑马python培训视频网盘下载

前几天看到朋友老周发了个朋友圈&#xff0c;我心态立马炸了&#xff1a; 好家伙&#xff01;竟然有钱入手五位数的最新款手机&#xff0c;这也太酸了吧&#xff01; 可他不是整天哭穷么&#xff0c;哪来这么多钱&#xff1f;我的内心充满了疑惑。 趁着昨天他来我家&#xff0c…

上海黑马python培训

过去的2017年这一年&#xff0c;Python 开发者在全球快速增长&#xff0c;国内小伙伴学习 Python 的热情一路高涨。同时&#xff0c;Python 成为大量开发者推荐的入门编程语言和第二编程语言。2017年12月&#xff0c;Python 在 TIOBE 全球编程语言年度排行榜上升至第四&#xf…

黑马Python笔记4

命名的时候宜严格按照要求&#xff0c;不易出现空格宜使用_ 调用函数时&#xff0c;创建新项目的时候选择新窗口&#xff0c;否则出错。 定义函数的格式 def 函数名&#xff08;&#xff09;&#xff1a;函数的命名字母数字下划线 … 调用函数:函数名&#xff08;&#xff09; …

python黑马学习

python的自述 能做什么 1.抢火车票 2.数据分析 3.开发网站 4.开发游戏 发展定位 web全栈开发方向 掌握技术 前端开发 数据库管理 后台框架 职业方向 web全栈开发工程师 数据科学方向 人工智能方向&#xff0c;机器学习 人工智能方向&#xff0c;深度学习 等等…

黑马程序员最新Python教程——第一阶段(1)

黑马程序员最新Python教程——第一阶段&#xff08;1&#xff09; Python导学 第一阶段——第一章01-初识Python02-什么是编程语言03-Python环境安装04-Python环境安装&#xff08;macOS&#xff09;05-Python环境安装&#xff08;Linux&#xff09;06-第一个Python程序-Hello …

黑马 python课程笔记1——值类型、数据类型、字符串

目录 字面量 常用的值类型 字符串 注释 变量 数据类型 数据类型转换 标识符 运算符 字符串的拓展 字符串的三种定义 字符串的拼接 字符串格式化 格式化的精度控制 表达式格式化 字面量 字面量&#xff1a;在代码中&#xff0c;被写下来的固定的值&#xff0c;称之为字面量。 常…

2022黑马Python学习笔记

一、导学 Pthon语言基础入门 Pthon语言高阶加强大数据分析PySpark 二、 初识Python 你好Python程序 print("Hello World!!")>>Hello World!!&#xff01;输入的双引号和括号为英文字符 三、 Python基础语法 &#xff08;一&#xff09; 字面量 1. 定义&a…