1. 程式人生 > >RISC-V雙週簡報0x1e:RISC-V新創企業擬融資上億元(2018-08-17)

RISC-V雙週簡報0x1e:RISC-V新創企業擬融資上億元(2018-08-17)

RISC-V 雙週簡報 (2018-08-17)

要點新聞:

  • RISC-V新創企業擬融資上億元
  • CNRV-FPU和lowRISC程式碼更新

CNRV社群活動

Chisel/Rocket-chip/RISC-V線下交流會

由SiFive和CNRV一起舉辦的這場線下交流會,將會邀請SiFive和U.C. Berkeley的Krste教授和SiFive的CTO Yunsup Lee博士。同時也會有國內其他的一些Chisel愛好者分享他們的一些使用經驗。

希望這次活動能做為一個良好的起點和開端,和大家一起探討對於Chisel等一些相關技術在專案中如何實踐和落地的問題

另外,首屆Chisel Community Conference也將在11月在灣區舉辦,詳見下面暴走事件

一欄。

RV新聞

SiFive釋出基於RISC-V的整合了NVDLA的深度學習SoC平臺

SiFive在今年的Hot Chips大會上展示了其U540通過Chiplink和在FPGA上的NVDLA連線的SoC平臺。

The demo will be shown this week at the Hot Chips conference and consists of NVDLA running on an FPGA connected via ChipLink to SiFive’s HiFive Unleashed board powered by the Freedom U540, the world’s first Linux-capable RISC-V processor. The complete SiFive implementation is well suited for intelligence at the edge, where high-performance with improved power and area profiles are crucial. SiFive’s silicon design capabilities and innovative business model enables a simplified path to building custom silicon on the RISC-V architecture with NVDLA.

BlueSpec的最新開源RISC-V CPU: Piccolo

BlueSpec最近開源了其用其自家語言BSV實現的一個三級流水線CPU,名叫:Piccolo。當然,因為編譯bsv的工具是商業工具,所以repo中也附帶了已經生成好的Verilog HDL原始檔。這個商業工具可以從BlueSpec購買,而且對於學術使用者是免費的。

同時另一個五級流水線的名為Flute的CPU也準備開源。

BlueSpec聲稱自己的bsv是高度可配置的,可以針對不同的應用進行優化,而且複雜到足夠可以boot起一個Linux(基於sv39 MMU)。

以下是這顆U的介紹。

Features

  • RV32IM ISA
  • 1.9 DMIPS/MHz
  • 100 MHz
  • 3-stage pipeline
  • AXI4-Lite interface
  • < 3000 LUTs
  • 4KB Instruction & Data caches
  • Hardware multiply-divide
  • Hardware-based remote GDB

Benefits

  • Simplification
    • Save considerable time by using a single processor architecture across all semiconductor platforms (Xilinx, Altera, ASIC, …).
  • Innovation
    • Differentiate with your proprietary enhancements and customizations to open source code modified by you or 3rd party RISC-V developers.
  • Control
    • Make product and business decisions independently of proprietary IP companies by owning source code to processor cores.

Links:

技術討論

社群關於RISC-V的工具鏈維護狀況的一些抱怨

Tommy MurphyRISC-V SW Dev提問說, 從https://github.com/riscv/riscv-gnu-toolchain release裡面下載的程式碼做常規的編譯,但是編譯失敗.雖然發現原因是因為維護人員打包是沒有執行git submodule update --init --recursive導致沒有把原始碼完整的打包進去引起的問題。但是從其他也遇到問題的人看,riscv-gnu-toolchain的維護比較混亂,容易讓剛上手RISC-V的人掉進坑裡。

雖然有Andes, SiFive和其他公司以及社群愛好者都開發和維護,但是總的來說還是缺乏人員來做常規穩定的維護和測試。在討論中Jim Wilson也詳細的說明當前的情況和處境。

binutils, gcc, and newlib are fully upstream. Riscv-gcc, riscv-newlib, and the binutils support in riscv-binutils-gdb are occasionally updated to the latest release, and patches backported, but there isn’t anyone actively maintaining these trees.

gdb is partly upstream. The embedded support is there, though SiFive has had some trouble using it, and the problems are being worked out. The linux support is not there. I have a riscv-linux native port in progress, and hope to submit an initial patch set this week to appear in the gdb 8.3 release that should come out around the end of the year. The linux port needs a lot more work to be a fully functional gdb port though. The gdb support in riscv-binutils-gdb is not being updated, as that would break our existing working support.

glibc is partly upstream. The 64-bit support is upstream. The 32-bit support is not. Andes has started working on this, and posted a patch set. The hope is to get this resolved before the next glibc release that should come out around February of next year. riscv-glibc is not being updated, as that would break the working 32-bit support we have in our tree.

