verilog学习记(tinyriscv mcu设计)

Posted 费晓行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog学习记(tinyriscv mcu设计)相关的知识,希望对你有一定的参考价值。

【 声明:版权所有,欢迎转载,请勿用于商业用途。  联系信箱: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总线是作者定义的,简单易用,都是组合逻辑

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/

 

9、缺点

没有mmu和cache

 

10、其他

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

 

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

 

以上是关于verilog学习记(tinyriscv mcu设计)的主要内容,如果未能解决你的问题,请参考以下文章

tinyriscv---一个从零开始写的极简易懂的开源RISC-V处理器核

数字IC设计,学完verilog语法,还需要学习什么?

verilog学习(10)编写代码遇到错误

verilog--记verilog程序设计的一点心得

扩展欧几里得算法学习记

lcd1602如何自定义汉字(verilog)