从整数中提取个十百位VHDL算法.docVIP

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

从整数中提取个十百位VHDL算法摘 要:计算机中十进制和二进制数据的转换,一般是通过软件来实现。但是基于冯·诺依曼结构的计算机,其指令是顺序执行的;而FPGA是并行执行方式,适合真正意义上的并行任务处理。因此基于VHDL编程实现从整数中提取个十百位,其执行速度要比采用软件语言编程快得多。 关 键 词:VHDL;进制转换;算法;效率 0.引言 历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算。而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数。因此,现在改为二进制计算机。但由于二进制数不直观,人们在操作计算机时,输入、输出的数据一般使用十进制,因此需要通过软件将十进制转换为二进制。但是基于冯·诺依曼结构的计算机在运行程序时,均为先取出指令然后执行,并且指令是顺序执行的,其运算效率较低;而FPGA(包括CPLD)是并行执行方式,即当时钟沿到来时,所有的触发器都会动作,其执行效率较高。以下给出了两种基于VHDL编程的从整数中提取个十百位的算法。 1.算法一 求余-除-再求余-再除…… 例如: …… --此处省略库和实体描述 architecture bhv of conv is begin process(clk,in8) --in8为输入的8位二进制数 variable tmp,q1,q2:integer range 0 to 255; --定义3个变量 begin tmp:=conv_integer(in8); --将二进制数转换为十进制数 q1:=tmp/10; q2:=q1/10; --除以10 if clk’event and clk=‘1’ then out1=conv_std_logic_vector(tmp rem 10,4); --除10取余后转换为4位二进制数 out2=conv_std_logic_vector(q1 rem 10,4); out3=conv_std_logic_vector(q2 rem 10,4); end if; end process; end bhv; 程序执行后,out1,out2,out3分别是个位,十位,百位。 2.算法二 在FPGA内部定义3个寄存器,分别表示个位、十位、百位,让其实现0—999的千进制计数,当计数值等于输入的整数值时,计数停止,然后按顺序提取个十百位。 例如: …… --此处省略库和实体描述 architecture a of conv is signal da,db,dc:std_logic_vector(3 downto 0); --定义3个信号,分别代表个十百位 begin process(clk,in8) --in8为输入的8位二进制数 variable tmp: integer range 0 to 999 :=0; --定义1个变量,初始值为0 begin if(clk’event and clk=‘1’) then if(tmpin8) then --当计数值小于输入值时,计数器计数 if(da=9 and db=9 and dc=9) then --以下为千进制计数 da=“0000”; db=“0000”; dc=“0000”; elsif(da=9 and db=9) then da=“0000”; db=“0000”; dc=dc+1; tmp:=tmp+1; elsif(da=9)then da=“0000”; db=db+1; tmp:=tmp+1; else da=da+1; tmp:=tmp+1; end if; else --当计数值等于输入的整数值时,计数停止,然后按顺序提取个十百位。 tmp:=0; da=“0000”; db=“0000”; dc=“0000”; a0=da; a1=db; a2=dc; end if; end if; end process; end a; 程序执行后,a0,a1,a2分别是个位,十位,百位。 3.结束语 在数据处理中经常会遇到二进制与十进制的转换,但由于MCU、CPU、DSP等的内部结构都是设计好的,所以只能通过软件编程来进行顺序处理,速度相对较慢,FPGA则可以并行处理,完全可以将一个二进制数据作为输入,然后直接在内存中输出对应的ASCII码,这个速度是非常快的,只受限于内存读取速度。 参考文献 [1] 潘松,黄继业.EDA技术实用教程—VHDL版[M].北京:科学出版社,2010. [2] 何小海,严华.微机原理

您可能关注的文档

文档评论(0)

docman126 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档