RISCV SOC设计与Chisel语言入门资料
- 关于项目的一点说明
- Rocket核与Chisel语言
关于项目的一点说明
【本文提到的所有资料正在打包上传,请等待】
今年三月,我和舍友一起参加了第四届全国集成电路设计大赛,选择了RISCV挑战杯的子赛题二网址。自二月份开始着手做该项目,其间踩过无数的坑,也从一开始的手足无措,逐渐找到门路,熟悉了整个的开发流程。为了对之前的工作做一个小小的总结,秉承RISCV一贯的开源开放的开发精神,并吸引更多的同志共同探讨RISCV软硬件协同开发的魅力,创作此博客。
简而言之,项目的目的是在digilent公司提供的NexysDDR2板卡上,设计装有任一RISCV处理器核的SOC,并将其烧写到板卡上。之后编写C语言代码,经过相关工具链编译后通过openocd上载到flash中,SOC启动后,将会读取flash中存储的代码,实现以太网下载、身份证识别功能、摄像头读取与人脸识别的功能。
我将具体的技术路线整理成思维导图,见
【RISC-V身份证识别片上系统开发技术路线】
Rocket核与Chisel语言
Rocket核的主要信息可以轻易在网上查到,这里不多言,然而chisel语言的教程却很难查到,并且国内有关chisel语言的论坛也少之又少,导致出了错误之后很难在网上找到相关的解决方案。这里我将这几个月收集的chisel的教程与资料一并列出,基本都为英文版,但语言简单易懂,并且偏实践性,故学习起来并无太大困难。
chisel语言是基于scala语言开发的硬件设计支持包,总体上开发者需要基本了解JAVA语言的设计法则,JAVA的语法与C/C++差不太多,熟悉C++的开发者很容易就可以掌握这种JAVA。部分语法及高级功能可以查阅资料包中的:
【Java核心技术 卷1 基础知识 原书第10版.pdf】
【Java核心技术 卷2 高级特性 原书第10版.pdf】
scala语言学习起来较有难度,建议先花一个星期自己熟悉一下scala编程,资料为
【快学Scala 第2版】
!!!重点搞懂懒值(page31),构造映射(page53),自身类型(page149),带函数参数的函数(page178),控制抽象(page185)与拉链操作(page209)!!!
大略熟悉scala之后,就可以着手开始chisel语言的实践了,这里推一本好书:
【chisel-book.pdf】
这本书仅有英文版,但是对chisel的各项机制与语法进行了一个大致的介绍,适合用于入门学习,建议对该书进行通读。
之后就可以开始rocket-chip的学习了,网上的许多SOC其内核都是rocket核,而rocket核及其所用的一系列必要硬件结构如移位寄存器、FIFO等的实现代码都储存在rocket-chip文件夹中,之后这些代码可通过FIRRTL编译为verilogHDL文件用于进一步设计。对该文件夹内容的解释可以参考该网址,好似是一个西电的大佬写的,对其文件结构做了一个基本的介绍。
Notes for Rocket-Chip.
Rocket核最关键的部分是与外设总线进行通信。伯克利大学自定义了一套数据组织结构,较Diplomacy。在这里面定义各个参数parameter,结点node与边edge的通信交互协议。这个网址对该过程有了一个非常简短的介绍:
Diplomacy and TileLink from the Rocket Chip.
进一步了解可见:
Chipyard教学网站.
在熟悉了SOC的硬件设计之后,就可以想方设法往总线上面挂外设了。
其他RISCV学习资料:
博主a_weiming的博客集.
博主_iChthyosaur的博客集
今天写不动了,下次打算解说E310-G000 SOC的chisel代码实现。
不免存在错误,欢迎大家批判。
最后配一张E310-G000 SOC的系统图