新聞中心

        EEPW首頁 > 測試測量 > 設計應用 > FPU加法器的設計與實現

        FPU加法器的設計與實現

        作者: 時間:2012-08-29 來源:網絡 收藏

        2 的設計實現
        2.1 電路原理圖
        浮點加法運算模塊電路原理如圖2所示。主要由6個模塊構成,分別是Subcell模塊、exchange模塊、move模塊、M_add模塊、standat模塊、cntrl模塊。下面將分別對這6個模塊進行介紹。

        本文引用地址:http://www.104case.com/article/193319.htm

        d.JPG


        1)Subcell模塊
        此模塊的功能主要有以下4個方面:①0操作數的檢查。將有關信息送到cntrl模塊和standar模塊,用于決定是否進行后續操作,以便節省運算的時間。②階碼大小的比較。將小數a_little傳送到cntrl模塊。③對階。比較兩個操作數的階碼,求出它們階碼的差值sub[6..0],送到move模塊。④當這個模塊運算結束或者有新操作數輸入時,告知cntrl模塊。
        在圖2中,當rst_sub=‘0’,此模塊就正常工作;若rst_sub=‘1’,則所有的輸出都是0。在零操作數檢查的過程中,如果發現有0操作數的存在,則就令num_z=‘1’;在此操作數的檢查過程中還可以區分到底是哪一個操作數為零,假如操作數x為零,則就令z_find=“0 1”;若是操作數y為零,則就令z_find=“10”;若無0操作數,則z_find=“00”。當對參與運算的兩個操作數進行0操作數判別結束后,本模塊在實現的過程中主要采用了5個條件語句來實現兩個操作數大小的比較,通過比較可以算出階碼的差值。若兩數的階碼相同,即小數點是對齊的,則進行位數的比較,當然這所有的比較都是通過不同的條件語句來實現的。所有的比較完畢,end_sub設為1。當有新的數據從x,y端輸入的時候,根據程序的設置,相關進程會被喚醒,控制模塊接收到進程發送來的脈沖change,就知道有新的操作數據輸入,因此再次啟動控制模塊,進而進入另一個新的周期。
        2)exchange模塊
        此模塊的功能為:①向move模塊輸入小冪次浮點數尾數,②向M_ADD模塊輸入大冪次浮點數尾數。
        此模塊包含一個Process進程,當rst_exchange=‘0’并且en_exchange=‘1’,浮點數x,y的冪和尾數被拆開,存入不同變量。然后執行本模塊所設置的4個條件語句,分別對兩個浮點數進行處理,一方面將冪次小的操作數位數進行擴充,擴充為33位后傳送到move模塊中;另一方面將冪次大的操作數擴充成32為傳送到M_ADD模塊中。進程結束后,end_exchange置高電平,告知控制模塊。
        3)move模塊
        此模塊的功能主要是為了實現兩個操作數的對階。在這個模塊中設計了一個進程process(clk),它以clk為敏感信號,此進程還包含有2個條件語句模塊。第1個模塊主要是對變量進行更新。第2個模塊主要是判斷移位是否已經結束,并對相應的標志位進行設置。假如所移操作數的后8位是不為0的,那么在每個時鐘的上升沿到來時繼續進行向右的移動。
        4)M_add模塊
        此模塊的主要功能是對階完成以后,對尾數進行運算。通過在每個尾數前加一位0來檢測運算結果是否需要規格化。程序如下:
        e.JPG
        在進行加減法運算中分兩種情況:當add_sub=“11”,執行Mx+My;當add_sub=“00”,執行Mx-My。具體由Cntrl模塊的分析中給出。
        5)standar模塊
        此模塊的主要功能是對浮點運算的結果進行規格化處理。這個模塊中有兩個變量分別是ntemp和texp,該模塊在首次執行時對它們進行初始化,否則只有當控制模塊發出rst命令的時候才能對它們的初始值進行改變。當add_sub的值不同時,則將條件語句分成了不同的部分:
        ①當add_sub的取值為“00”或者當其取值為“01”的時候,可得M_ADD模塊進行的是減法運算;如果運算結果是0,那么就直接將0輸出;假如運算結果不為0,就需要對numb(15)進行考慮;假如其值是1的話,就不需要進行左移,直接執行語句:“sum_standar=signal_b temp_exp(5 downto0)ntemp(14 downto 6);”。但是如果numb(15)的值是為0的,就需要進行左移。
        ②當add_sub=‘11’時,則M_ADD模塊執行加法運算;如果numb(16)的值為1,就需要進行右移。而當numb(16)的值為0時,則不用進行規格化,直接輸出。
        6)cntrl模塊
        在這個模塊中主要采用的是Mealy狀態機,它和輸入、輸出、狀態皆有關;一方面Mealy狀態機要完成其狀態的轉化,需要等待本模塊中CLK_m時鐘信號的上升沿。另一方面如果subcell模塊有了新的操作數的輸入,本模塊收到告知信號后,會將狀態機重新運行。
        在此對本設計模塊中所使用狀態機所包含的各個部分進行簡要的闡述:
        ①說明部分
        本部分主要是在ARCHITECTURE和BEGIN之間,用TYPE語句定義枚舉型的數據類型(包含既定狀態元素)status,狀態變量xt_status和ct_st atus定義為信號signal。主要用以下語句實現:
        type status is(rst1,rst2,rst3,rst4,rst5,rst6,rst7);
        signal xt_status,ct_status:status;



        關鍵詞: FPU 加法器

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 琼中| 米泉市| 中牟县| 锡林浩特市| 阜宁县| 万荣县| 常德市| 商河县| 仁寿县| 铜山县| 扎兰屯市| 黄大仙区| 莎车县| 封开县| 庐江县| 永登县| 新津县| 高碑店市| 武功县| 枝江市| 玛沁县| 福建省| 出国| 锡林郭勒盟| 阿拉尔市| 西峡县| 夹江县| 鹤庆县| 平泉县| 东海县| 盐城市| 宿迁市| 多伦县| 呼和浩特市| 徐州市| 高碑店市| 武安市| 富平县| 渑池县| 东乌珠穆沁旗| 句容市|