0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

硬件乘法寄存器是可以通過CPU匯編指令的讀或著寫進行操作

2oON_changxuemc ? 來源:未知 ? 作者:李倩 ? 2018-09-30 10:35 ? 次閱讀

32 位硬件乘法器是一個并行器件,而不是 CPU 內(nèi)核的一部分。這也就意味著:它在工作時不會涉及 CPU 的活動。硬件乘法寄存器是可以通過 CPU 匯編指令的讀或著寫進行操作。

硬件乘法器特點:

○無符號乘法;

○ 有符號乘法;

○ 無符號乘加操作;

○ 由符號乘加操作;

○ 8 位,16 位,24 位,和 32 位操作數(shù);

○ 整數(shù)乘法

○ 小數(shù)乘法

○ 8位和 16 位操作數(shù)與 16 位硬件乘法器兼容;

○ 8位和 24 位在沒有符號位擴展的情況下,依然可以進行乘法操作;

硬件乘法器結(jié)構圖:

硬件乘法器支持 8 位,16 位,24 位,32 位無符號操作數(shù),有符號操作數(shù),無符號乘、加操作和有符號乘、加操作。操作數(shù)的大小,可以通過對"字"或者"字節(jié)"的定義來確定。操作數(shù)的類型可以通過第一個操作數(shù)的寫入進行選擇。

硬件乘法器有兩個 32 位操作數(shù)寄存器,操作數(shù) OP1 和操作數(shù) OP2,以及一個 64 位結(jié)果寄存器,而這個寄存器需要使用 RES0 和 RES3 寄存器。為了兼容 16 X 16 硬件乘法器,8 位或者 16 位操作數(shù)的結(jié)果需要使用 RESL0,RESL1 和 SUMNEXT這三個寄存器。RESL0 用于存儲 16 X 16 結(jié)果的低“字”,RESL1 用于存儲 16 X 16 結(jié)果的高“字”。以及 SUMEXT 用于存儲結(jié)果的信息。

硬件乘法器操作:

表1總結(jié)了針對各種操作數(shù)可能的結(jié)果的每一個"字"。此表展示了兩點,一個是 OP2L 的寫入操作,另一個時 OP2H 的寫入操作。而最糟糕的情況就是實際結(jié)果的可能性。

8 位或者 16 位操作數(shù)通常在 3 個 MCLK 周期內(nèi)準備好,并且在寫入 OP2 操作數(shù)后的下一個指令就可以讀出結(jié)果。 如果使用了間接尋址方式進行操作,在結(jié)果計算出之前,一個 NOP指令是必需的。

在 OP2 操作數(shù),或者 OP2H 進入 RES0 時 24 位或者 32 位的結(jié)果可以通過連續(xù)指令的方式進行讀取。當時用間接尋址方式進行讀結(jié)果操作時,一條 NOP 指令時必須的。

由于有一個 32 位第二個操作數(shù)的存在,OP2L,OP2H 寄存器都要被使用。又由于兩個 16 位部分的被使用,從而使得結(jié)果變得復雜。

操作數(shù)寄存器OP1 :

OP1 操作數(shù)寄存器內(nèi)置 12 個寄存器,如表所示,這些寄存器通常用來裝載數(shù)據(jù)到乘法器,并且也用來選擇乘法器模式。寫入第一個操作數(shù)的“低字”到由乘法操作數(shù)類型所確定的地址的乘法操作,才能夠開始操作。當寫入一個雙個“字”到后綴為:32H 的高字寄存器(此時假定 OP1 為 32 位寬)。對于寫入 OP2 操作來說,最新的地址寫入的優(yōu)先級通常定義了第一個操作數(shù)的寬度。例如:如果 MPY32L 被 MPY32H 寫入,則所有的 32 位都將被使用并且 OP1將被設置為:32 位。如果 MPY32H 被 MPY32L 寫入,則乘法操作將不會使用 MPY32H,并且假設 MPY32L 將數(shù)據(jù)寫入到 16 位寬的 OP1。

