11

verilog学习记(tinyriscv mcu设计)

 3 years ago
source link: https://feixiaoxing.blog.csdn.net/article/details/118074738
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

verilog学习记(tinyriscv mcu设计)

original.png
费晓行 2021-06-20 21:09:47 35
分类专栏: verilog学习记

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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,其他工具代码

整个soc总线是作者定义的,简单易用,都是组合逻辑

https://github.com/liangkangnan/tinyriscv/blob/7cb8c8aa0676a27bacb574a80ac20a3c4508c939/rtl/core/rib.v

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、配套文档

https://liangkangnan.gitee.io/2020/04/29/%E4%BB%8E%E9%9B%B6%E5%BC%80%E5%A7%8B%E5%86%99RISC-V%E5%A4%84%E7%90%86%E5%99%A8/

没有mmu和cache

10、其他

    按照作者自己的说法,这是一个verilog新手编写的soc代码。麻雀虽小,五脏俱全。通过这一份代码,大家完全可以打破cpu、soc、mcu的迷思,对嵌入式系统有一个深刻、全新的认识,这是非常重要的。芯片重要,但是并不是遥不可及的,他和操作系统、编译器、tcp/ip网络协议、数据库一样,都是可以用代码开发出来的。

    流水线的思路都是复位-》组合逻辑-》时序逻辑-》组合逻辑-》时序逻辑,多加练习,总能学会的。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK