当前位置:首页 >> 信息与通信 >>

二进制转BCD


【CPLD/FPGA】求把“二进制数”转换成“BCD 码”的方法(verilog 和 VHDL 均 可)
悬赏分:110|解决时间:2010-7-8 21:22|提问者:dontshutup 用于数码管显示 网上的英文教程有8位 我看不太懂 而且我的数字比8位长些是11位 所以不能直接用现成的~郁闷~ 希望有一个中文的不论多长二进制码都通用的方法 问题补充: 我是在编程

,用程序进行转换,不是用我自己转换,哎~~ 基本思路是把二进制按4位一组分开,把每一组对应的二进制数转换成 bcd 码表,最后把所有 位进行 bcd 码相加,第一个4位的码表也可以省略,第二个4位对于关系是 4'h0: 10'h000; 4'h1: 10'h016; 4'h2: 10'h032; 4'h3: 10'h048; 4'h4: 10'h064; 4'h5: 10'h080; 4'h6: 10'h096; 4'h7: 10'h112; 4'h8: 10'h128; 4'h9: 10'h144; 4'ha: 10'h160; 4'hb: 10'h176; 4'hc: 10'h192; 4'hd: 10'h208; 4'he: 10'h224; 4'hf: 10'h240; 第3组对于你来说只有3位 4'h0: 14'h0000; 4'h1: 14'h0256; 4'h2: 14'h0512; 4'h3: 14'h0768; 4'h4: 14'h1024; 4'h5: 14'h1280; 4'h6: 14'h1536; 4'h7: 14'h1792;

把11位二进制查表得出的3个数进行 bcd 码相加 这里把每个结果按同级单个 bcd 码相加,也就是>9对结果加6,>19对结果加12,>29对结果加 18类推,当然高一级的 bcd 码要加上低一级的进位,也就是高出4位的部分,最后把结果拼接 给你一个16位有符号的例子 module bcd(clk, hex, dec); input clk; input [16:0] hex; output [19:0] dec; wire [15:0] rrhex; reg [3:0] rhex[3:0]; reg [17:0] rhexd; reg [13:0] rhexc; reg [9:0] rhexb; reg [3:0] rhexa; reg [5:0] resa,resb,resc,resd; reg [3:0] rese; assign rrhex = hex[16] ? ~hex[15:0]+1'b1 : hex[15:0]; assign dec = {rese,resd[3:0],resc[3:0],resb[3:0],resa[3:0]}; always@(posedge clk) begin rhex[3] <= rrhex[15:12]; rhex[2] <= rrhex[11:8]; rhex[1] <= rrhex[7:4]; rhex[0] <= rrhex[3:0]; end always@(posedge clk) begin case(rhex[3]) 4'h0: rhexd <= 18'h00000; 4'h1: rhexd <= 18'h04096; 4'h2: rhexd <= 18'h08192; 4'h3: rhexd <= 18'h12288; 4'h4: rhexd <= 18'h16384; //第二级寄存器,千 //第一级寄存器 //去符号

4'h5: rhexd <= 18'h20480; 4'h6: rhexd <= 18'h24576; 4'h7: rhexd <= 18'h28672; default: rhexd <= 10'h00000; endcase end always@(posedge clk) begin case(rhex[2]) 4'h0: rhexc <= 14'h0000; 4'h1: rhexc <= 14'h0256; 4'h2: rhexc <= 14'h0512; 4'h3: rhexc <= 14'h0768; 4'h4: rhexc <= 14'h1024; 4'h5: rhexc <= 14'h1280; 4'h6: rhexc <= 14'h1536; 4'h7: rhexc <= 14'h1792; 4'h8: rhexc <= 14'h2048; 4'h9: rhexc <= 14'h2304; 4'ha: rhexc <= 14'h2560; 4'hb: rhexc <= 14'h2816; 4'hc: rhexc <= 14'h3072; 4'hd: rhexc <= 14'h3328; 4'he: rhexc <= 14'h3584; 4'hf: rhexc <= 14'h3840; default: rhexc <= 14'h0000; endcase end always@(posedge clk) begin case(rhex[1]) 4'h0: rhexb <= 10'h000; 4'h1: rhexb <= 10'h016; 4'h2: rhexb <= 10'h032; 4'h3: rhexb <= 10'h048; 4'h4: rhexb <= 10'h064; 4'h5: rhexb <= 10'h080; 4'h6: rhexb <= 10'h096; 4'h7: rhexb <= 10'h112; 4'h8: rhexb <= 10'h128;

