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

2012-04-29 00:44唐龙
软件工程 2012年11期
关键词:效率算法

唐龙

摘要:计算机中十进制和二进制数据的转换,一般是通过软件来实现。但是基于冯·诺依曼结构的计算机,其指令是顺序执行的;而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

beginif(clk'event and clk='1') then

if(tmp

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] 何小海,严华.微机原理与接口技术[M].北京:科学出版社,2006.

猜你喜欢
效率算法
提升朗读教学效率的几点思考
注意实验拓展,提高复习效率
基于MapReduce的改进Eclat算法
Travellng thg World Full—time for Rree
进位加法的两种算法
算法初步两点追踪
效率的价值
基于增强随机搜索的OECI-ELM算法
一种改进的整周模糊度去相关算法
跟踪导练(一)2