深入探索 | Linux下的RISCV開發-GD32VF103 (一)

本文將介紹RISC-V是什麼,為何對IC設計廠影響這麼大?對一般消費者而言能帶來什麼好處?以及開發RISC-V的方法除了使用FPGA作為ISA的實作工具之外還能夠用什麼工具來了解RISC-V的特性與優勢。{alertInfo}

目錄

    前言

    RISC-V,是第五代精簡指令集的簡稱,也是一個近幾年在嵌入式系統領域家喻戶曉的名詞。其開源、免權利金、可商業使用的優點吸引許多晶片設計廠共同維護,如高通、Google、晶心科技等,大家都想要有除了ARM之外的指令集選項。除了免權利金的優點之外,能夠客製化指令的優點讓各家廠商可以針對自己的系統進行調校與最佳化,如Seagate就期許拿這項技術為自己的儲存裝置進行特殊指令設計與最佳化,並宣稱可提高最高3倍的效能

    但實際上 RISC-V 這個名詞已經在2010年被柏克萊大學的Andrew Waterman, Yunsup Lee 以及Krste Asanovic 三位作者共同完成,現在則由RISC-V基金會共同維護。

    Cover Photo by Lenharth Systems on StockSnap

    什麼是指令集(ISA)?

    如同X86、ARM相同,RISC-V本身並不是一個CPU,也不是一種IC,他是指令集的名稱,代表使用這個架構的CPU可以做的最小指令單位,也可以說是軟體對應CPU電路的橋樑。

    首先我們知道CPU是由上億個電晶體組成的電子電路,每一個電路個別處理特定的資料運算,如加法器、減法器、位移暫存器等等,而我們撰寫的程式會透過指令集轉換成對底層電路的操作來達到我們的要求。
    Vasuki Shankar在Linkedin上發表一篇文章,說明ISA是如何與CPU底層硬體互動的
    舉例來說,現在宣告
    int i = 0
    經過編譯器轉換成組合語言後會變成
    .data                   ! start a group of variable declarations
    i:      .word   10      ! int i = 10;
    接著,組合語言會編譯成16進制的機器碼,讓CPU的硬體電路能夠直接讀取資料。
    下圖就是組合語言 MOVL轉換成機器碼0x83A4 在F280025C微控制器記憶體中的樣子

    下一步,在CPU內部透過ISA進行機器碼對應微架構(MicroArchitecture),如加法器、減法器、位移暫存器等等進行運算,最後達成我們想要的功能。

    筆者參考What is Instruction Set Architecture影片中的投影片繪製出下方的架構圖,說明編譯器、指令集以及CPU中的電子電路的關係。


    但指令集架構對普通使用者來說基本上沒有差異,今天我要用Chrome瀏覽器看Youtube影片,用哪一個跑出來內容都沒有差別,唯一的差別就只有速度、效能跟省電程度。

    既然我們不是晶片設計師,但又想要嚐嚐RISC-V的鮮當個科技潮潮,能怎麼做呢?

    RISC-V要如何開發?

    既然RISC-V是指令集架構,就表示可以透過可程式邏輯陣列(FPGA),像百變怪一樣用邏輯閘組合出各種指令集。
    這篇文章使用Microchip的MiV_RV32模擬出使用RISC-V指令集的MCU,而EFINIX也有文章說明將RISC-V實作在FPGA上,除了可以完整的一句需求設計周邊模組,也可以修改指令集對應用最佳化,如針對影像AI所需要的指令集、針對數位通訊所撰寫的指令集與週邊、加速加密速度的安全性指令、編解碼影像所需要的數學運算以及感應器的讀取指令等等。

    但筆者手邊沒有FPGA開發板,同時也沒有相關的設計經驗,所以退而求其次的找到用RISC-V架構的微控制器。

    GigaDevice提供一系列使用RISC-V架構設計的MCU命名為GD32VF系列。有沒有覺得很耳熟?

    沒錯,就是學STM32的命名原則。

    GigaDevice是一間位於北京的晶片設計公司,旗下產品主要有控制器、儲存裝置與周邊產品。而中國在美中貿易戰時為了取回晶片主導權,且台積電在晶圓製造產業上的影響力也越來越大,因此想要脫離美國控制,進而金援自己國家的晶片設計廠利用開源指令集設計自己的晶片。

    接下來的文章就讓我用GD32VF103CBT6作為系列教學文的範例,並使用Linux系統編寫自己的RISC-V嵌入式專案吧!

    延伸閱讀

    這是一篇關於真正實作RISC-V指令集到FPGA上的論文,詳細說明如何使用簡單的哈佛架構,透過Verilog編寫硬體描述語言在Basys 3 Artix-7 FPGA上實現指令集。


    {contactForm}

    Post a Comment

    留個言吧

    較新的 較舊