在 OP1 操作數(shù)用于連續(xù)的操作時,重復性乘法操作就可以被執(zhí)行,而此時無需載入 OP1 操作數(shù)。

操作數(shù)寄存器OP2:

寫入第二個操作數(shù)到 OP2 寄存器通常會初始化乘法操作。寫入 OP2 將會使得一個 16 位寬的第二個操作數(shù)和 OP1 中的值開始進行選擇操作。寫入 OP2L 通常會使得一個 32 位寬的第二個操作數(shù),和被要求寫入高字的 OP2H 的乘法器開始進行操作選擇。

對于 8 位,24 位操作數(shù)寄存器來說,可以通過字節(jié)指令進行操作。用一個字節(jié)指令進行的乘法器操作,在單獨操作期間,乘法器模塊將會自動的有一個符號字節(jié)的擴展。對于 24 位操作數(shù)來說,只有一個高字將會作為字節(jié)寫入。如果 24 位操作數(shù)通過寄存器被定義了符號位擴展,那么作為符號位將會有一個低字的寫入,因為寄存器定義了操作數(shù)是否有無符號。

一個 32 位操作數(shù)的高字在保持不變的條件下,當改變操作數(shù)的大小至 16 位,可以通過修改操作數(shù)的大小,或者寫入操作數(shù)寄存器來實現(xiàn)。在 16 位操作執(zhí)行器件,高字的內(nèi)容忽略。

注意:

在乘法操作期間改變第一個或者第二個操作數(shù),在默認的條件下,在選擇乘法操作時,改變 OP1 或者 OP2,而所得的結(jié)果均不正確,因為那時操作數(shù)在正在改變。對 OP2 或者 OP2L 的寫入,將會對任何正在進行的計算操作進行放棄;同時,也將開始進行一個新的操作。而此時沒有計算出的結(jié)果對接下來的 MAC 和MACS 操作 不再可靠。

注意要避免 MPYDLYWRTEN 位被置 1。所有寫入 MPY32 寄存器的操作通常會由于MPYDLY32=0 而延遲,直到 64 位結(jié)果準備好或者 MPYDLY32=1,且 32 位結(jié)果算出。

結(jié)果寄存器:

乘法操作結(jié)果通常都是 64 位寬。而這要使用 RES0,RES3 寄存器。使用一個單操作指令MPYS 或者 MACS,結(jié)果將會有符號位的擴展。在 MACS 操作之前如果結(jié)果寄存器載入初始值,用戶的軟件必須仔細關注所寫入帶符號位的 64 位值。

備注:

在乘法操作期間改變結(jié)果寄存器的值 在寫入OP2 或者 OP2L 之后,直到初始化操作完成之前,結(jié)果寄存器不可以被用戶軟件修改。

除了 RES0 和 RES3。為了兼容 16 X 16 硬件乘法器,一個 8 位或者 16 位操作的 32 位結(jié)果通常使用 RESL0 和 RESL1 以及 SUMEXT。在這種情況下,結(jié)果的低位寄存器 RESL0 保存了計算結(jié)果的低16位,并且結(jié)果保存在寄存器RESH1高16為中。RES0和RES1等同于RESL0和 RESH1。

結(jié)果擴展寄存器 SUMEXT 的內(nèi)容依靠乘法操作并且這些操作在表中以列出。如果所有的操作是 16 位寬或者小于 32 位的結(jié)果通常決定符號和 carry。如果操作數(shù)中的一個比 16 位數(shù)大,則結(jié)果將會是 64 位。

MPYC 位通常反映了乘法器的 Carry,而這也列在表中。因而,將會反映在第 33 位或者第 65 位的結(jié)果中。當然,前提是小數(shù)模式,和連續(xù)模式?jīng)]有被選擇.

MACS 下溢出和溢出:

乘法器在 MACS 模式中通常不會自動監(jiān)測下溢出和溢出。例如: 工作于 16 位輸入數(shù)據(jù)和 32 位結(jié)果中,使用 RESL0 和 RESH1,正數(shù)的范圍的可能數(shù)字將在 0 到 07FFF FFFFh,并且負數(shù)的結(jié)果范圍將在:0FFFF FFFFh 到 08000 0000h。

