嚴淑芹,鄭先成
(西北工業大學自動化學院,西安710129)
使用QuartusII這個開發工具進行FPGA設計時,若要在FPGA上實現某個數的開方運算,QuartusII提供了開方模塊altfp_sqrt,但是這個模塊有嚴格的使用要求,要求用戶輸入的被開方數是IEEE754標準浮點數,altfp_sqrt模塊的輸出結果也是IEEE754標準浮點數。
例如對整數9進行開方運算,用戶必須先將整數9轉化為IEEE754標準浮點數(41100000)H,將該十六進制數41100000作為模塊altfp_sqrt的輸入數據,得到模塊altfp_sqrt的輸出數據(40400000)H,用戶必須自己將此IEEE754標準浮點數(40400000)H轉化為3,才能最終得知對9進行開方的結果是3。這對于用戶來說就有諸多不便。
本文就是在解決用戶不便的目標指引下,用VHDL語言將被開方數轉化成IEEE754標準浮點數,作為模塊altfp_sqrt的輸入,再將altfp_sqrt模塊的輸出IEEE754標準浮點數轉化成整數[2]。
對于用戶來說,新的開方模塊能進行整數的開方運算,如給新的開方模塊輸入數據9,直接就能得出所需要的結果數據3。這大大方便了用戶。
浮點數的表示遵循IEEE754標準[1],它由3部分組成:符號位、尾數以及指數。IEEE754標準規定了單/雙精度、擴展單/雙精度4種浮點數格式。本設計支持單精度格式。
IEEE754單精度浮點數格式占用32位,包含3個部分:1位符號位、8位帶偏移量的指數和23位尾數,如圖1所示。

圖1 單精度浮點數的表示
其中偏移值(bias)為127,尾數有1位隱藏位。即IEEE754標準定義的單精度浮點數A=(-1)s×1.f×2e-127,s表示有效數的符號,f表示有效數的小數部分,e是加偏移值的指數,1是一個隱藏位。
整數轉換為IEEE754標準浮點數的直接方法包括以下步驟:

(2)前零檢測:A對應的32位二進制數第一個1前的零的個數i。把小數點前后兩部分連起來再去掉頭前的1,就是尾數,對于整數而言,小數點后全是0,0的個數要保證尾數是23位,MMM MMMM MMMM MMMM MMMM MMMM
(3)階碼生成。對于單精度數,階碼為:exp=127+(31-i)=158-i。exp對應的8位二進制為EEE EEEE E。
(4)被開方數為正數,符號位s為0。
(5)a對應的IEEE754標準浮點數為SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM
時序仿真波形如圖2所示。

圖2 整數轉化為IEEE754標準浮點數的時序仿真波形
IEEE754標準浮點數轉化為整數的流程圖如圖3 所示[4]:
時序仿真波形圖如圖4所示。
將運算前標準化模塊、altfp_sqrt、浮點數轉化成整數模塊級聯,就得到頂層模塊。頂層模塊進行整數開方運算的時序仿真波形圖如圖5所示。
在本研究課題中,需要對發電機進行控制研究。將從發電機采樣過來的a相電壓數據Va和b相電壓數據Vb進行計算,得到有效值,將此有效值輸入到PID控制算法模塊,得到PWM波去驅動MOSFET。發電機控制系統框圖如圖6所示。

圖3 IEEE754標準浮點數轉化為整數

圖4 IEEE754標準浮點數轉化為整數時序仿真波形圖

圖5 基于FPGA的整數開方運算時序仿真波形圖

圖6 發電機控制系統框圖
可知,在FPGA內部應用整數開方模塊比應用浮點開方模塊altfp_sqrt要方便得多。
實驗中,以Cyclone II系列的EP2C8Q208C8為硬件平臺,已成功采用整數開方模塊進行發電機三相電壓有效值計算。
[1] Charles Farnum.Compiler Support for Floating-Point Computation[J].Software Practices and Experience,1988,7(18):9-21.
[2] 應麗婭,張 .基礎浮點運算單元VHDL實現的新方法[J].杭州電子科技大學學報,2007,12(6):27.
[3] 何晶,韓月秋.一種新的整數轉換為浮點數的方法[J].計算機工程,2003,11(19),29-38.
[4] 姜雪松,劉東升.硬件描述語言VHDL教程(基礎篇·提高篇)[M].西安:西安交通大學出版社,2004.