二进制码转换为十进制(BCD)码.docxVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
二进制码转换为十进制(BCD)码

二进制码转换为十进制(BCD)码转换原理对于一个8位二进制码bn-1bn-2……b1b0,,其在十进制编码方式下的值为??????????????????????把上式写出套乘的形式:?????????????? ???????? 式中的每项乘2,相当于将寄存器中的二进制码左移1位,这就意味着利用移位寄存器可以完成二进制与8421BCD的转换。[2]????? 在移位的过程中,当现态Sn5时,次态不变。当现态Sn=5、6、7时,左移一次,其次态Sn+1将会超过9,对于一个BCD码来说,这样的状态属于禁用状态。而当Sn=8、9时,左移1位,则会向高1位的BCD码输入一个进位的信号?,由于二进制和BCD码权不一致,当发生进位时,虽然码元只是左移1位,但次态Sn+1将减少6。基于上面这两种情况,在B/BCD转换时需要对转换结果加以校正。校正过程如下:当Sn=5时,我们让Sn先加上3,然后再左移1位,次态?Sn+1=2(Sn+3)=2Sn+6,正好补偿由于进位而减少的数值,并且向后一个变换单元送入一个进位信号,这个方法叫“加3移位法”。??????注意:现态和次态都是指BCD码,即用4位二进制表示的1位BCD码。我们对Sn=8、9时举个例子:BCD码的1000(8)乘以2为0001_0110(16),但是左移后变为0001_0000,减少了6。所以需要加上6,这里的方法是加3左移一位,相当于加上6。转换方法????? 首先,先了解二进制与BCD码的位数对应关系,比如一个8位二进制码,可以表示的最大十进制数为255,转换成BCD码为?0010_0101_0101,共需12位,其中每4位组成一个BCD单元,有三个BCD单元,分别表示百位(hundreds)、十位(tens)和个位(units)。n位二进制码转换成D位BCD码的n~D对应关系表见表1。表1??n~D对应关系?????? 以8位二进制转换为3位BCD码为例,转换步骤是:将待转换的二进制码从最高位开始左移BCD的寄存器(从高位到低位排列),每移一次,检查每一位BCD码是否大于4,是则加上3,否则不变。左移8次后,即完成了转换。需要注意的是第八次移位后不需要检查是否大于5。注意:为什么检查每一个BCD码是否大于4,因为如果大于?4(比如?5、6),下一步左移就要溢出了,所以加?3,等于左移后的加?6,起到十进制调节的作用。表2给出了一个二进制换成8421BCD码的时序。表2??B/BCD时序Verilog?代码/*功能:????8位二进制转3位BCD码输入参数:输入时钟clk,输入二进制数据dat输出参数:个位units,十位tens,百位hundreds备注:二进制转BCD码的实现方法很多,本例采用的是“加3移位法”本例实现的是8位二进制转3位BCD码的例子,例如输入2’255),输出0010_0101_0101(BCD)*/module?BIN_to_BCD(clk,dat,units,tens,hundreds);input? clk;input[7:0] dat; //二进制输入数据output[3:0] units;output[3:0] tens;output[3:0] hundreds;reg[3:0]? units_r,tens_r,hundreds_r;//BCD数据输出寄存器reg[7:0] dat_r;reg[11:0] temp; //中间寄存器integer?i;assign?units?=? units_r;assign?tens?=? tens_r;assign?hundreds?=?hundreds_r;always?@(posedge?clk)begindat_r?=?dat;temp?=?0;for(i?=?0;i??7;i?=?i?+?1) //循环7次,注意不是8次,因为第八次不需要修正begintemp?=?{temp[10:0],dat_r[7]}; //左移一位if(temp[3:0]??4d4) //大于4,加三temp[3:0]?=?temp[3:0]+4d3;if(temp[7:4]??4d4) //大于4,加三temp[7:4]?=?temp[7:4]+4d3;if(temp[11:8]??4d4) //大于4,加三temp[11:8]?=?temp[11:8]+4d3;dat_r=dat_r1;? //最高变为原来dat_r的第六位{hundreds_r,tens_r,units_r}={temp[10:0],dat[0]};//最后一次(第8次)不用修正endendendmodule波形仿真报告说明图1? ?输入二进制1111_1111(255)的波形仿真报告分析综合报告说明图2??

文档评论(0)

185****7617 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档