qemu is upstream, but has a large patch backlog, as the upstream maintainers are slow to accept patches from new contributors. I think WD has some qemu maintainers that are helping SiFive with the backlog though. riscv-qemu is up to date, and has the backlogged patches applied. Riscv-gnu-toolchain however is using an older version because the 32-bit glibc support does not work with the current qemu. There is a linux kernel/glibc ABI problem with the stat structure that needs to be worked out, and that requires some more linux kernel and glibc work to resolve. Meanwhile, I want riscv-gnu-toolchain to use the old qemu so I can continue to test 32-bit linux binutils and gcc support.

The linux kernel is partly upstream. The core port is there, but not the drivers. The upstream tree is not bootable. I don’t follow linux kernel development, but I think some people from WD are also helping with this, at least to get enough drivers to boot. riscv-linux is up to date, and has all of the drivers required.

I think if you give it another 6 months, we should be fully upstream, and then the best trees to use will all be the upstream ones.

If you want stable supported tools, then there needs to be a group of people responsible for this. Linaro has a small team of people that maintain stable supported tools for ARM EABI and ARM Linux, and another group that maintains a stable supported linux kernel, and another group working on qemu,

riscv-gnu-toolchain現在還有很多不完善的地方,比如gdbserver的支援,現在形同虛設,雖然在嵌入式領域主要是主要是用openocd, 但是隨著RISC-V對linux環境的支援越來越好,基於linux產品越來越多時,gdbserver也是一個非常需要的工具。

RISC-V需要更多熱心的人蔘與,讓RISC-V的生態更加完善。

如何在GCC中新增一條RISC-V指令

最近Jim Wilson在郵件列表中給出了一個非常完整的介紹,講解如何在GCC的相關工具中新增一條RISC-V指令。

  • binutils: 如果只是想在彙編的級別新增一條指令,那麼只需要修改binutils而不用動編譯器本身。 Kito Cheng提供了.insn模板。使用改模板可以全面定製每一條彙編指令。 不過,小修小改的話,直接修改binutils的程式碼可能來的更加方便。 主要來說,需要將指令新增到opcodes/riscv-opc.c中, 將指令的格式新增到include/opcode/riscv-opc.h中, 格式中的各種縮寫符號可以在gas/config/tc-riscv.c的riscv_ip()函式中找到。
  • gcc自動生成: 如果需要讓GCC能自動生成新增的指令,這就會麻煩很多。 如果被新增的指令在一種明確的pattern出現時被使用, 那麼,在gcc/config/riscv/riscv.md中新增該pattern的描述即可。 如果並不存在這種pattern,那麼就需要修改和架構無關或相關的優化步驟,這樣就會比較困難。
  • 有限的資料:關於GCC可以看GCC的網站https://gcc.gnu.org/wiki/GettingStarted#Tutorials.2C_HOWTOs 關於Binutils,可以看https://sourceware.org/binutils/binutils-porting-guide.txt 不過Binutils的這個網站講解不夠詳細。涉及到聯結器優化的話,看這本書(“Linkers and Loaders” by John R Levine)會更好。

更詳細的講解,請參看Jim Wilson的郵件原文: sw-dev

有關 GCC 生成 atomic 程式碼的問題

Roger Ferrer 在使用 riscv64-unknown-linux-gnu GCC 8.1 編譯 atomic 相關的程式碼時發現行為跟他預期的不符。

#include <stdatomic.h>

atomic_int x;
void foo(void) { atomic_fetch_add_explicit(&x, 5, memory_order_acq_rel); }

對於 atomic fetch 和 add, GCC 生成下列指令:

fence iorw,ow; amoadd.w.aq zero,a4,0(a5) 

而不是

amoadd.w.aq zero,a4,0(a5) 

Roger Ferrer 查看了 RISCV 規範也沒發現規定了 atomic 指令之前要加上 IO 的 fence 。

Jim Wilson 猜測是因為 memory model 還在制定中,沒有確定下來,但對應到 C/C++ 的標準定義好了,GCC 超前做了多餘的事情。

更詳細的講解,請參看郵件列表 sw-dev

如何區分"access fault" and “page fault”

有同學提問,如何區分以下的錯誤(Fault)型別?

Instruction access fault -> Instruction page fault
Load access fault -> Load page fault
Store/AMO access fault -> Store/AMO page fault

簡言之,“page” fault只會發生在有虛擬記憶體機制的系統中,通常來說是指具有MMU的系統中。

而access fault可以理解為任何在“匯流排(Bus)”上發生的錯誤,包括但不限於ECC/校驗錯誤、實體記憶體保護、訪問超時等。

