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

例如:

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码相关推荐

  1. Python实现十进制整数与BCD码转换

    Python实现十进制整数与BCD码转换 BCD码 8421BCD码是最基本和最常用的BCD码,它和四位自然二进制码相似,各位的权值为8.4.2.1,故称为有权BCD码.和四位自然二进制码不同的是,它 ...

  2. 汇编语言(二)之将十进制数的ASCⅡ码转换为BCD码

    题目要求 从键盘输入五位十进制数的ASCⅡ码,存放于3500h其实的内存单元中,将其转换为BCD码后,再按位分别存入350Ah起始的内存单元内.若输入的不是十进制ASCⅡ码,则对应存放结果的单元内容为 ...

  3. 十进制数的原码 c语言,C语言程序设计第1章节(zmy).ppt

    C语言程序设计第1章节(zmy).ppt 张茂元 副教授, 硕士生导师, 博士后 华中科技大学计算机学院 2007年2月;C语言程序设计-第1章 概论;1.1 学习C语言程序设计的第一个例子 ;例1. ...

  4. 三菱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 ...

  5. java实现十进制数转换成二进制数

    十进制数转换成二进制 import java.util.Scanner; public class Textwile { public static void main(String[] args) ...

  6. c++第二周任务一*(1‐1)编写递归函数将十进制数转换成二进制数输出。

    /任务一 /*(1‐1)编写递归函数将十进制数转换成二进制数输出. * 算法说明: */ #include <iostream> using namespace std; void d2b ...

  7. 2018阿里巴巴基础平台研发工程师实习生笔试题:一.十进制数转换成的二进制数中有几个1. 二.输出IP所在的网段

    1.输入一个十进制数转换成二进制数,输出二进制中有几个1? import java.util.Scanner;public class Main {public static void main(St ...

  8. python--预测未来子女的身高、计算能量的消耗、为自己的手机充值、将指定的十进制数转换成二进制、八进制、十六进制

    将指定的十进制数转换成二进制.八进制.十六进制 def fun():num=int(input('请输入一个十进制的整数:'))print(num,'的二进制数为:',bin(num)) #内置函数- ...

  9. 将十进制数转换成二进制数(C语言)

    C语言--将十进制数转换成二进制数 方法:除 2 取余,逆序排列 原理:用 2 整除十进制整数,可以得到一个商和余数:再用 2 去除商,又会得到一个商和余数,如此进行,直到商为小于 1 时为止,然后把 ...

  10. OJ刷题记录:将十进制数转换成八进制数 题目编号:545

    将十进制数转换成八进制数 题目编号:545 题目要求: 将三个十进制数分别转换成八进制数,建议使用栈来实现. 输入描述 输入三个十进制数,每个占一行. 输出描述 输出每个十进制数所对应的八进制数,每个 ...

最新文章

  1. 转: 视频相关的协议族介绍(rtsp, hls, rtmp)
  2. java语言提供结构_java学习之语句结构
  3. 《MyBatis技术原理与实战》之SqlSession的用途
  4. qt程序部署在linux,Qt应用打包发布,部署真正的Qt程序LinuxWindows-Go语言中文社区...
  5. Java局域网对战游戏、天气预报项目
  6. R语言自然语言处理:情感分析
  7. Android 友盟分享简单Demo
  8. python抓取北京所有社区医院经纬度
  9. cmake:cmake_minimum_required命令
  10. poscms统计数据调用
  11. Windows命令行打开常用设置/控制面板功能
  12. ITRON入门学习之实时操作系统的意义与价值
  13. 集体照的拍摄及后期合成
  14. sql server中datename函数的使用
  15. html5复选框控制按钮状态,HTML input checkbox复选按钮简介说明
  16. 工控机的日常维护方法及步骤
  17. 通过位运算来进行2的幂运算
  18. 自回避随机行走问题 c语言,醉汉随机行走/随机漫步问题(Random Walk Randomized Algorithm Python)...
  19. 【Java 8 新特性】Java Clock tick() 设置时间最小跳动间隔
  20. Spring Boot 集成Quartz

热门文章

  1. ColorUI从0开始搭建项目
  2. 数据结构-顺序栈的基本操作(C语言实现)
  3. 产品经理应该懂得的一点技术
  4. 日本著名数学游戏专家中村义作教授提出这样一个问题:将2520个桔子分给六个儿子
  5. 多元函数的微分学思维导图_多元函数微分学思维导图_多元函数微分学j_多元函数微分学思维导图...
  6. 如何Python写一个安卓APP
  7. AWVS 10.5 配置选项
  8. Eclipse中离线安装ADT插件详细教程
  9. pads 2007的概述
  10. hpbios刷新工具_刷新:不会破产的工具