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

二进制转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]);


相关文章:
16位二进制数转换成BCD码
16 位二进制转换BCD 码的的快速算法-51 单片机 2010-02-18 00:43 在做而论道上篇博 文中,回答了一个 16 位二进制转换BCD 码的问题,给出了一...
二进制到BCD转换单片机实验报告_图文
实验1 组员: 学号:一、实验目的 二进制BCD 转换 学习星研 Star16L 仿真器系统的基本操作, 熟悉 EL-Ⅱ型通用接口板实验电路, 掌握简单的数值转换算法。 二...
双字节二进制转换为BCD
两个字节的二进制转换BCD 码的程序如下: ;功能:16位二进制数变换成为 BCD 码; ;入口:R0 R1 中是 16 位二进制数,其中 R0中是高 8 位; ;出口:R2...
单片机实验报告_二进制到BCD转换_图文
单片机实验报告成员: 学号: 实验时间: 实验 1 二进制BCD 转换一、实验目的学习星研 Star16L 仿真器系统的基本操作, 熟悉 EL-Ⅱ型通用接口板实验电路, 掌握...
二进制码转换为十进制(BCD)码
方式下的值为 把上式写出套乘的形式: 式中的每项乘 2,相当于将寄存器中的二进制码左移 1 位,这就意味着利用移位寄存器可以完成二进 制与 8421BCD转换...
微机原理实验-二进制到BCD转换
实验目的 二进制BCD 转换 二、实验原理(实验相关基础知识、理论) 三、实验过程原始记录(程序界面、代码、设计调试过程描述等) 四、实验结果及总结 一、实验...
利用verilog将二进制码转换为十进制BCD码
利用verilog 将二进制转换为十进制 BCD 码下面我自己加了注释小序: 先说一个 bear 的亲身体会, bear 在做一些 fpga 小设计时经常会用到数据显示功能, 比如...
16位二进制转BCD码
16 位二进制转 BCD 码华侨大学$龙之魂 二进制 转换成十进制 BCD 码(加 3 移位法) 算法 "二进制数调整 BCD 码的方法是将二进制码左移 8 次,每次移位后...
汇编程序设计—二进制码转换为BCD码
汇编程序设计—二进制转换BCD码_管理学_高等教育_教育专区。汇编程序设计之二进制转换BCD二进制转换BCD 码一、实验目的 1、掌握数码转换基本方法,...
二进制码转BCD码源程序
二进制转BCD码源程序_电子/电路_工程科技_专业资料 暂无评价|0人阅读|0次下载|举报文档 二进制转BCD码源程序_电子/电路_工程科技_专业资料。二进制码转 ...
更多相关标签: