平头哥玄铁E906的编译/综合/啃代码/etc

首先推荐这篇,感谢这位大佬的系列博客,我仿真和综合很多都是参考这位的。(12条消息) 一、E906移植----项目介绍、开发环境与实验平台搭建_大功率灯泡的博客-CSDN博客

这里主要是记录一些啃代码过程中的心得,以一个代码水平约等于HDLbits的菜鸡的视角。以及github上官方给的那个钉钉群码已经进不去了,希望有群内大佬看到我,拉我或者怎么着,谢谢谢谢。

1.编译/仿真/综合/初步上板实验

项目文档有两个,用户手册和集成手册。其中用户手册主要是讲实现的功能、指令、寄存器等,看项目的结构、运行环境和仿真工具和端口名等则要查阅集成手册。

原项目分为cpu的rtl代码和构建仿真平台需要的soc组件这两部分。原文:

CPU 代码包:固定功能配置的 E906 RTL 代码;

Smart 平台包:提供了 E906 的参考集成设计、仿真环境和测试用例,帮助熟悉 E906 的功能和使用方 法,并辅助 E906 的集成工作。功能包括: 1)E906 的参考集成设计; 2)丰富的测试用例; 3)基础的软硬件仿真环境; 4)E906 RTL 代码 lint 流程及 waive 文件; 5)后端综合实现的参考 SDC 约束文件。

跑smart仿真就参考前面那位大佬的文章,自己debug也可以,主要是解决一个数据类型问题和环境变量问题就行,可能会报一些警告但是能跑出来。综合也是,需要一个顶层模块把soc.v包起来,再例化一个vivado自带的clk,加个简单测试模块(led闪烁之类的)先在fpga上跑一下,可以容易地实现。

smart_run/logical路径下是一些构成soc仿真平台的组件。

2.soc.v文件

 图来自集成手册。

上一步已经实现了这个soc的综合仿真,看看它里面的东西。有一个模块叫cpu_sub_system_ahb.v,这个soc的cpu小系统中,系统总线是实现了部分功能的32位AHB-Lite。数据和指令总线也是,但三者实现的功能有所不同。其中系统总线可以挂载各种功能模块和外设,即图中的AHB BUS,数据总线和指令总线只能挂存储设备。在代码中,三条ahb-lite的端口信号命名格式不太一样,系统总线的就是形如biu_pad_haddr,数据和指令总线的信号中则分别含有dahbl和iahbl,可以区分开。此外,观察代码会发现,名为apb的模块只有一组信号冠以"s2"的名称,而名为apb_bridge的模块有九组冠以s1到s9名称的信号,因为apb是系统总线AHB-Lite的第二个从机(看系统总线代码可知),所以apb会收到系统总线发来的叫s2的控制信号或写数据,或者发回来自挂载在apb上的从机们的信号或读数据。而apb_bridge作为apb上唯一的主机,会发出给apb上九个从机的信号,也会收到来自它们的读数据。

这部分代码中,apb模块里只例化了外设模块,没有状态机,读写状态机是在转接桥的模块里实现的,我个人理解是因为它相当于apb上的主机所以决定了读写其他外设的时序。转接桥例化在apb模块里,但我不太理解为啥在soc.v里把apb而不是桥写作ahb的从机。


系统总线上挂载的模块在soc.v里面,数据和指令总线上的在cpu_sub_system_ahb.v里,挂载在apb就在apb.v里。

 

系统总线寻址空间和数据指令总线存储器空间(在ahb.v中,集成手册第二章也有)

//SYS MEM

`define S1_BASE_START 32'h60000000

`define S1_BASE_END   32'h600fffff

//APB

`define S2_BASE_START 32'h40000000

`define S2_BASE_END   32'h4fffffff

//IMEM

`define S4_BASE_START 32'h00000000

`define S4_BASE_END   32'h0007ffff

//DMEM

`define S5_BASE_START 32'h20000000

`define S5_BASE_END   32'h2007ffff

apb上各模块(在apb_bridge.v中,第一个原版没写,我看着应该是uart)

//uart

`define PS1_BASE_START 32'h40015000

`define PS1_BASE_END   32'h40015fff

// Timer

`define PS2_BASE_START 32'h40011000

`define PS2_BASE_END   32'h40011fff

// PMU

`define PS3_BASE_START 32'h40016000

`define PS3_BASE_END   32'h40016fff

//GPIO

`define PS4_BASE_START 32'h40019000

`define PS4_BASE_END   32'h40019fff

//STimer

`define PS5_BASE_START 32'h40018000

`define PS5_BASE_END   32'h40018fff

//CLKGEN

`define PS6_BASE_START 32'h40017000

`define PS6_BASE_END   32'h40017fff

//SMPU

`define PS7_BASE_START 32'h4001A000

`define PS7_BASE_END   32'h4001Afff

//NMI_WAKE

`define PS8_BASE_START 32'h40021000

`define PS8_BASE_END   32'h40021fff

//NEW TIMER

`define PS9_BASE_START 32'h40031000

`define PS9_BASE_END   32'h40031fff

地址总线绝大部分是32位(addr端口信号)。pad_cpu_sysmap_addrx(x为数字0-7)是20位的,cp0_dtu_addr是12位。pa_f_spsram定义ADDR_WIDTH为5.

tbc.

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值