利用verilog将二进制码转换为十进制BCD码

利用verilog将二进制码转换为十进制BCD码

ID:39083612

大小:817.01 KB

页数:4页

时间:2019-06-24

利用verilog将二进制码转换为十进制BCD码_第1页
利用verilog将二进制码转换为十进制BCD码_第2页
利用verilog将二进制码转换为十进制BCD码_第3页
利用verilog将二进制码转换为十进制BCD码_第4页
资源描述:

《利用verilog将二进制码转换为十进制BCD码》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、利用verilog将二进制码转换为十进制BCD码下面我自己加了注释 小序:    先说一个bear的亲身体会,bear在做一些fpga小设计时经常会用到数据显示功能,比如数字时钟,数字频率计,温度计,跑表等等,往往我们会选用 led数码管来做显示, 因为它驱动起来比lcd液晶要简单的很多,我们知道fpga中寄存器在定义和储存的数据都是采用二进制的格式,而fpga输出给数码管做显示的数据必须是十进制的格式,之前bear经常会选择把一个寄存器的个位和十位分开定义,比如在做数字时钟时,就会把时,分,秒的各位和十位都分别定

2、义成一个变量 ,无疑这种方法会增加代码的复杂度,所以考虑需要一个专门把二进制的数据转换成十进制BCD码的模块,在网上有一些,但是好像都不太完整,所以bear花了一下午写了一个,亲测效果不错,希望对朋友们有所帮助下面开始正文。首先给出二进制码转换为十进制BCD码的几个步骤(以8bit二进制码为例):        1.将二进制码左移一位(或者乘2)        2.找到左移后的码所对应的个,十,百位。        3.判断在个位,十位和百位的码是否大于(?等于)5,如果是则该段码加3。        4.继续重复

3、以上三步直到移位8次后停止。下面是一个例子,将1111_1111转换为BCD码,如果8bit数据最终移位得到18bit数据,那么个位,十位,百位分别对应12~9,16~13,18~17位。之前写的代码在转换完之后没有对count清零,所以在仿真时候需要用rst_n清零,感谢博友onlytime417的提示,经过修改之后可以对不同的输入值连续转换,而不需要rst_n的复位,下面是修改后的代码以及仿真结果,(该转换模块已经在实际项目中应用)。  CODE:          modulebin_dec(clk,bin,

4、rst_n,one,ten,hun,count,shift_reg);input [7:0]bin;input clk,rst_n;output[3:0]one,ten;output[3:0]count;output[1:0]hun;output[17:0]shift_reg;reg  [3:0]one,ten;reg  [1:0]hun;reg  [3:0]count;reg  [17:0]shift_reg=18'b000000000000000000;//全部位数,包括hun,ten,one,bin/////

5、/////////////////计数部分////////////////////////always@(posedgeclkornegedgerst_n)begin if(!rst_n)   count<=0; elseif(count==9)  count<=0; else  count<=count+1;end//////////////////////二进制转换为十进制///////////////////判断四种情况,1:个位和十位都大于52:只有一个大于53:都不大于5always@(posedgecl

6、kornegedgerst_n)begin if(!rst_n)    shift_reg=0; elseif(count==0)    shift_reg={10'b0000000000,bin}; elseif(count<=8)        //实现8次移位操作  begin   if(shift_reg[11:8]>=5)    //判断个位是否>5,如果是则+3      begin       if(shift_reg[15:12]>=5)//判断十位是否>5,如果是则+3          begi

7、n  shift_reg[15:12]=shift_reg[15:12]+2'b11;    shift_reg[11:8]=shift_reg[11:8]+2'b11;shift_reg=shift_reg<<1; //对个位和十位操作结束后,整体左移 end  else    begin          shift_reg[15:12]=shift_reg[15:12];shift_reg[11:8]=shift_reg[11:8]+2'b11;//个位加3shift_reg=shift_reg<<1; en

8、d     end                   else     begin       if(shift_reg[15:12]>=5)//十位>=5         begin  shift_reg[15:12]=shift_reg[15:12]+2'b11;  shift_reg[11:8]=shift_reg[11:8];shift_reg=s

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。