• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      從整數(shù)中提取個(gè)十百位的VHDL算法

      2012-04-29 00:44:03唐龍
      軟件工程 2012年11期
      關(guān)鍵詞:效率算法

      唐龍

      摘要:計(jì)算機(jī)中十進(jìn)制和二進(jìn)制數(shù)據(jù)的轉(zhuǎn)換,一般是通過(guò)軟件來(lái)實(shí)現(xiàn)。但是基于馮·諾依曼結(jié)構(gòu)的計(jì)算機(jī),其指令是順序執(zhí)行的;而FPGA是并行執(zhí)行方式,適合真正意義上的并行任務(wù)處理。因此基于VHDL編程實(shí)現(xiàn)從整數(shù)中提取個(gè)十百位,其執(zhí)行速度要比采用軟件語(yǔ)言編程快得多。

      關(guān)鍵詞:VHDL;進(jìn)制轉(zhuǎn)換;算法;效率

      0.引言

      歷史上第一臺(tái)電子數(shù)字計(jì)算機(jī)ENIAC是一臺(tái)十進(jìn)制機(jī)器,其數(shù)字以十進(jìn)制表示,并以十進(jìn)制形式運(yùn)算。而自然界具有兩種穩(wěn)定狀態(tài)的組件普遍存在,如開關(guān)的開和關(guān),電路的通和斷,電壓的高和低等,非常適合表示計(jì)算機(jī)中的數(shù)。因此,現(xiàn)在改為二進(jìn)制計(jì)算機(jī)。但由于二進(jìn)制數(shù)不直觀,人們?cè)诓僮饔?jì)算機(jī)時(shí),輸入、輸出的數(shù)據(jù)一般使用十進(jìn)制,因此需要通過(guò)軟件將十進(jìn)制轉(zhuǎn)換為二進(jìn)制。但是基于馮·諾依曼結(jié)構(gòu)的計(jì)算機(jī)在運(yùn)行程序時(shí),均為先取出指令然后執(zhí)行,并且指令是順序執(zhí)行的,其運(yùn)算效率較低;而FPGA(包括CPLD)是并行執(zhí)行方式,即當(dāng)時(shí)鐘沿到來(lái)時(shí),所有的觸發(fā)器都會(huì)動(dòng)作,其執(zhí)行效率較高。以下給出了兩種基于VHDL編程的從整數(shù)中提取個(gè)十百位的算法。

      1.算法一

      求余->除->再求余->再除……

      例如:

      …… --此處省略庫(kù)和實(shí)體描述

      architecture bhv of conv is

      begin process(clk,in8) --in8為輸入的8位二進(jìn)制數(shù)

      variable tmp,q1,q2:integer range 0 to 255; --定義3個(gè)變量

      begin tmp:=conv_integer(in8); --將二進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)

      q1:=tmp/10; q2:=q1/10; --除以10

      if clk'event and clk='1' then

      out1<=conv_std_logic_vector(tmp rem 10,4); --除10取余后轉(zhuǎn)換為4位二進(jìn)制數(shù)

      out2<=conv_std_logic_vector(q1 rem 10,4);

      out3<=conv_std_logic_vector(q2 rem 10,4);

      end if; end process; end bhv;

      程序執(zhí)行后,out1,out2,out3分別是個(gè)位,十位,百位。

      2.算法二

      在FPGA內(nèi)部定義3個(gè)寄存器,分別表示個(gè)位、十位、百位,讓其實(shí)現(xiàn)0—999的千進(jìn)制計(jì)數(shù),當(dāng)計(jì)數(shù)值等于輸入的整數(shù)值時(shí),計(jì)數(shù)停止,然后按順序提取個(gè)十百位。

      例如:

      …… --此處省略庫(kù)和實(shí)體描述

      architecture a of conv is

      signal da,db,dc:std_logic_vector(3 downto 0);

      --定義3個(gè)信號(hào),分別代表個(gè)十百位

      begin process(clk,in8) --in8為輸入的8位二進(jìn)制數(shù)

      variable tmp: integer range 0 to 999 :=0; --定義1個(gè)變量,初始值為0

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

      if(tmp

      if(da=9 and db=9 and dc=9) then --以下為千進(jìn)制計(jì)數(shù)

      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 --當(dāng)計(jì)數(shù)值等于輸入的整數(shù)值時(shí),計(jì)數(shù)停止,然后按順序提取個(gè)十百位。

      tmp:=0; da<="0000"; db<="0000"; dc<="0000";a0<=da; a1<=db; a2<=dc;

      end if; end if; end process; end a;

      程序執(zhí)行后,a0,a1,a2分別是個(gè)位,十位,百位。

      3.結(jié)束語(yǔ)

      在數(shù)據(jù)處理中經(jīng)常會(huì)遇到二進(jìn)制與十進(jìn)制的轉(zhuǎn)換,但由于MCU、CPU、DSP等的內(nèi)部結(jié)構(gòu)都是設(shè)計(jì)好的,所以只能通過(guò)軟件編程來(lái)進(jìn)行順序處理,速度相對(duì)較慢,F(xiàn)PGA則可以并行處理,完全可以將一個(gè)二進(jìn)制數(shù)據(jù)作為輸入,然后直接在內(nèi)存中輸出對(duì)應(yīng)的ASCII碼,這個(gè)速度是非常快的,只受限于內(nèi)存讀取速度。

      參考文獻(xiàn)

      [1] 潘松,黃繼業(yè).EDA技術(shù)實(shí)用教程—VHDL版[M].北京:科學(xué)出版社,2010.

      [2] 何小海,嚴(yán)華.微機(jī)原理與接口技術(shù)[M].北京:科學(xué)出版社,2006.

      猜你喜歡
      效率算法
      提升朗讀教學(xué)效率的幾點(diǎn)思考
      甘肅教育(2020年14期)2020-09-11 07:57:42
      注意實(shí)驗(yàn)拓展,提高復(fù)習(xí)效率
      基于MapReduce的改進(jìn)Eclat算法
      Travellng thg World Full—time for Rree
      進(jìn)位加法的兩種算法
      算法初步兩點(diǎn)追蹤
      效率的價(jià)值
      商周刊(2017年9期)2017-08-22 02:57:49
      基于增強(qiáng)隨機(jī)搜索的OECI-ELM算法
      一種改進(jìn)的整周模糊度去相關(guān)算法
      跟蹤導(dǎo)練(一)2
      青岛市| 五指山市| 如东县| 克拉玛依市| 明溪县| 华亭县| 梅河口市| 南雄市| 仁布县| 平潭县| 自治县| 哈巴河县| 屯留县| 旅游| 葵青区| 镇宁| 舟曲县| 古浪县| 和田县| 玛沁县| 海原县| 毕节市| 吉隆县| 松滋市| 彰化市| 克拉玛依市| 从江县| 缙云县| 舒兰市| 塔河县| 宁城县| 玛纳斯县| 枞阳县| 冀州市| 昌都县| 桂阳县| 余江县| 曲周县| 邵阳市| 文安县| 怀宁县|