嚴(yán)淑芹,鄭先成
(西北工業(yè)大學(xué)自動(dòng)化學(xué)院,西安710129)
使用QuartusII這個(gè)開(kāi)發(fā)工具進(jìn)行FPGA設(shè)計(jì)時(shí),若要在FPGA上實(shí)現(xiàn)某個(gè)數(shù)的開(kāi)方運(yùn)算,QuartusII提供了開(kāi)方模塊altfp_sqrt,但是這個(gè)模塊有嚴(yán)格的使用要求,要求用戶輸入的被開(kāi)方數(shù)是IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù),altfp_sqrt模塊的輸出結(jié)果也是IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)。
例如對(duì)整數(shù)9進(jìn)行開(kāi)方運(yùn)算,用戶必須先將整數(shù)9轉(zhuǎn)化為IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)(41100000)H,將該十六進(jìn)制數(shù)41100000作為模塊altfp_sqrt的輸入數(shù)據(jù),得到模塊altfp_sqrt的輸出數(shù)據(jù)(40400000)H,用戶必須自己將此IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)(40400000)H轉(zhuǎn)化為3,才能最終得知對(duì)9進(jìn)行開(kāi)方的結(jié)果是3。這對(duì)于用戶來(lái)說(shuō)就有諸多不便。
本文就是在解決用戶不便的目標(biāo)指引下,用VHDL語(yǔ)言將被開(kāi)方數(shù)轉(zhuǎn)化成IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù),作為模塊altfp_sqrt的輸入,再將altfp_sqrt模塊的輸出IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)轉(zhuǎn)化成整數(shù)[2]。
對(duì)于用戶來(lái)說(shuō),新的開(kāi)方模塊能進(jìn)行整數(shù)的開(kāi)方運(yùn)算,如給新的開(kāi)方模塊輸入數(shù)據(jù)9,直接就能得出所需要的結(jié)果數(shù)據(jù)3。這大大方便了用戶。
浮點(diǎn)數(shù)的表示遵循IEEE754標(biāo)準(zhǔn)[1],它由3部分組成:符號(hào)位、尾數(shù)以及指數(shù)。IEEE754標(biāo)準(zhǔn)規(guī)定了單/雙精度、擴(kuò)展單/雙精度4種浮點(diǎn)數(shù)格式。本設(shè)計(jì)支持單精度格式。
IEEE754單精度浮點(diǎn)數(shù)格式占用32位,包含3個(gè)部分:1位符號(hào)位、8位帶偏移量的指數(shù)和23位尾數(shù),如圖1所示。
圖1 單精度浮點(diǎn)數(shù)的表示
其中偏移值(bias)為127,尾數(shù)有1位隱藏位。即IEEE754標(biāo)準(zhǔn)定義的單精度浮點(diǎn)數(shù)A=(-1)s×1.f×2e-127,s表示有效數(shù)的符號(hào),f表示有效數(shù)的小數(shù)部分,e是加偏移值的指數(shù),1是一個(gè)隱藏位。
整數(shù)轉(zhuǎn)換為IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)的直接方法包括以下步驟:
(2)前零檢測(cè):A對(duì)應(yīng)的32位二進(jìn)制數(shù)第一個(gè)1前的零的個(gè)數(shù)i。把小數(shù)點(diǎn)前后兩部分連起來(lái)再去掉頭前的1,就是尾數(shù),對(duì)于整數(shù)而言,小數(shù)點(diǎn)后全是0,0的個(gè)數(shù)要保證尾數(shù)是23位,MMM MMMM MMMM MMMM MMMM MMMM
(3)階碼生成。對(duì)于單精度數(shù),階碼為:exp=127+(31-i)=158-i。exp對(duì)應(yīng)的8位二進(jìn)制為EEE EEEE E。
(4)被開(kāi)方數(shù)為正數(shù),符號(hào)位s為0。
(5)a對(duì)應(yīng)的IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)為SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
時(shí)序仿真波形如圖2所示。
圖2 整數(shù)轉(zhuǎn)化為IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)的時(shí)序仿真波形
IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)轉(zhuǎn)化為整數(shù)的流程圖如圖3 所示[4]:
時(shí)序仿真波形圖如圖4所示。
將運(yùn)算前標(biāo)準(zhǔn)化模塊、altfp_sqrt、浮點(diǎn)數(shù)轉(zhuǎn)化成整數(shù)模塊級(jí)聯(lián),就得到頂層模塊。頂層模塊進(jìn)行整數(shù)開(kāi)方運(yùn)算的時(shí)序仿真波形圖如圖5所示。
在本研究課題中,需要對(duì)發(fā)電機(jī)進(jìn)行控制研究。將從發(fā)電機(jī)采樣過(guò)來(lái)的a相電壓數(shù)據(jù)Va和b相電壓數(shù)據(jù)Vb進(jìn)行計(jì)算,得到有效值,將此有效值輸入到PID控制算法模塊,得到PWM波去驅(qū)動(dòng)MOSFET。發(fā)電機(jī)控制系統(tǒng)框圖如圖6所示。
圖3 IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)轉(zhuǎn)化為整數(shù)
圖4 IEEE754標(biāo)準(zhǔn)浮點(diǎn)數(shù)轉(zhuǎn)化為整數(shù)時(shí)序仿真波形圖
圖5 基于FPGA的整數(shù)開(kāi)方運(yùn)算時(shí)序仿真波形圖
圖6 發(fā)電機(jī)控制系統(tǒng)框圖
可知,在FPGA內(nèi)部應(yīng)用整數(shù)開(kāi)方模塊比應(yīng)用浮點(diǎn)開(kāi)方模塊altfp_sqrt要方便得多。
實(shí)驗(yàn)中,以Cyclone II系列的EP2C8Q208C8為硬件平臺(tái),已成功采用整數(shù)開(kāi)方模塊進(jìn)行發(fā)電機(jī)三相電壓有效值計(jì)算。
[1] Charles Farnum.Compiler Support for Floating-Point Computation[J].Software Practices and Experience,1988,7(18):9-21.
[2] 應(yīng)麗婭,張 .基礎(chǔ)浮點(diǎn)運(yùn)算單元VHDL實(shí)現(xiàn)的新方法[J].杭州電子科技大學(xué)學(xué)報(bào),2007,12(6):27.
[3] 何晶,韓月秋.一種新的整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)的方法[J].計(jì)算機(jī)工程,2003,11(19),29-38.
[4] 姜雪松,劉東升.硬件描述語(yǔ)言VHDL教程(基礎(chǔ)篇·提高篇)[M].西安:西安交通大學(xué)出版社,2004.