【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
网上其实有很多的cpu代码,很多都值得好好学一学。对于软件开发的同学来说,也有必要知道每一条指令在cpu上是怎么运行的。现在正好有一个tinyriscv的工程,地址在这,https://github.com/liangkangnan/tinyriscv,非常值得一看。
1、cpu指令集
riscv
2、主要目录说明
fpga,里面有一个xdc文件,负责管脚分配
pic,测试截图
rtl,cpu soc的整个源代码
sim,仿真,将主要的命令做成了python脚本
tb,testbench测试
tests,这部分非常重要,其中tests/example是一个完整的freertos测试,还有外设测试
tools,里面包含一个openocd.exe,可以用它实现软件的下载,一般openocd搭配CMSIS-DAP硬件
3、rtl目录说明
core, cpu代码
debug,jtag代码
perips,外设代码
soc,总的soc入口代码
utils,其他工具代码
4、总线
整个soc总线是作者定义的,简单易用,都是组合逻辑
5、soc中的master
tinyriscv,uart_debug, jtag_top
其中uart_debug是负责下载固件的,这样可以用串口下载固件了
jtag_top不仅可以用来调试slave模块,它和cpu也是直连的,完全可以调试cpu,这就是所谓的硬件级别调试
6、soc中的slave
rom、ram、timer、uart、gpio、spi
7、rtl/core中主要文件的作用
clint.v,中断处理
csr_reg.v,特殊寄存器处理,主要是alu寄存器之外的寄存器
ctrl.v,流水线控制
defines.v,宏定义文件
div.v, 除法模块
ex.v,执行模块,纯组合逻辑
id.v,译码模块,纯组合逻辑
id_ex.v,译码结果传递给执行模块
if_id.v,指令传递给译码模块
pc_reg.v,pc寄存器模块
regs.v, 通用寄存器读写
rib.v,自定义的总线模块
tinyriscv.v,cpu入口模块
8、配套文档
9、缺点
没有mmu和cache
10、其他
按照作者自己的说法,这是一个verilog新手编写的soc代码。麻雀虽小,五脏俱全。通过这一份代码,大家完全可以打破cpu、soc、mcu的迷思,对嵌入式系统有一个深刻、全新的认识,这是非常重要的。芯片重要,但是并不是遥不可及的,他和操作系统、编译器、tcp/ip网络协议、数据库一样,都是可以用代码开发出来的。
流水线的思路都是复位-》组合逻辑-》时序逻辑-》组合逻辑-》时序逻辑,多加练习,总能学会的。