下溢出出現(xiàn)時兩個負操作數(shù)的相加的計算結(jié)果范圍在正數(shù)范圍內(nèi)。

當兩個正操作數(shù)相加的結(jié)果為負數(shù)時,溢出的結(jié)果出現(xiàn)!

SUMEXT 寄存器包含了結(jié)果符號位(在上面的兩種情況下),offffh 通常針對一個 32 的溢出,0000h 通常針對一個 32 位的下溢出。在 MPY32CTL0 中 MPYC 位能夠被用來監(jiān)測溢出狀態(tài)。如果 Carry 寄存器不同于 SUMEXT 寄存器內(nèi)容則溢出出現(xiàn)。用戶軟件必須能夠處理這些狀態(tài)。

乘法控制寄存器:

Reserved 位 15-10 保留

MPYDL32 位 9 延時寫模式

0 寫延時在 64 位結(jié)果(RES0-RES3)之前是有效的。

1 寫延時在 32 位結(jié)果(RES0-RES3)之前是有效的。

MPYDLYWRTEN 位 8 延時寫使能

64 位(MPYDLY32=0)或 32 位(MPYDLY32=1)結(jié)果準備好之前,所有寫入到任何 MPY32 寄存器的操作會被延遲。

0 寫是不延時

1 寫是延時的

MPYOP2_32 位7 乘法器操作數(shù)2的位寬度

0 16位

1 32位

MPYOP1_32 位6 乘法器操作數(shù)1的位寬度

0 16位

1 32位

MPYMx 位5-4 乘法器模式

00 MPY 乘法

01 MPYS 有符號乘法

10 MAC 乘法積累

11 MACS 有符號乘法積累

MPYSA 位3 飽和模式

MPYFRAC 位2 小數(shù)模式

Reserved 位1 保留

MPYC 位0 乘法器的進位標志如果未選擇小數(shù)模式或飽和模式時可以被看作是第

33或65位結(jié)果,因為當切換到小數(shù)模式或飽和模式時MPYC位不改變。

舉例:

例如 配置 8 * 8 無符號累加硬件乘法

MPY = 0x12; //第一操作數(shù)

OP2 = 0x56; // 第二操作數(shù)

MAC = 0x12; // 16 位累加乘法器

OP2 = 0x56;

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 寄存器
    +關注

    關注

    31

    文章

    5359

    瀏覽量

    120816
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10890

    瀏覽量

    212429
  • 乘法器
    +關注

    關注

    8

    文章

    206

    瀏覽量

    37133

原文標題:MSP430F5438 硬件乘法器