隨後討論更加深入到了一個良好的設計的系統需要考慮到的一些細節問題:

  • 當Fault發生的時候,發生的真正原因是否能被良好的追溯(比如CSR的某個暫存器的某個位元)
  • 為了良好的追溯原因,必定會浪費有限的暫存器資源,所以
    • 是否可以通過其他方式將錯誤作為錯誤程式碼返回
    • 或者,將這些錯誤交給上層軟體來處理,比如通過軟體訪問匯流排控制器來獲取真正的錯誤原因
  • 良好設計的系統最好不要頻繁的被Trap打斷,一種方法是為某個或某些Fault設定計數器,只有當除錯次數超過閾值的時候,才會觸發上層作業系統反應。

在Windows上編譯RISC-V的工具鏈(toolchain)

Gnanasekar在SW-Dev郵件組問到了一個交叉編譯的問題。他本來的計劃是在Windows的機器上編譯一套RISC-V的工具鏈(toolchain),但是這個專案在實際中碰到了很多問題,尤其是碰到了形形色色的編譯錯誤。

Tommy Murphy提到了一個基於docker的工具能夠用來編譯GNU MCU Eclipse RISC-V tool sources 專案連結. 他認為這個專案可以更容易地給windows編譯工具鏈。

Jim Wilson丟擲了一個更有意思的解決方案:加拿大交叉編譯(canadian cross)。這個高大上的名字源於當時加拿大有三個政黨組織。具體的方法如下:假定機器A,B,C有不同的作業系統和處理器,在機器A上交叉編譯一套能用在機器B上的gcc工具,把這套工具拷到機器B上,然後在上面交叉編譯出能執行在機器C上的二進位制程式碼。看起來很複雜,但是如果使用者比較熟悉Linux,事實上這個比在Windows直接進行交叉編譯要容易。小編舉個例子:Gnanasekar可以在Linux上利用mingw64編譯一套能夠直接執行在Windows的gcc,然後把這套工具搬到Windows上執行去編譯產生RISC-V的二進位制程式碼。

關於實現 FCSR 暫存器和(在狀態暫存器中的) FS 域必要性的討論

Neel Gala 在虛擬記憶體模式的"spike --isa=rv64imac"中執行 riscv-tests 套件的 rv64ui 測試時,vmboot 階段修改了 mstatus 的 FS 域。他認為:在禁用了浮點功能時,FS 域應該硬連線到 0,但它的值似乎會被改寫。最新的特權體系結構手冊中的如下描述(位於riscv-privileged-v1.10.pdf 3.1.11 P23)無法解決他的困惑:

"In systems that do not implement S-mode and do not have a floating-point unit, the FS field is hardwired to zero."
“對於沒有實現 S 模式且沒有浮點單元的系統,FS 域是硬連線到 0。”

所以他提出以下疑問:

  1. 假設對於 RV64IMAC 的實現,是否需要實現 FCSR 暫存器,在狀態暫存器 mstatus/sstatus 中的 FS 域是否應該硬連線到 0?

  2. Neel 的理解是:如果要支援軟浮點,由於庫程式碼需要使用 FCSR 暫存器和 FS 域,所以需要實現它們。倘若無需任何浮點支援,是否還要實現 FCSR 暫存器和 FS 域?

Jim Wilson 做出瞭如下解釋:軟浮點庫不需要使用 FCSR 暫存器。你可以在沒有 FCSR 暫存器的情況下使用軟浮點程式碼。特別是針對無 FPU 的目標主機編譯軟浮點庫所得到的軟浮點庫。但有時出於對 ABI 相容性的考慮,針對有 FPU 的目標主機編譯出的軟浮點庫將使用 FCSR。這類軟浮點庫更全面地實現了 IEEE FP 標準,且它可以更好地同硬浮點程式碼互動,並運行於同一處理器上。

Andrew Waterman 做出瞭如下解釋:倘若想要使用 M 模式程式碼透明地模擬 FPU,那就應該實現 FS 域。在實現了 S 模式的情況下, 基於 Rocket 的核心總是提供 FS 域,這樣甚至可以在 S 模式都無法感知的情況下模擬 FPU。 對於那些沒有實現 S 模式且沒有 FPU 的核心,就只將 FS 域硬連線到 0。

程式碼更新

lowRISC第6版: refresh v0.6

lowRISC即將釋出其第6版SoC實現。該版本使用了最新的Rocket-chip,在其基礎上添加了多種外圍裝置。該版本的主要更新包括:

  • 使用2018年3月份的Rocket-chip作為SoC核心(GDB, PLIC)
  • 處理器頻率提高到50MHz
  • 增強ethernet功能,在啟動階段支援DHCP
  • 支援彩色的VGA終端
  • 使用u-boot作為啟動bootloader
  • 支援Debian Linux

CNRV‘s CNRV-FPU更新

CNRV社群維護的浮點資料通路庫https://github.com/cnrv/CNRV-FPU 更新了,支援Verilator模擬,並且以Testfloat-3e為Golden Model驗證通過。這套浮點庫的特點是:

  1. 基於Verilog,清晰易懂而且程式碼量少
  2. 支援加法、乘法、乘加、開方、除法,支援RISC-V需要的所有舍入模式和狀態位
  3. 位寬任意可配置,同一套程式碼支援double、float和google-bfloat
  4. 採用類似hardfloat那種recorded格式,關鍵路徑上部件少,延遲短,功耗小
  5. 所有計算部件和共享統一的後處理模組,節省面積,此模組還可以用作整點轉浮點
  6. 支援單精度計算共享雙精度的資料通路,只有後處理模組是必須為單獨為單精度例化一份的
  7. 開方和除法共享資料通路,節省面積,每週期計算兩個位元

實用資料

編譯QEMU的RISC-V映像

Tommy Murphy總結的關於編譯QEMU RISC-V映像的網頁

行業視角

EETime: AI is now the Show Time for new companies and new architectures

EETime最近的文章提到了Esperanto這家去年成立的初創公司的最新動向。

新創公司Esperanto Technologies Inc.最近聘請了兩位來自特斯拉(Tesla)自動駕駛(Autopilot)部門的資深工程經理。David Glasco和Dan Bailey將加入Esperanto,帶領高階RISC-V核心和處理器工程團隊,負責深度學習和通用處理器開發任務。

去年11月,Esperanto在RISC-V大會上首度亮相。當時,Esperanto執行長Dave表示,該公司正在開發兩款RISC-V核心和兩款SoC,其中至少有一款將採用7nm技術工藝。搭載Maxion核心的16核心晶片瞄準單執行緒效能,而使用Minion核心的4,096核心晶片則在每顆核心中加進了一個向量單元,旨在實現最佳的每瓦效能。

市場相關

兩家SSD解決方案公司同時採用了SiFive的CPU IP

FADU和Mobiveil兩家公司相繼宣佈採用SiFive的RISC-V CPU用於其SSD控制其解決方案。這也從側面證明了一些細分垂直領域(垂直這裡是指軟體和晶片都由自己開發),RISC-V已經得到了客戶的認可。

Links:

  • [Mobiveil Inc. and SiFive partner to develop RISC-V based configurable SSD Platform For Data Center and Enterprise storage Applications](Mobiveil Inc. and SiFive partner to develop RISC-V based configurable SSD Platform For Data Center and Enterprise storage Applications)
  • [FADU Launches Industry Leading SSD Solutions Powered by SiFive RISC-V Core IP](FADU Launches Industry Leading SSD Solutions Powered by SiFive RISC-V Core IP)

新創企業“新帆”擬融資上億元用於RISC-V CPU研發

來自36kr最近的報道顯示,一家新創企業“新帆”正在研發基於RISC-V的處理器,時間需要2-5年,並將啟動首輪億元級別融資。

36氪近日接觸到的新帆就是基於RISC-V自主設計晶片核心。新帆聯合創始人、清谷資本創始合夥人夏淳告訴36氪,雖然大家都是用的是RISC-V指令集架構,但由於團隊的設計能力不同,會使得晶片的效能和用途也有較大差異。新帆一大優勢在於團隊核心技術人員均有“正規軍實戰”的高階核心設計經驗,設計團隊建制完整。據悉,新帆技術人員在MIPS、SGI、SUN、ARM等大型晶片企業有平均超過15年的工作經驗,擁有伺服器級別、高效能和低功耗CPU、GPU、以及SOC等超過40款,累計過億出貨量的成功晶片案例。

高雲半島體釋出基於晨熙家族FPGA的RISC-V微處理器早期使用者計劃

來自廣東的FPGA廠商高雲釋出了基於RISC-V的微處理器的早期使用者計劃,目前看下來這個計劃提供的bit檔案中包含了RISC-V的軟核。

暴走事件

2018年10月

  • 2018年10月18日, RISC-V Day Tokyo將在Keio University舉辦,演講徵集已經開始。註冊網站

2018年12月

招聘簡訊

CNRV提供為行業公司提供公益性質的一句話的招聘資訊釋出,若有任何體系結構、IC設計、軟體開發的招聘資訊,歡迎聯絡我們!

整理編集: 宋威、黃柏瑋、汪平、林容威、傅煒、巍巍、郭雄飛、黃瑋

特別感謝: 王逵

歡迎關注微信公眾號CNRV,接收最新最時尚的RISC-V訊日, RISC-V Day Tokyo將在Keio University舉辦,演講徵集已經開始。註冊網站 息!

CNRV微信公眾號