十进制数转换BCD码
有必要仔细阐述这一节,目前就是用在数码管显示,在单片机使用时,我们通常是将十进制数字进行/和%运算,得到每个位置的十进制数字,在这里可能是为了节省使用存储器的量,运用的是加三移位法具体其实就是将每个数字不顾位置,各自转换为二进制形式
例如:
255 变成 0010 _0101_0101 的过程
移位的次数一定是该数字的二进制位数,加三不确定(加三也是要判断每4位的二进制大于4才加三,所以是每次移位以后都要判断)
module bcd_8421(input wire sys_clk,input wire sys_rst,input wire [19:0] data,output reg [3:0] ge,output reg [3:0] shi,output reg [3:0] bai,output reg [3:0] qian,output reg [3:0] wan,output reg [3:0] shi_wan);reg [4:0] cnt_shift; //移位判断计数器
reg [43:0] data_shift; //移位判断数据寄存器
reg shift_flag; //移位判断标志信号always @(posedge sys_clk or negedge sys_rst) //0到21的循环计数(移位加三的方式实现的话,首位各加一个,999_999十进制换算到二进制有20位)if(!sys_rst )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;else cnt_shift <= cnt_shift;always @(posedge sys_clk or negedge sys_rst) //移位判断标志信号,控制移位判断的先后顺序if(!sys_rst )shift_flag <= 1'b0;else shift_flag <= ~shift_flag;always @(posedge sys_clk or negedge sys_rst) //data_shift有44位,其中高24位是999_999形成的BCD码需要24位,低20位是999_999的二进制形式是20位if(!sys_rst )data_shift <=44'b0;else if (cnt_shift == 5'd0)data_shift <= {24'b0, data }; else if ((cnt_shift <= 5'd20)&&(shift_flag==1'b0)) //cnt_shift=0时,还是上次的,因为六位数最大变成二进制有20位,所以考虑有20次判断和移位操作,21次稳定,将它输出,begindata_shift[23:20] <= (data_shift[23:20]>4) ? (data_shift[23:20]+2'd3) : (data_shift[23:20]);data_shift[27:24] <= (data_shift[27:24]>4) ? (data_shift[27:24]+2'd3) : (data_shift[27:24]);data_shift[31:28] <= (data_shift[31:28]>4) ? (data_shift[31:28]+2'd3) : (data_shift[31:28]);data_shift[35:32] <= (data_shift[35:32]>4) ? (data_shift[35:32]+2'd3) : (data_shift[35:32]);data_shift[39:36] <= (data_shift[39:36]>4) ? (data_shift[39:36]+2'd3) : (data_shift[39:36]);data_shift[43:40] <= (data_shift[43:40]>4) ? (data_shift[43:40]+2'd3) : (data_shift[43:40]);end else if ((cnt_shift <= 5'd20)&&(shift_flag==1'b1))data_shift <= data_shift << 1;else data_shift <= data_shift;
always @(posedge sys_clk or negedge sys_rst) //当计数器等于20时,对各位置的赋值(BCD)if(!sys_rst )begin ge <= 4'b0;shi <= 4'b0;bai <= 4'b0;qian <= 4'b0;wan <= 4'b0;shi_wan <= 4'b0;endelse if (cnt_shift == 5'd21)beginge <= data_shift[23:20];shi <= data_shift[27:24];bai <= data_shift[31:28];qian <= data_shift[35:32];wan <= data_shift[39:36];shi_wan <= data_shift[43:40];end elsebeginge <= ge ;shi <= shi ;bai <= bai ;qian <= qian ;wan <= wan ;shi_wan <= shi_wan ;end endmodule
module vtf;// Inputsreg sys_clk;reg sys_rst;reg [19:0] data;// Outputswire [3:0] ge;wire [3:0] shi;wire [3:0] bai;wire [3:0] qian;wire [3:0] wan;wire [3:0] shi_wan;// Instantiate the Unit Under Test (UUT)bcd_8421 uut (.sys_clk(sys_clk), .sys_rst(sys_rst), .data(data), .ge(ge), .shi(shi), .bai(bai), .qian(qian), .wan(wan), .shi_wan(shi_wan));initial begin// Initialize Inputssys_clk = 0;sys_rst = 0;data = 0;// Wait 100 ns for global reset to finish#100;sys_rst <= 1'b1;data <= 20'd0;#100000;data <= 20'd123_456;#100000;data <= 20'd999_999;#100000;data <= 20'd123_895;#100000;data <= 20'd456_789;#100000;data <= 20'd999_999;#100000;data <= 20'd456_789;// Add stimulus hereendalways # 10 sys_clk = ~sys_clk;endmodule
十进制数转换BCD码相关推荐
- Python实现十进制整数与BCD码转换
Python实现十进制整数与BCD码转换 BCD码 8421BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8.4.2.1,故称为有权BCD码.和四位自然二进制码不同的是,它 ...
- 汇编语言(二)之将十进制数的ASCⅡ码转换为BCD码
题目要求 从键盘输入五位十进制数的ASCⅡ码,存放于3500h其实的内存单元中,将其转换为BCD码后,再按位分别存入350Ah起始的内存单元内.若输入的不是十进制ASCⅡ码,则对应存放结果的单元内容为 ...
- 十进制数的原码 c语言,C语言程序设计第1章节(zmy).ppt
C语言程序设计第1章节(zmy).ppt 张茂元 副教授, 硕士生导师, 博士后 华中科技大学计算机学院 2007年2月;C语言程序设计-第1章 概论;1.1 学习C语言程序设计的第一个例子 ;例1. ...
- 三菱plc两个16转换32位_三菱FX2NPLC如何将十进制数转换成十六进制-专业自动化论坛-中国工控网论坛...
发表于:2010-08-20 12:42:43 18楼 7.1.4 十进制数转换成二.十六进制数 1 方法一 口诀:除N取余,逆序排列. [例3]K 200=B? 200÷2 = 100•••0 LS ...
- java实现十进制数转换成二进制数
十进制数转换成二进制 import java.util.Scanner; public class Textwile { public static void main(String[] args) ...
- c++第二周任务一*(1‐1)编写递归函数将十进制数转换成二进制数输出。
/任务一 /*(1‐1)编写递归函数将十进制数转换成二进制数输出. * 算法说明: */ #include <iostream> using namespace std; void d2b ...
- 2018阿里巴巴基础平台研发工程师实习生笔试题:一.十进制数转换成的二进制数中有几个1. 二.输出IP所在的网段
1.输入一个十进制数转换成二进制数,输出二进制中有几个1? import java.util.Scanner;public class Main {public static void main(St ...
- python--预测未来子女的身高、计算能量的消耗、为自己的手机充值、将指定的十进制数转换成二进制、八进制、十六进制
将指定的十进制数转换成二进制.八进制.十六进制 def fun():num=int(input('请输入一个十进制的整数:'))print(num,'的二进制数为:',bin(num)) #内置函数- ...
- 将十进制数转换成二进制数(C语言)
C语言--将十进制数转换成二进制数 方法:除 2 取余,逆序排列 原理:用 2 整除十进制整数,可以得到一个商和余数:再用 2 去除商,又会得到一个商和余数,如此进行,直到商为小于 1 时为止,然后把 ...
- OJ刷题记录:将十进制数转换成八进制数 题目编号:545
将十进制数转换成八进制数 题目编号:545 题目要求: 将三个十进制数分别转换成八进制数,建议使用栈来实现. 输入描述 输入三个十进制数,每个占一行. 输出描述 输出每个十进制数所对应的八进制数,每个 ...
最新文章
- 转: 视频相关的协议族介绍(rtsp, hls, rtmp)
- java语言提供结构_java学习之语句结构
- 《MyBatis技术原理与实战》之SqlSession的用途
- qt程序部署在linux,Qt应用打包发布,部署真正的Qt程序LinuxWindows-Go语言中文社区...
- Java局域网对战游戏、天气预报项目
- R语言自然语言处理:情感分析
- Android 友盟分享简单Demo
- python抓取北京所有社区医院经纬度
- cmake:cmake_minimum_required命令
- poscms统计数据调用
- Windows命令行打开常用设置/控制面板功能
- ITRON入门学习之实时操作系统的意义与价值
- 集体照的拍摄及后期合成
- sql server中datename函数的使用
- html5复选框控制按钮状态,HTML input checkbox复选按钮简介说明
- 工控机的日常维护方法及步骤
- 通过位运算来进行2的幂运算
- 自回避随机行走问题 c语言,醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)...
- 【Java 8 新特性】Java Clock tick() 设置时间最小跳动间隔
- Spring Boot 集成Quartz