RISC-V雙週簡報0x21:國內RISC-V上下游企業成立產業聯盟(2018-09-30)
layout: default
RISC-V 雙週簡報 (2018-09-30)
要點新聞:
- 國內RISC-V上下游廠商在滬成立產業聯盟
- 採用RISC-V等技術構建的自由的GPU專案
RV新聞
國內RISC-V上下游廠商在滬成立產業聯盟
在上海市政府的積極推動和Verisilicon的牽頭下,眾多國內RISC-V的上下游廠商在上海成立發起了中國RISC-V產業聯盟(China RISC-V Industry Consorium),簡稱CRVIC。與此同時,上海市積體電路行業下屬的RISC-V專家委員會也同時成立。
點評:上海市是國內首個公開支援RISC-V發展的地方政府,目前正在多個層面積極的推動國內RISC-V生態的發展。CRVIC希望能夠聯合相關半導體企業及其上下游企業,共同推進RISC-V生態在國內的發展。而專家委員為也將作為政府和企業溝通的橋樑,共同推進整個上下游產業鏈的發展。
技術討論
RISC-V如何載入一個立即數
這個看似不起眼的問題實際上有些複雜。lui
指令可以將20位的立即數載入到目標暫存器的高20位,通過與其他的I型指令或S型指令組合可以載入一個32位的立即數或讀寫某地址上的內容。
但是在riscv-elf-psabi-doc中的Absolute Addresses
一小節中有這樣的一段描述:
32-bit absolute addresses in position dependent code are loaded with a pair of instructions which have an associated pair of relocations:
R_RISCV_HI20
plusR_RISCV_LO12_I
orR_RISCV_LO12_S
.The
R_RISCV_HI20
refers to anLUI
instruction containing the high 20-bits to be relocated to an absolute symbol address. TheLUI
instruction is followed by an I-Type instruction (add immediate or load) with anR_RISCV_LO12_I
relocation or an S-Type instruction (store) and anR_RISCV_LO12_S
relocation. The addresses for pair of relocations are calculated like this:
hi20 = ((symbol_address + 0x800) >> 12);
lo12 = symbol_address - (hi20 << 12);
The following assembly and relocations show loading an absolute address:
lui a0,%hi(symbol) # R_RISCV_HI20 (symbol) addi a0,a0,%lo(symbol) # R_RISCV_LO12 (symbol)
注意到hi20
在計算中加上了0x800
。按照一般的思路,lui
載入高20位,addi
正好可以補充低12位。然而addi
進行的有符號加法,如果imm
的最高位為1
,那麼addi
將會認為它是一個負數。
+0x800
的目的是如果立即數的第11位(最低位為第0位)是1,那麼就對高20位+1進行補償,這樣計算得到的lo12
正好是帶符號的。為了更好地理解這一過程,有如下推導:
設32位的立即數由hi
和lo
拼接組成,分別為20位和12位,即imm=hi·lo
如果lo
的最高位為0,則hi20=(imm+0x800)>>12=hi
,lo12=imm-(hi20<<12)=imm-(hi<<12)=lo
此時載入的指令序列即為
lui a0,hi
addi a0,a0,lo
如果lo
的最高位為1,則hi20=(imm+0x800)>>12=hi+1
,
lo12=imm-(hi20<<12)=imm-((hi+1)<<12)=hi·lo-((hi+1)·{12'b0})={20'b1}·lo
此時載入的指令序列為
lui a0,hi+1
addi a0,a0,lo
由於lo
的最高位為1,因此此時lo
被視作一個負數,即{20'b1}·lo
,而高20位在原來的基礎上增加了1,正好可以將lo12
的高20位{20'b1}
抵消。
作者:John Wang
如何建立 RISCV Linux 核心 BBL 映象
Pintu Kumar 用 riscv-64 linux 工具鏈構建 riscv-linux 只能得到 vmlinux 映象,沒有 ZImage/Image 等等。但使用 qemu 啟動 linux 核心需要 BBL 核心映象。那如何自己建立一個核心 BBL 映象而不是用 riscv-pk 工具呢?
Jim Wilson 解釋道,linux 核心執行在 supervisor 模式,BBL 執行在 machine 模式,為 linux 核心提供服務,因此執行 linux 核心不能沒有 BBL。還有一個單獨分開對待的問題,就是啟動(booting)。目前大多數的 boot loaders 只能載入一個映象,因此 bbl 和 核心必須連結在一起。Qemu 對分開載入 BBL 和 核心有一些支援。
Pintu Kumar 還有疑惑,1)只有 riscv-qemu 需要 BBL 呢?還是真實的硬體也需要?2)對於 RISCV,為什麼不能像 arm/arm64 一樣有 zImage 或 Image ?3)建立 BBL 的方法,首先建立 vmlinux-stripped ,作為 riscv-pk 的輸入建立 BBL 映象。因此,必須依賴 riscv-pk 才能構建最終的核心映象。怎麼樣才能擺脫這個依賴呢?
Jim Wilson 回覆了這些問題,1)都需要,linux 核心依賴 BBL 提供的服務;2)因為還沒有人做這些支援, RISC-V 還很年輕,沒有擁有成熟的那些特性;3)必須依賴 BBL,但不一定需要把它和核心連結在一起。可以寫一個分開載入它們的 bootloader,或者使用足夠新的 qemu 能夠分別載入它們。把它們連結在一起是過去的方式,也是目前大多數人仍使用的方式。(編者注:riscv-pk 應該是把核心映象和 BBL 連結在一起,所以 Pintku Kumar 誤以為 rissv-pk 是需要核心映象才能建立 BBL)。
Michael Clark 覺得仍需要 BBL。在逐步細化 啟動(boot)標準的過程中,BBL 可以作為相容的參考實現,也是 SBI 的參考實現。在新增新的特性也需要考慮方方面面,也需要公開討論,小心行事。
可以考慮的解決方案有用啟動服務 API 去載入檔案(例如 UEFI,GPT 和 GUIDS),或者讓 bootloader 有檔案系統和驅動(u-boot,grub)。如果是自己做晶片可以隨便替換韌體,想怎麼做都可以。理想情況是,不會像 ARM 啟動方式那樣混雜了每家廠商自己的 boot loader 和韌體認證機制。概念上,UEFI 安全啟動的方式更好,廠商可以自行擴充套件。
程式碼更新
採用RISC-V等技術構建的自由的GPU專案
Luke Kenneth Casson Leighton是一名開源硬體工程師,而且是Crowdsupply上EOMA68專案的發起者。他發起了一個開源的GPU的專案,並且生成已經得到一筆25萬美金的資金用於這個專案。這個專案最初將專注在軟體方面,基於RISC-V用軟體方法來構建一個GPU,同時基於LLVM和Rust在使用者空間建立一個基於Vulkan API的driver。同時作者也提出了一套新的RISC-V指令擴充套件“Simple-V”用於這個專案。
long story, there’s a new project underway which is to create a 3D GPU (and associated complete processor) entirely as a libre project, using RISC-V as the basis. there’s a lot to get done: the roadmap is quite straightforward: http://libre-riscv.org/3d_gpu/roadmap/
it’ll be a vulkan3d software driver written in rust and using llvm. where and if absolutely strictly necessary intrinsic inline assembler will be placed into the rust code: for the rest it will be straight to llvm, and from there using a hardware-level parallelism API called “SimpleV” which will take care of, at the hardware level, a variable-length “vectorisation” aka variable-size SIMD (which is a really really misleading way to describe it but SIMD and vectorisation is what most people know).
for the most part this is a software project not a hardware one so if anyone has software engineering skills, documentation skills or anything else, do get in touch.
Links:
安全點評
記憶體、程式碼和指標的已有安全技術蒐集
Arm的指標加密技術(PA, Pointer Authentication)隨著蘋果 iOS 12 進入了產品使用階段, 加上最近ARM宣佈 在其Armv8.5-A中使用記憶體標籤技術和跳轉目標限定(BTI, Branch Target Indicator)技術, 促使Michael Clark在isa-dev列表上總結關於記憶體、程式碼和指標的已有安全技術(prior art), 希望能在將來制定一個非商業保護的開放安全標準。 討論中談及了以下幾個方向:
-
動態二級制轉譯(Dynamic binary translation)是虛擬技術的一種,通過動態翻譯並執行二進位制程式碼實現不同指令集編譯的程式在其他架構上的執行,執行時優化等等功能。如果動態二級制轉譯工具可以在轉譯時隨機化程式碼中的記憶體分佈、程式碼塊分佈、暫存器分配、系統呼叫表分佈等等,則可以進一步加擾被執行的程式碼,從而給執行時攻擊增加難度。不過,也有研究認為,即使沒有任何的靜態分析支援,僅通過執行時的程式碼分析,也能夠完成攻擊,被稱為盲攻擊(Blind ROP Attack)。
-
和二進位制轉譯時隨機化類似,二進位制程式碼混淆一般依賴於編譯器,對二進位制程式碼進行隨機化。可隨機化的內容包括指令本身、程式碼分佈、資料分佈、堆結構等等。
-
控制流劫持攻擊往往需要修改程式碼指標或者和程式碼指標相關的資料指標。通過對這些關鍵指標進行加密,然後在使用指標(dereference)時檢查指標是否能正確解密,來防止攻擊者篡改指標,從而阻止攻擊。
-
很多安全措施都需要標註與安全相關的指標。在64位機器中,指標往往只佔用39位或48位的低位空間,剩下來的16到25位的高位空間往往不是全0就是全1。通過將安全所需的附加資料存放於這些沒有使用的高位中,則可以在不增加儲存的情況下擴充套件安全措施。不過,RISC-V現在並沒有計劃將類似方案加入到指令集中(見2016年9月的相關討論)。主要的顧慮來自於該方案的可擴充套件性。即使現在普遍認為48位定址已經足夠大(256TB),將來還是會有更大的定址要求,比如說記憶體和儲存統一定址的計算機叢集或者稀疏定址(sparse address)。如果將48位定址的高16位定義為安全metadata資料,在將來支援56位定址的時候,地址位則和安全metadata重疊,產生不相容問題。
當然,以上幾點只是在郵件列表中被提及的技術,並不能完全囊括所有的相關安全技術。其他常見的安全措施包括強制CFI、影子棧、邊界檢查、指令加密等等。
市場相關
AndesTech釋出了支援浮點和虛擬記憶體支援的RISC-V核
在釋出了N25和NX25一年後,AndesTech最近宣稱已經可以支援浮點計算和虛擬記憶體。
相比於Cortex-M7和Cortex-A7在Whetstone-MIPS/MHz測試基準下N25和NX25能夠提供兩倍與前者的效能。
The N25F and and NX25F have twice the performance of the Cortex-M7 and Cortex-A7, as measured in Whetstone-MIPS per MHz, said Charlie Su, CTO of Andes. In addition support has been brought in for misaligned memory accesses in hardware, which is good for porting existing software from ARM and x86. Without it more than 100 cycles can be needed in the exception handler.
而相比於其他RISC-V和,Charlie也聲明瞭其自身優勢。
Su also claimed that Andes has significant advantages over other RISC-V IP licensors. These include superior human-readable RTL code that is configurable by customers. This delivers 20 percent higher performance and 12 percent smaller code size than Rocket, the University of California Berkeley designed processor that is the base of Si-Five CPUs, Su said.
暴走事件
2018年10月
- 2018年10月18日, RISC-V Day Tokyo將在Keio University舉辦,大會議程已經公佈。註冊網站
2018年12月
招聘簡訊
CNRV提供為行業公司提供公益性質的一句話的招聘資訊釋出,若有任何體系結構、IC設計、軟體開發的招聘資訊,歡迎聯絡我們!
整理編集: 宋威、黃柏瑋、汪平、林容威、傅煒、巍巍、郭雄飛、黃瑋、李健
特別感謝: John Wang
歡迎關注微信公眾號CNRV,接收最新最時尚的RISC-V訊息!