4'h9: rhexb <= 10'h144; 4'ha: rhexb <= 10'h160; 4'hb: rhexb <= 10'h176; 4'hc: rhexb <= 10'h192; 4'hd: rhexb <= 10'h208; 4'he: rhexb <= 10'h224; 4'hf: rhexb <= 10'h240; default: rhexb <= 10'h000; endcase end always@(posedge clk) begin rhexa <= rhex[0]; end always@(posedge clk) begin resa = addbcd4(rhexa[3:0],rhexb[3:0],rhexc[3:0], resb = addbcd4(resa[5:4], rhexb[7:4],rhexc[7:4], resd = addbcd4(resc[5:4], 4'h0, rese = resd[5:4] + rhexd[17:16]; end function [5:0] addbcd4; input [3:0] add1,add2,add3,add4; begin addbcd4 = add1 + add2 + add3 + add4; if(addbcd4 > 6'h1d) //>29 最低有一个可能出现0xf,但由二进制转换而 来的数在这里不会出现大于40的情况 addbcd4 = addbcd4 + 5'h12; else if(addbcd4 > 5'h13) addbcd4 = addbcd4 + 4'hc; else if(addbcd4 > 4'h9) addbcd4 = addbcd4 + 4'h6; end endfunction endmodule //>9 //>19 rhexd[3:0]); rhexd[7:4]);

resc = addbcd4(resb[5:4], rhexb[9:8],rhexc[11:8], rhexd[11:8]); rhexc[13:12],rhexd[15:12]);


相关文章:
BCD码怎么转换成标准二进制形式
BCD码怎么转换成标准二进制形式_IT认证_资格考试/认证_教育专区。BCD 码怎么转换成标准二进制形式?二进制编码的十进制数,简称 BCD 码(Binarycoded Decimal). 这种...
二进制转BCD码
16 位二进制转 BCD 码华侨大学$龙之魂 二进制 转换成十进制 BCD 码(加 3 移位法底下还附带了 BCD 码转二进制码转化的 VHDL 程序 算法 "二进制数调整 BCD...
二进制转BCD码
二进制转BCD码_信息与通信_工程科技_专业资料。本文提供了一种二进制转BCD码的新方法,在VHDL语言中有应用,为结果的显示提供可能library...
二进制 转换成十进制 BCD码(加3移位法)
二进制 转换成十进制 BCD 码(加 3 移位法) (2010-07-05 15:53) 分类: 算法 “原来的二进制数十几位,则左移时就要左移几位” "二进制数调整 BCD 码...
二进制转BCD的Verilog实现程序
二进制转BCD的Verilog实现程序_计算机硬件及网络_IT/计算机_专业资料。二进制转BCD的Verilog实现程序二进制转 BCD 的 Verilog 实现 BCD:Binary Coded Decimal 即用 ...
二进制数到BCD码的转换
二进制数到BCD码的转换_材料科学_工程科技_专业资料。实验报告得分 课程编号 1801770001 教师签名 批改日期 深 圳 大 学 实 验 报 告 课程名称: 微机原理及应用...
实验二二进制转换为BCD码
实验二二进制转换BCD码_计算机软件及应用_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档 实验二二进制转换BCD码_计算机软件及应用_IT/计算机_专业...
16位二进制数转换成BCD码
16 位二进制转换成 BCD 码的的快速算法-51 单片机 2010-02-18 00:43 在做而论道上篇博 文中,回答了一个 16 位二进制转换成 BCD 码的问题,给出了一...
二进制转换成BCD码 实验报告
二、实验要求:将 AX 中的一个二进制数(对应的十进制数范围是 0-65535),转换成压缩性 BCD 码表示的十进制,并从屏幕输出转换结果。要求用减法实现,并比较与...
FPGA八位二进制转十进制BCD码
FPGA八位二进制转进制BCD码_IT/计算机_专业资料 暂无评价|0人阅读|0次下载|举报文档FPGA八位二进制转进制BCD码_IT/计算机_专业资料。用查表法 ...
更多相关标签:
二进制转bcd verilog | 二进制转bcd码 | 二进制转换bcd码 | 二进制转bcd码算法 | 二进制转bcd 电路 | 二进制转bcd vhdl | 二进制转bcd溢出 | 二进制转bcd原理 |