日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > > 嵌入式微處理器
[導(dǎo)讀]本文最初完成于幾年之前,彼時(shí)作者正在 ARM 公司擔(dān)任執(zhí)行核心驗(yàn)證工程師職位。作者當(dāng)時(shí)的工作深入或圍繞多種處理器核心,而文中提到的觀點(diǎn)深受這些經(jīng)驗(yàn)的影響,換句話說,這些觀點(diǎn)存在不同程度的偏見。

前言

本文最初完成于幾年之前,彼時(shí)作者正在 ARM 公司擔(dān)任執(zhí)行核心驗(yàn)證工程師職位。作者當(dāng)時(shí)的工作深入或圍繞多種處理器核心,而文中提到的觀點(diǎn)深受這些經(jīng)驗(yàn)的影響,換句話說,這些觀點(diǎn)存在不同程度的偏見。


作者依舊堅(jiān)持認(rèn)為 RISC-V 的設(shè)計(jì)并不完美,但同時(shí)也承認(rèn),如果現(xiàn)在需要搭建一個(gè) 32 或 64 ?位的 CPU,他在實(shí)現(xiàn)構(gòu)建時(shí)也會(huì)從現(xiàn)有工具中受益。?


本文主要基于 RISC-V ISA 規(guī)范 v2.0,部分已更新至 v2.2。





一些觀點(diǎn)





RISC-V ISA 對極簡主義的追求鉆了牛角尖,它極力強(qiáng)調(diào)減少指令數(shù)量,規(guī)范編碼等等。而這種追求則導(dǎo)致了錯(cuò)誤的正交性(分支、調(diào)用、返回時(shí)重復(fù)使用同一指令),以及對贅余指令的需求,這些在程序大小和指令數(shù)量上都會(huì)影響到代碼密度。



以下面的 C 代碼為例:

int readidx(int *p, size_t idx){ return p[idx]; }


簡單的數(shù)組索引,非常常見的操作。將其在 x86_64 中編譯:

mov eax, [rdi+rsi*4]ret


或者是 ARM 中:

ldr r0, [r0, r1, lsl #2]bx lr // return


但是在 RISC-V 中需要的代碼則是:

# 很抱歉如果有任何語法錯(cuò)誤,risc-v 并沒有在線編譯器slli a1, a1, 2add a0, a1, a1lw a0, a0, 0jalr r0, r1, 0 // return


RISC-V 的極簡主義讓解碼器(CPU 前端)變得更簡單,代價(jià)則是需要執(zhí)行更多的指令。然而,相對于拓寬流水線這個(gè)難題而言,解碼不規(guī)則指令的問題很好解決,主要難點(diǎn)在于確定指令的長度是否一致。x86 的眾多前綴就是個(gè)極佳的反面教材。對指令集的簡化不應(yīng)追求極限。寄存器 + 移位寄存器的內(nèi)存操作指令是程序中非常常見且簡單的操作,對于 CPU 而言也很容易實(shí)現(xiàn)。即使無法直接執(zhí)行,CPU 也可以相對輕松地將其分步執(zhí)行,其操作復(fù)雜程度遠(yuǎn)遜色于融合簡單操作的序列。


CISC CPU 中的“復(fù)合”指令,繁復(fù)、少有使用且普遍性能低下,而 CISC 和 RISC CPU 通用的“功能”指令則意指結(jié)合了少量操作序列并且使用率高、性能高的指令。這二者應(yīng)當(dāng)有所區(qū)分。





還不錯(cuò)的部分





幾乎不受任何限制的可擴(kuò)展性。雖說這是 RISC-V 的賣點(diǎn),但它同時(shí)也是碎片化、不兼容生態(tài)系統(tǒng)的罪魁禍?zhǔn)?,在管理時(shí)還需加倍小心。


調(diào)用、返回和寄存器間接分支使用同一指令(JALR)。分支預(yù)測需要額外解碼。


  • 調(diào)用:Rd = R1

  • 返回:Rd = R0, Rs =R1

  • 間接分支: Rd = R0, Rs≠ R1

  • (奇怪分支:Rd≠ R0, Rd ≠ R1)


可變長度編碼無法自我同步。x86 和 Thumb-2 中都存在的常見問題,會(huì)導(dǎo)致實(shí)現(xiàn)和安全性方面的各種漏洞,例如面向返回的編程攻擊。


RV64I 規(guī)定所有 32 位值的符號(hào)擴(kuò)展。這一點(diǎn)會(huì)導(dǎo)致不必要的上半切換,或者需要對寄存器的上半部分進(jìn)行特殊調(diào)整。建議采用零擴(kuò)展,在減少切換的同時(shí),通常還可以在已知上半部分為零的情況下,通過追蹤”為零“位來進(jìn)行優(yōu)化。


乘法是可選項(xiàng)??紤]到高速乘法器在微型實(shí)現(xiàn)中占用的面積不容忽視,創(chuàng)建占用更小,還可以將現(xiàn)有 ALU 廣泛用于多循環(huán)乘法的小型乘法器不失為良策。


