今天在 GitHub 上看到一個 C 語言項目,用大約 600 行代碼實現(xiàn)了一個 RISC-V CPU 核,甚為感嘆,分享一下。不管是學習 C,還是學習 RISC-V,這個項目都有非常高的學習價值,開源萬歲!
rv
用 ANSI C 編寫的 RISC-V CPU 內核。
特征:
- RV32IMC 用戶級實現(xiàn)
- 通過 riscv 測試中所有支持的測試
- ~600 行代碼
- 不使用任何大于 32 位的整數(shù)類型,即使對于乘法也是如此
- 簡單 API(兩個函數(shù),加上您提供的兩個內存回調函數(shù))
- 無內存分配
應用程序接口
/* Memory access callbacks: data is input/output, return RV_BAD on fault, 0 otherwise */
typedef rv_res (*rv_store_cb)(void *user, rv_u32 addr, rv_u8 data);
typedef rv_res (*rv_load_cb)(void *user, rv_u32 addr, rv_u8 *data);
/* Initialize CPU. */
void rv_init(rv *cpu, void *user, rv_load_cb load_cb, rv_store_cb store_cb);
/* Single-step CPU. Returns 0 on success, one of RV_E* on exception. */
rv_u32 rv_step(rv *cpu);
用法
#include < stdio.h >
#include < string.h >
#include "rv.h"
rv_res load_cb(void *user, rv_u32 addr, rv_u8 *data) {
if (addr - 0x80000000 > 0x10000) /* Reset vector is 0x80000000 */
return RV_BAD;
*data = ((rv_u8 *)(user))[addr - 0x80000000];
return RV_OK;
}
rv_res store_cb(void *user, rv_u32 addr, rv_u8 data) {
if (addr - 0x80000000 > 0x10000)
return RV_BAD;
((rv_u8 *)(user))[addr - 0x80000000] = data;
return RV_OK;
}
rv_u32 program[2] = {
/* _start: */
0x02A88893, /* add a7, a7, 42 */
0x00000073 /* ecall */
};
int main(void) {
rv_u8 mem[0x10000];
rv cpu;
rv_init(&cpu, (void *)mem, &load_cb, &store_cb);
memcpy((void *)mem, (void *)program, sizeof(program));
while (rv_step(&cpu) != RV_EECALL) {
}
printf("Environment call @ %08X: %un", cpu.pc, cpu.r[17]);
return 0;
}
為rv
編譯程序
使用 riscv-gnu-toolchain工具鏈和 rv 鏈接腳本 。
建議使用gcc
命令行:
riscv64-unknown-elf-gcc example.S -nostdlib -nostartfiles -Tlink.ld -march=rv32imc -mabi=ilp32 -o example.o -e _start -g -no-pie
然后用 obj 工具將0x80000000
起始的二進制代碼生成能被rv
加載的二進制文件:
riscv64-unknown-elf-objcopy -g -O binary example.o example.bin
支持的指令列表
參見 支持指令列表。
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
內核
+關注
關注
3文章
1384瀏覽量
40445 -
cpu
+關注
關注
68文章
10918瀏覽量
213164 -
ANSI
+關注
關注
0文章
28瀏覽量
20559 -
C代碼
+關注
關注
1文章
89瀏覽量
14367 -
RISC-V
+關注
關注
45文章
2331瀏覽量
46687
發(fā)布評論請先 登錄
相關推薦
64位RISC-V CPU發(fā)展現(xiàn)狀和未來前景
RISC-V CPU發(fā)展情況 實際上,目前RISC-V已經(jīng)開始64位CPU的研發(fā),也已經(jīng)有相關內核和產(chǎn)品面市,比如平頭哥64位
瑞薩電子推出64位RISC-V CPU內核RZ/Five通用MPU,開創(chuàng)RISC-V技術先河
瑞薩電子今日宣布,推出基于64位RISC-V CPU內核的RZ/Five通用微處理器(MPU)——RZ/Five采用Andes AX45MP,基于RISC-V
發(fā)表于 03-01 13:54
?1475次閱讀
![瑞薩電子推出64位<b class='flag-5'>RISC-V</b> <b class='flag-5'>CPU</b><b class='flag-5'>內核</b>RZ/Five通用MPU,開創(chuàng)<b class='flag-5'>RISC-V</b>技術先河](https://file.elecfans.com/web2/M00/33/40/poYBAGIdtXiAKLJ-AA74O_RvuIA526.png)
瑞薩電子推出采用自研RISC-V CPU內核的通用32位MCU
2024 年 3 月 26 日,中國北京訊 - 全球半導體解決方案供應商瑞薩電子(TSE:6723)今日宣布率先在業(yè)內推出基于內部自研CPU內核構建的通用32位RISC-V微控制器(MCU
發(fā)表于 03-30 22:08
RISC-V MCU開發(fā) (一):集成開發(fā)環(huán)境
近年來,RISC-V生態(tài)獲得了空前的繁榮發(fā)展,國內外眾多科技公司紛紛下場布局、行業(yè)應用層出不窮,搭載RISC-V內核的MCU也逐漸走入了工程師的日常開發(fā)工作中。 工欲善其事必先利其器,要想實現(xiàn)
發(fā)表于 09-22 14:44
如何實現(xiàn)一個RISC-V內核架構的芯片移植工作
使用 common 文件夾中的任務切換代碼RT-Thread RISC-V 內核移植 API 實現(xiàn)內核移植的主要工作內容,主要就是
發(fā)表于 03-25 10:11
RISC-V基礎知識:模塊化開放式的ISA CISC和RISC代碼區(qū)別
/ti/)TIonal— 一個開放的 ISARISC-V是一種開放式指令集架構(ISA),這意味著您可以自由地在微處理器或微控制器中實現(xiàn)RISC-V CPU,而無需向任何人支付使用此I
發(fā)表于 12-23 17:51
RISC-V中國峰會:RISC-V產(chǎn)業(yè)及生態(tài)發(fā)展
RISC-V中國峰會:RISC-V產(chǎn)業(yè)及生態(tài)發(fā)展,CPU創(chuàng)新應用,能為大眾所用。
![<b class='flag-5'>RISC-V</b>中國峰會:<b class='flag-5'>RISC-V</b>產(chǎn)業(yè)及生態(tài)發(fā)展](https://file.elecfans.com/web2/M00/02/93/poYBAGDRXViAUPHpAAFeVg2-3fU038.png)
第一屆RISC-V中國峰會看點 risc-v開發(fā)要怎么優(yōu)化risc-v指令集架構代碼密度
在第一屆RISC-V中國峰會上看點很多,RISC-V是開源的,那么代碼密度要怎么控制,會不會因為開源而導致代碼密度特別大? 我們一起來看看risc-
發(fā)表于 06-23 18:22
?9736次閱讀
![第一屆<b class='flag-5'>RISC-V</b>中國峰會看點 <b class='flag-5'>risc-v</b>開發(fā)要怎么優(yōu)化<b class='flag-5'>risc-v</b>指令集架構<b class='flag-5'>代碼</b>密度](https://file.elecfans.com/web2/M00/02/DC/poYBAGDTEB6AIsGcABJPSIG4sfw082.png)
RISC-V MCU開發(fā) (六):代碼下載
、CH58x、CH32Fx、CH32Vx等RISC-V/ARM內核MCU工程的代碼下載功能。其中,對于CH56x、CH57x、CH58x等型號,MRS還支持關閉兩線仿真調試接口功能;對于CH32Fx、CH32Vx型號,MRS支持
發(fā)表于 12-02 09:06
?11次下載
![<b class='flag-5'>RISC-V</b> MCU開發(fā) (六):<b class='flag-5'>代碼</b>下載](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
TenstorrentInc首席CPU構架師 練維漢:助力數(shù)字化升級的RISC-V AI 高性能CPU
”,曾在水果公司作CPU的架構設計師。練維漢除介紹RISC-V內核的高性能 CPU IP內核技術之外,也對近期熱門的
![TenstorrentInc首席<b class='flag-5'>CPU</b>構架師 練維漢:助力數(shù)字化升級的<b class='flag-5'>RISC-V</b> AI 高性能<b class='flag-5'>CPU</b>](https://file1.elecfans.com/web2/M00/A0/42/wKgZomTsHk2AaPQXAAgfg0W4suc814.png)
新聞快訊 | 瑞薩推出第一代32位RISC-V CPU內核
新聞快訊 全球半導體解決方案供應商瑞薩電子(TSE:6723)宣布成功設計、測試并推出基于開放標準RISC-V指令集架構(ISA)的32位CPU內核。瑞薩作為業(yè)內首個為32位通用RISC-V
瑞薩推出采用自研CPU內核的通用32位RISC-V MCU 加強RISC-V生態(tài)系統(tǒng)布局
瑞薩推出采用自研CPU內核的通用32位RISC-V MCU 加強RISC-V生態(tài)系統(tǒng)布局 RISC-V MCU為開發(fā)人員帶來低功耗、高性能的
發(fā)表于 03-28 19:00
?642次閱讀
評論