国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

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

2oON_changxuemc ? 來源:未知 ? 作者:李倩 ? 2018-09-30 10:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

硬件乘法器特點:

○無符號乘法;

○ 有符號乘法;

○ 無符號乘加操作;

○ 由符號乘加操作;

○ 8 位,16 位,24 位,和 32 位操作數;

○ 整數乘法

○ 小數乘法

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

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

硬件乘法器結構圖:

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

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

硬件乘法器操作:

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

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

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

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

操作數寄存器OP1 :

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

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

操作數寄存器OP2:

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

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

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

注意:

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

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

結果寄存器:

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

備注:

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

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

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

MPYC 位通常反映了乘法器的 Carry,而這也列在表中。因而,將會反映在第 33 位或者第 65 位的結果中。當然,前提是小數模式,和連續模式沒有被選擇.

MACS 下溢出和溢出:

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

下溢出出現時兩個負操作數的相加的計算結果范圍在正數范圍內。

當兩個正操作數相加的結果為負數時,溢出的結果出現!

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

乘法控制寄存器:

Reserved 位 15-10 保留

MPYDL32 位 9 延時寫模式

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

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

MPYDLYWRTEN 位 8 延時寫使能

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

0 寫是不延時

1 寫是延時的

MPYOP2_32 位7 乘法器操作數2的位寬度

0 16位

1 32位

MPYOP1_32 位6 乘法器操作數1的位寬度

0 16位

1 32位

MPYMx 位5-4 乘法器模式

00 MPY 乘法

01 MPYS 有符號乘法

10 MAC 乘法積累

11 MACS 有符號乘法積累

MPYSA 位3 飽和模式

MPYFRAC 位2 小數模式

Reserved 位1 保留

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

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

舉例:

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

MPY = 0x12; //第一操作數

OP2 = 0x56; // 第二操作數

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

OP2 = 0x56;

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

    關注

    31

    文章

    5608

    瀏覽量

    129980
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11279

    瀏覽量

    224982
  • 乘法器
    +關注

    關注

    9

    文章

    221

    瀏覽量

    38807

原文標題:MSP430F5438 硬件乘法器

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    用戶對變量寄存器進行操作的方法

    嵌入式系統總是要用戶對變量寄存器進行操作。給定一個整型變量a,寫兩段代碼,第一個設置a的bit 3,第二個清除a 的bit 3。在以上兩個操作
    發表于 12-23 08:16

    匯編寄存器的知識

    學習匯編語言,首先必須了解兩個知識點:寄存器和內存模型。 先來看寄存器CPU 本身只負責運算,不負責儲存數據。數據一般都儲存在內存之中,CPU
    發表于 11-20 06:45

    嵌入式系統必懂的 20 個寄存器

    嵌入式開發看起來很復雜,但很多操作其實都離不開寄存器寄存器就是MCU內部的存儲單元,它們控制處理和外設的行為。熟悉這些
    的頭像 發表于 11-14 10:28 ?1101次閱讀
    嵌入式系統必懂的 20 個<b class='flag-5'>寄存器</b>

    簡單的內聯匯編介紹

    前言1、在程序中我們可以嵌入匯編直接對我們加入的硬件進行相應的操作 2、在RISC-V架構中定義的CSR
    發表于 10-30 08:04

    RISC-V的工具鏈GCC內聯匯編

    GCC內聯匯編語法規則如下: asmvolatile( 匯編指令列表 :輸出操作數 :輸入操作數 :可能影響的
    發表于 10-30 06:59

    計算程序執行指令數的函數實現

    (來源:手把手教你設計cpu_RISC-V處理),他們分別存儲了指令計數器的高低32位 至此就大致能理解指令數計算函數的實現原理,即通過
    發表于 10-28 06:27

    指令集測試的一種糾錯方法

    ,第三部分代表指令的具體操作。由此可以解讀出,上圖test_2所做的工作是,1.將立即數20加載到ra寄存器2.將立即數6加載到sp
    發表于 10-24 14:04

    蜂鳥自定義指令軟件講解和內聯匯編(一)

    ”是 GCC 的關鍵字,表示進行內聯匯編操作,關鍵字“volatile”要求編譯對后續括號內添加的匯編程序不
    發表于 10-24 10:51

    蜂鳥E203擴展浮點指令設計(1)

    , offset[11:0] (rs1) fsw rs2, offset[11:0] (rs1) 該組指令進行存儲或者寫操作,訪問存儲
    發表于 10-24 10:00

    蜂鳥內核中DMA的硬件實現——寄存器配置

    ,指示搬運的數據長度,可讀可寫; 狀態寄存器,只讀,指示配置完成,搬運完成等。 當CPU對DMA進行配置時會拉高valid信號,此時如果DMA發出ready的高電平信號,即此時握手完成,才可以
    發表于 10-24 08:46

    浮點指令(七:寄存器

    )。舍入模式可以通過浮點控制和狀態寄存器 fcsr 進行設置。 Risc-V架構浮點運算的舍入模式可以
    發表于 10-24 08:28

    通過內聯匯編調用乘法指令mulh\\mulhsu\\mulhu

    必需 :可能影響的寄存器存儲//非必需 ); 對于常見的R型指令匯編指令列表,即.i
    發表于 10-24 06:52

    蜂鳥乘法器設計分享

    與其他指令復用一個加法器。 對于具體的乘法指令而言,包括MUL指令、MULH指令、MULHSU指令
    發表于 10-22 08:21

    改進型乘法器結構設計

    表示源寄存器。4條乘法指令分別按符號擴展操作和結果高低位選取操作生成相應的控制信號,MULHU指令
    發表于 10-22 07:51

    基于蜂鳥E203架構的指令集K擴展

    擴展指令集架構(RISC-V ISA)的K擴展。 K擴展是一種可選的指令集擴展,它增加了一些向量和矩陣操作指令。這些指令
    發表于 10-21 09:38