LR/SC 指令對有限使用子集有嚴(yán)格的最終轉(zhuǎn)發(fā)要求。盡管這項(xiàng)限制頗為嚴(yán)苛,但對于沒有緩存的小型實(shí)現(xiàn)而言有可能會(huì)帶來一些問題。


這一點(diǎn)似乎是 CAS 指令的替代品,具體請參照有關(guān)該指令的注釋。


FP 粘性位和舍入模式處于同一寄存器中。如果想通過執(zhí)行 RMW 操作改變舍入模式,則需要對 FP 管道進(jìn)行序列化。


FP 指令支持的編碼精度有 32 位、64 位和 128 位,唯獨(dú)沒有硬件中更為常見的 16 位。

這點(diǎn)很容易修正:我們有免費(fèi)的字組編碼 2’b10。


更新:v2.2 中添加了十進(jìn)制 FP 擴(kuò)展占位符,但仍然沒有半精度占位符。迷惑行為。


FP 寄存器文件中的 FP 值未指定,但可以通過加載 / 存儲(chǔ)觀察到。


仿真器作者要恨死你了。


VM 遷移會(huì)將變?yōu)椴豢赡堋?/span>


更新:v2.2 需要 NaN 裝箱更寬的值。





糟糕的部分





沒有條件代碼,只有比較和分支指令。這一點(diǎn)自身沒什么問題,但它意味著:需要編碼一到二個(gè)寄存器說明符,導(dǎo)致條件分支中的編碼空間減少。


沒有條件選擇,這一點(diǎn)在高度不可預(yù)測的分支中很有用。


加法 / 減法沒有加進(jìn)位或借位。(即使這樣,這也比 ISA 將 flag 寫入通用寄存器 GPR,然后在結(jié)果 flag 上分支要好。)



用戶級(jí) ISA 需要高精度計(jì)數(shù)器。在實(shí)踐中,將這些計(jì)數(shù)器暴露給應(yīng)用程序意味著側(cè)通道攻擊的好機(jī)會(huì)。


乘法和除法同屬于一個(gè)擴(kuò)展,無法單獨(dú)實(shí)現(xiàn)其中之一。相比除法,乘法要簡單許多,而且在大多的 CPU 上很常見。


基礎(chǔ) ISA 中沒有原子指令。多核微型處理器越來越普遍的今天,LL/SC 類型原子指令也越來越廉價(jià):只需要 1 位 CPU 狀態(tài)即可完成最小 CPU 實(shí)現(xiàn)。


LR/SC 和更復(fù)雜的原子指令同屬于一個(gè)擴(kuò)展。直接限制了小型實(shí)現(xiàn)的靈活性。


? 非 LR/SC 的一般原子指令不包含 CAS 原語


CAS 的設(shè)計(jì)是為了避免需要一條指令讀取 5 個(gè)寄存器的情況,例如:加法器、Cmp:CmpLo,SwapHi:SwapLo。但 LR/SC 用于取代 CAS 的保底進(jìn)度很可能只會(huì)在實(shí)現(xiàn)上帶來更高的開銷。


原子指令僅支持 32 位或 64 位操作,不支持 8 位或 16 位。


對 RV32I 而言,想在整數(shù)和浮點(diǎn)寄存器文件之間轉(zhuǎn)換 DP 和 FP,只能通過內(nèi)存解決。


舉例來說:RV32I 的 32 位 ADD 和 RV64I 的 64 位 ADD 共用同一套編碼,RV64I 又多加了一套 ADD.W 編碼。如此一來,CPU 實(shí)現(xiàn)這兩種指令時(shí)麻煩了許多,不如直接新增一套 64 位編碼。


沒有 MOV 指令。匯編器對于 MV 的等效指令是:MV rD, rS -> ADD rD, rS, 0。MOV 優(yōu)化通常由高端處理器,尤其是失序處理器完成。識(shí)別 RISC-V 規(guī)范的 MV 需要一個(gè) 12 位的立即數(shù)。


在沒有 MOV 指令的情況下,ADD rD, rS, r0 是對 MOV 不錯(cuò)的替代。它更易被解碼,而 CPU 通常也會(huì)有特殊情況下的邏輯來識(shí)別零寄存器。





尤為糟糕的部分





JAL 在本該只是 R1(分支時(shí)是 R0)的鏈接寄存器編碼上浪費(fèi)了 5 比特。


這意味著 RV32I 有 21 位的分支位移(對于諸如瀏覽器等大型應(yīng)用時(shí),不使用多指令序列或者分支 island 時(shí)會(huì)不夠用)。



? 其實(shí)是 1.0 版本 ISA 的歷史遺留問題


盡管 RISC-V 在統(tǒng)一編碼上花了大功夫,但加載 / 存儲(chǔ)指令的編碼仍然是不同的(寄存器 vs 立即字段互換)。


似乎寄存器編碼的最終正交性要比兩種高度相關(guān)指令的正交性更受歡迎。考慮到地址生成是對時(shí)序更為敏感的操作,這種選擇有點(diǎn)奇怪。


