ImageVerifierCode 换一换
格式:DOCX , 页数:8 ,大小:101.61KB ,
资源ID:27053782      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/27053782.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(verilog实现任意位二进制转换BCD.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

verilog实现任意位二进制转换BCD.docx

1、verilog实现任意位二进制转换BCDverilog实现任意位二进制转换BCD 一直感觉这是个很简单的问题,直到突然自己连BCD都不太清楚的时候,才发现这没有看起来那么简单,这里介绍里任意位二进制转为BCD的verilog代码,这个转换方法也可以用在C上面,此为原创,转载请注明,谢谢。 基础知识: BCD:BCD码又称为8421码, 意义:之所以有时候需要将binary转换为BCD,一般是用在本科的实验中,为了将binary显示在数码管中,当然还有很多应用,只是目前我还没有用到。 转换算法:左移加3法 移位加3法的具体原理,在网上感觉也没有人能够说的清楚,以后找到书籍再说吧。下面解释下左移加

2、三算法。这里以8bit二进制数FF做例子。 该算法的操作为上图。下面对上图的操作进行详细的解释: 由于8bit的二进制最大为FF,转换为十进制为255。所以需要使用三个BCD码来表示所有的8bit二进制数。上图的hundreds表示百位的BCD,tens表示十位的BCD,Units表示个位的BCD。算法的操作为一直将binary数据左移,移出的数据按顺序存在hundreds,tens,Units。例如上面的shift1,shift2,shift3操作后,Units变为了0111,至于为何在shift3后进行add3操作,是因为在算法中每一次左移,都要对hundreds,tens和Units进行

3、判断,如果hundreds,tens和Units里面的值大于或等于5,就将hundreds,tens和Units自加3.所以shift3后,Units里面为0111,表示为7,此时不能左移,而是对Units加三操作,所以Units的值从0111变为了1010.值得注意的是,只要hundreds,tens和Units中任意一个的值大于或等于5(0101),就要先进行一次自加三的操作,然后才能继续左移,后面的操作同上。 注意2:n位的binary就需要进行n次左移 注意3:最后一次左移不需要进行add3操作 注意4 : 亲自推导16位的,和24位的binary转换,结果正确,所以该算法适用于任意位

4、binary toBCD,当然这种论断没有足够的理论依据。 verilog代码: 说明:对于8bit及以下的binary,可以使用case语句实现移位加三算法。由于这里说明的是任意位的二进制数,转为BCD,所以我的代码中设计了一个状态机,来控制移位,加三和结束操作。由于代码编写时间仓促,其中或许有些bug。 /name: 二进制转BCD/data: 2014-04-17 at kb129/info: as 2*8=255 change to BCD then this need3 times of “8421”module b_to_bcd(clk,rst_n,binary,state_en,

5、BCD);parameterb_length= 8;parameterbcd_len= 12;parameteridle= 5b00001;parametershift= 5b00010;parameterwait_judge = 5b00100;parameterjudge= 5b01000;parameteradd_3= 5b10000; input clk;inputrst_n;inputb_length-1:0binary;inputstate_en;output regbcd_len-1:0BCD; reg b_length-1:0reg_binary;reg 3:0bcd_b, b

6、cd_t,bcd_h;reg 3:0shift_time;reg 5:0c_state,n_state;regadd3_en;regchange_done;/this is a three section kind of state codestylealways(posedge clk or negedge rst_n) begin if(!rst_n)c_stateelsec_stateif(!rst_n)c_stateelsecase(n_state)idle:beginif(binary!=0)&(state_en=1b1)&(change_done=0b0)n_stateelsen_

7、stateendshift: n_state wait_judge:beginif(change_done=1b1)n_stateelsen_stateendjudge:beginif(add3_en)n_stateelsen_state endadd_3:beginn_stateenddefault: n_stateendcaseend/the third sectionalways(posedge clk or negedge rst_n)beginif(!rst_n)beginshift_timechange_doneadd3_enendelsecase(n_state)idle:beg

8、inshift_timereg_binary bcd_h bcd_tbcd_bendshift:beginbcd_h,bcd_t,bcd_b,reg_binaryshift_timeif(shift_time=1) change_done elsechange_doneendwait_judge:beginif(bcd_h;=4d5)|(bcd_t;=4d5)|(bcd_b;=4d5)add3_enelseadd3_enif(change_done=1)BCDendjudge: add3_enadd_3: beginif(bcd_h;=4d5) bcd_hif(bcd_t;=4d5) bcd_

9、tif(bcd_b;=4d5) bcd_benddefault: beginchange_doneadd3_enendendcaseendendmodule 代码的仿真:这里对上面的代码进行了仿真,仿真结果显示上面代码可以实现8bitbinary的BCD转换。 testbench: module filter_tb;reg clk;reg rst_n;reg state_en;reg 7:0 binary;wire 11:0BCD;initialbeginclk=0;rst_n=0;state_en = 0;#100 binary = 8h3f;#150 rst_n=1;#200state_en =1;endalways #10 clk=clk;b_to_bcd u_b_to_bcd(.clk(clk),.rst_n(rst_n),.binary(binary),.state_en(state_en),.BCD(BCD);endmodule仿真结果:二进制的3f=十进制的63

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1