文章出處:【微信號:changxuemcu,微信公眾號:暢學單片機】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關推薦

    對ADS1258進行配置,對某一個寄存器指令,為什么寫進去的和回來的不一樣?

    現(xiàn)在對ADS1258進行配置,對某一個寄存器指令,然后再次回來這個寄存器的值,為什么寫進
    發(fā)表于 01-13 06:13

    ADS1243可否直接對MUX寄存器進行操作?

    1)在沒有對ADS1243進行初始化前,ADS1243上電復位后,我MUX寄存器讀出的數(shù)據(jù)是0XBE,不是默認值0X01,可否直接對MUX寄存器
    發(fā)表于 12-06 07:20

    通用寄存器是什么意思

    在計算機體系結(jié)構中,通用寄存器是中央處理CPU)內(nèi)部最為核心和基礎的組成部分之一。它們被設計為能夠存儲和傳輸各種類型的數(shù)據(jù)和指令,是CPU
    的頭像 發(fā)表于 09-05 14:13 ?1112次閱讀

    寄存器的類型和作用

    在計算機科學中,寄存器(Register)是一種高速存儲單元,它位于CPU內(nèi)部,與CPU的運算單元和邏輯控制單元緊密相連。寄存器的主要作用是暫時存儲
    的頭像 發(fā)表于 09-05 14:11 ?2309次閱讀

    寄存器是什么意思?寄存器是如何構成的?

    在計算機科學中,寄存器(Register)是一個高速存儲單元,它位于中央處理CPU)內(nèi)部,用于存儲計算機程序執(zhí)行過程中所需要的數(shù)據(jù)、指令地址
    的頭像 發(fā)表于 08-02 18:23 ?4609次閱讀
    <b class='flag-5'>寄存器</b>是什么意思?<b class='flag-5'>寄存器</b>是如何構成的?

    寄存器尋址和直接尋址的區(qū)別

    。 一、寄存器尋址 寄存器尋址的定義 寄存器尋址是一種將操作數(shù)直接存儲在CPU內(nèi)部寄存器中的尋址
    的頭像 發(fā)表于 07-12 10:42 ?2161次閱讀

    寄存器尋址的實現(xiàn)方式

    在計算機體系結(jié)構中,寄存器尋址是一種常見的尋址方式,它允許程序直接訪問CPU內(nèi)部的寄存器。寄存器尋址可以提高程序的執(zhí)行效率,因為它避免了對內(nèi)
    的頭像 發(fā)表于 07-12 10:36 ?765次閱讀

    寄存器有哪幾種?可以實現(xiàn)什么功能?

    寄存器是計算機中最基本的寄存器類型,用于存儲數(shù)據(jù)和指令。它們通常具有相同的大小和功能,可以用于執(zhí)行各種操作。通用
    的頭像 發(fā)表于 07-12 10:32 ?1308次閱讀

    寄存器分為基本寄存器和什么兩種

    ,它們用于存儲指令、數(shù)據(jù)和地址等信息?;?b class='flag-5'>寄存器的容量通常較小,但訪問速度非??欤驗樗鼈兣cCPU的執(zhí)行單元緊密相連。 基本寄存器的分類 基本寄存器
    的頭像 發(fā)表于 07-12 10:31 ?1530次閱讀

    CPU寄存器的用途

    在計算機體系結(jié)構中,中央處理單元(CPU)無疑是整個系統(tǒng)的核心。CPU負責執(zhí)行指令、處理數(shù)據(jù)、控制計算機系統(tǒng)的運行等關鍵任務。而在這個過程中,寄存器扮演著至關重要的角色。本文將詳細探討
    的頭像 發(fā)表于 05-30 17:09 ?1533次閱讀

    寄存器的定義和功能 寄存器的分類和工作原理

    在計算機系統(tǒng)中,寄存器作為一種特殊的存儲設備,扮演著至關重要的角色。它是中央處理CPU)內(nèi)部的重要組成部分,用于暫時存儲數(shù)據(jù)和指令,以便于CPU
    的頭像 發(fā)表于 05-12 17:07 ?5871次閱讀

    干貨滿滿:ARM的內(nèi)核寄存器講解

    內(nèi)核寄存器與外設寄存器: 內(nèi)核寄存器與外設寄存器是完全不同的概念。內(nèi)核寄存器是指 CPU 內(nèi)部的
    發(fā)表于 04-17 11:47 ?4059次閱讀
    干貨滿滿:ARM的內(nèi)核<b class='flag-5'>寄存器</b>講解

    AFE模擬前端寄存器讀取操作

    AFE模擬前端寄存器讀取操作是電子系統(tǒng)設計和調(diào)試中不可或缺的一環(huán)。寄存器作為AFE模擬前端中的重要組成部分,存儲各種配置參數(shù)和狀態(tài)信息,通過
    的頭像 發(fā)表于 03-15 15:50 ?753次閱讀

    loop指令執(zhí)行時,隱含的寄存器

    當執(zhí)行l(wèi)oop指令時,隱含的寄存器是CX寄存器。CX寄存器是循環(huán)計數(shù)寄存器,它存儲了循環(huán)的迭代
    的頭像 發(fā)表于 02-14 16:15 ?1010次閱讀

    CPU的6個主要寄存器

    CPU寄存器是中央處理內(nèi)的組成部分,是有限存貯容量的高速存貯部件。寄存器CPU內(nèi)部的元件,包括通用
    的頭像 發(fā)表于 02-03 15:15 ?4615次閱讀