• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 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
    德昌县| 昌江| 绥棱县| 江北区| 当涂县| 延长县| 安泽县| 察哈| 平顺县| 漳平市| 炎陵县| 隆昌县| 达州市| 渭南市| 宕昌县| 贵德县| 英吉沙县| 乌恰县| 云林县| 巴里| 华坪县| 兴文县| 高青县| 江山市| 北辰区| 棋牌| 思南县| 长汀县| 红原县| 奉新县| 额尔古纳市| 清水河县| 当雄县| 兖州市| 伊金霍洛旗| 志丹县| 克山县| 汉中市| 环江| 梅州市| 手机|