寄存器偏移量(Rbase +Roffset)或索引(Rbase + Rindex << Scale)沒有負(fù)載。


FENCE.I 意味著指令緩存和前面的存儲(chǔ)區(qū)必須完全同步,無論是否有 fence。實(shí)現(xiàn)時(shí)需要在 fence 上刷新 I,或者通過snoop的方式監(jiān)視D 和存儲(chǔ)緩存區(qū)。


RV32I 中,讀取 64 位計(jì)數(shù)器需讀取上半部分兩次,并進(jìn)行比較和分支,以防在讀取操作時(shí)下半部分和上半部分發(fā)生借位。


通常 32 位 ISA 包含了一個(gè)“讀取一對特殊寄存器”的指令來避免這個(gè)問題。


架構(gòu)上沒有定義“提示”編碼空間。提示編碼是指在當(dāng)前處理器上作為 NOP 執(zhí)行,但在之后的變量上有操作的編碼。


“NOP 提示”的常見例子是自旋鎖 yield。


更復(fù)雜的提示也有實(shí)現(xiàn)。即那些對新處理器有明顯副作用的提示,例如 x86 的邊界檢查指令被編碼在提示空間,以便二進(jìn)制文件保持向后兼容。


原文地址

https://gist.github.com/erincandescent/8a10eeeea1918ee4f9d9982f7618ef68


本文轉(zhuǎn)自InfoQ中文站,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系刪除

首發(fā)地址:

https://www.infoq.cn/article/qp5c2tUjk88zE2EipZuE


END

來源:InfoQ中文站

版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。

推薦閱讀

成功為華為“續(xù)命:中國芯片之父張汝京

一個(gè)工程師的“噩夢”:剛分清CPU和GPU,卻發(fā)現(xiàn)還有……

這位“華為天才少年”,竟然要我用“充電寶”打《只狼》


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: 驅(qū)動(dòng)電源

在工業(yè)自動(dòng)化蓬勃發(fā)展的當(dāng)下,工業(yè)電機(jī)作為核心動(dòng)力設(shè)備,其驅(qū)動(dòng)電源的性能直接關(guān)系到整個(gè)系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動(dòng)勢抑制與過流保護(hù)是驅(qū)動(dòng)電源設(shè)計(jì)中至關(guān)重要的兩個(gè)環(huán)節(jié),集成化方案的設(shè)計(jì)成為提升電機(jī)驅(qū)動(dòng)性能的關(guān)鍵。

關(guān)鍵字: 工業(yè)電機(jī) 驅(qū)動(dòng)電源

LED 驅(qū)動(dòng)電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個(gè)照明設(shè)備的使用壽命。然而,在實(shí)際應(yīng)用中,LED 驅(qū)動(dòng)電源易損壞的問題卻十分常見,不僅增加了維護(hù)成本,還影響了用戶體驗(yàn)。要解決這一問題,需從設(shè)計(jì)、生...

關(guān)鍵字: 驅(qū)動(dòng)電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動(dòng)電源的公式,電感內(nèi)電流波動(dòng)大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關(guān)鍵字: LED 設(shè)計(jì) 驅(qū)動(dòng)電源

電動(dòng)汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動(dòng)汽車的核心技術(shù)之一是電機(jī)驅(qū)動(dòng)控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機(jī)驅(qū)動(dòng)系統(tǒng)中的關(guān)鍵元件,其性能直接影響到電動(dòng)汽車的動(dòng)力性能和...

關(guān)鍵字: 電動(dòng)汽車 新能源 驅(qū)動(dòng)電源

在現(xiàn)代城市建設(shè)中,街道及停車場照明作為基礎(chǔ)設(shè)施的重要組成部分,其質(zhì)量和效率直接關(guān)系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進(jìn)步,高亮度白光發(fā)光二極管(LED)因其獨(dú)特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關(guān)鍵字: 發(fā)光二極管 驅(qū)動(dòng)電源 LED

LED通用照明設(shè)計(jì)工程師會(huì)遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關(guān)鍵字: LED 驅(qū)動(dòng)電源 功率因數(shù)校正

在LED照明技術(shù)日益普及的今天,LED驅(qū)動(dòng)電源的電磁干擾(EMI)問題成為了一個(gè)不可忽視的挑戰(zhàn)。電磁干擾不僅會(huì)影響LED燈具的正常工作,還可能對周圍電子設(shè)備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關(guān)鍵字: LED照明技術(shù) 電磁干擾 驅(qū)動(dòng)電源

開關(guān)電源具有效率高的特性,而且開關(guān)電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機(jī)重量也有所下降,所以,現(xiàn)在的LED驅(qū)動(dòng)電源

關(guān)鍵字: LED 驅(qū)動(dòng)電源 開關(guān)電源

LED驅(qū)動(dòng)電源是把電源供應(yīng)轉(zhuǎn)換為特定的電壓電流以驅(qū)動(dòng)LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動(dòng)電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關(guān)鍵字: LED 隧道燈 驅(qū)動(dòng)電源
關(guān)閉