🔍 搜索帖子 / 资讯 / 芯片型号…
论坛/全国大学生集成电路创新创业大赛/蜂鸟E203 SoC的私有设备总线的简单使用
蜂鸟E203 SoC的私有设备总线的简单使用
全国大学生集成电路创新创业大赛 作者 hhulll 发布于 2021-06-06 15:57(1951 天前) 14069 浏览

一、队伍介绍

参赛队名:英勇不秃 队伍编号:CICC2990

本篇主要介绍蜂鸟E203 SoC的私有设备总线的使用

二、私有设备总线接口

BIU模块接收IFU和LSU单元的存储器访问请求,判断访问地址区间后,通过ICB接口来访问外部的不同接口,比如系统存储接口和私有外设接口。系统存储接口连接的是SoC中的系统存储总线,可以访问ROM、FLASH等。而私有外设接口连接的是私有设备总线,可以访问UART、GPIO等。

在设计和扩展E203 SoC功能的过程中,我们一般都会为系统需要添加外设到私有设备总线上,如何添加和配置是主要的问题。

通过阅读SoC工程RTL代码可以发现,e203_subsys_perips.v,蜂鸟在私有外设总线接口(PPI)上,给我们预留了一定的地址空间(Reserved)。


我们知道,E203采用的是自定义的总线协议ICB,其主要包含2个通道:命令通道和返回通过。ICB协议并不复杂,其主要的特点是从设备在反馈时需要判断主设备是否ready,并将rsp_valid信号拉高以视为一次完整传输的结束。进一步学习其协议时序,为我们所设计的外设添加上ICB总线接口。


除此之外,我们还需要根据地址区间,声明我们外设中的控制寄存器,以便进一步设计和使用。如:


三、总结

这篇贴子简单分享了蜂鸟E203 SoC的私有设备总线的使用方法,本人能力有限,难免可能会出现疏漏,但还是希望能够帮助到大家,同时也希望大家指正,祝各参赛队比赛顺利!

 

全部回复 16
r
riscv1079 天前 · 1 楼
回复 hhulll:

您可以新建一个.h文件 header file,声明之后再将其include到hbird_skd_soc.h里面。

请问hbird_skd_soc.h这个头文件是在sdk里面吗?没有检索到

突刺咸鱼
突刺咸鱼1948 天前 · 2 楼
回复 hhulll:

会的呢

大佬,感觉可能出现在总线代码那里的问题,虽然我们的仿真图是对的,但是可能会出现时序上的错误。能分享一下.v总线那一块的代码书写的经验吗?ICB总线以前确实没接触过啊..

突刺咸鱼
突刺咸鱼1948 天前 · 3 楼
回复 hhulll:

会的呢

好的好的,我再去试试,谢谢啦

hhulll
hhulll1948 天前 · 4 楼
回复 突刺咸鱼:

我发现好像把icb_rsp_err输入输出搞反了,但这个会影响结果吗..

会的呢

突刺咸鱼
突刺咸鱼1948 天前 · 5 楼
回复 hhulll:

MCAUSE是7,store指令出错了,应该是它store不到0x10042000这个地址,可能还是你声明或者你接外设时出的问题,可以先考虑看仿真波形,是否真的可以访问到这个地址

我发现好像把icb_rsp_err输入输出搞反了,但这个会影响结果吗..

突刺咸鱼
突刺咸鱼1948 天前 · 6 楼
回复 hhulll:

MCAUSE是7,store指令出错了,应该是它store不到0x10042000这个地址,可能还是你声明或者你接外设时出的问题,可以先考虑看仿真波形,是否真的可以访问到这个地址

这个波形图好像也是访问到了地址啊...晕了


突刺咸鱼
突刺咸鱼1948 天前 · 7 楼
回复 hhulll:

MCAUSE是7,store指令出错了,应该是它store不到0x10042000这个地址,可能还是你声明或者你接外设时出的问题,可以先考虑看仿真波形,是否真的可以访问到这个地址

大佬,我们定义外设引脚的时候是把外设模块例化进system那个顶层文件里面,然后把他的几个接口定义成为输入输出,比如SD卡的四个引脚我就放在system那个顶层文件作为输入输出,这样可以的吧,你们是怎么做的啊....


hhulll
hhulll1948 天前 · 8 楼
回复 突刺咸鱼:

大佬,我们这么写总是出现这个错误啊,你们遇到过吗...晕了

MCAUSE是7,store指令出错了,应该是它store不到0x10042000这个地址,可能还是你声明或者你接外设时出的问题,可以先考虑看仿真波形,是否真的可以访问到这个地址

突刺咸鱼
突刺咸鱼1948 天前 · 9 楼
回复 hhulll:

例:这样用没问题呀

大佬,我们这么写总是出现这个错误啊,你们遇到过吗...晕了

突刺咸鱼
突刺咸鱼1949 天前 · 10 楼
回复 hhulll:

例:这样用没问题呀

好的好的,谢谢了,我去看看...

hhulll
hhulll1949 天前 · 11 楼
回复 突刺咸鱼:

改了还是错的啊,大佬能分享下你们执行的主函数是怎么写的吗..

例:这样用没问题呀

突刺咸鱼
突刺咸鱼1949 天前 · 12 楼
回复 hhulll:

您可以看到我们声明的最后一句,可以在程序中直接使用如 SD_REG(PADDR_SD) 对此地址进行操作

改了还是错的啊,大佬能分享下你们执行的主函数是怎么写的吗..

hhulll
hhulll1949 天前 · 13 楼
回复 突刺咸鱼:

您好大佬,能看下你们的运行程序吗,我们这样写的,但似乎出错了

您可以看到我们声明的最后一句,可以在程序中直接使用如 SD_REG(PADDR_SD) 对此地址进行操作

突刺咸鱼
突刺咸鱼1949 天前 · 14 楼
回复 hhulll:

您可以新建一个.h文件 header file,声明之后再将其include到hbird_skd_soc.h里面。

您好大佬,能看下你们的运行程序吗,我们这样写的,但似乎出错了

hhulll
hhulll1949 天前 · 15 楼
回复 突刺咸鱼:

您好,我想问一下你在软件程序中声明地址区间的时候是在哪一个文件啊

您可以新建一个.h文件 header file,声明之后再将其include到hbird_skd_soc.h里面。

💡 请 登录 后参与讨论(微信扫码即登录/注册)