【基于DesignStart的M3 SoC】
基于DesignStart的M3 SoC
- 1 Arm based SoC简介
- 1.1 ARM-M3
- 1 M3简介
- 2 启动流程
- 3 中断
- 1.2 处理器
- 1 Cortex-M3处理器核
- 2 例化接口配置
- 3 AHB-Lite总线接口
- 4 扩展外设
- 2 使用标准组件来定制
- 2.1 轮子
- 2.2 开发方法
- 2.3 需要软件
- 2.4 使用CMSDK搭建CortexM3SoC
- 1 AHB bus
- 2 软件driver
ARM_M3 based SoC的快捷方法:使用arm DesignerStart开放的Cortex M3搭建SoC;
1 Arm based SoC简介
基于Cortex-M3搭建SoC;
基于自定义的功能IP并集成:w:w到SoC中;
在SoC系统上进行软件开发
在FPGA开发板上搭建SoC的验证原型;
通过搭建SoC,可以很好的学习从功能定义到FPGA/仿真上来验证跑完的流程;
1.1 ARM-M3
1 M3简介
32bit addr/data;
总线接口AHB-Lite;I/D/S
支持NMI以及最大支持240物理中断;
三级流水线;
使用Thumb/Thumb2 ISA的一个子集;
2 启动流程
M3启动流程:
1.在复位使能时,CPU处于reset状态;
2.复位释放后,从地址0x0000_0000出加载栈顶地址,及汇编代码中_vector的第一行则为栈顶地址;
3.从地址0x0000_0004初加载复位处理函数的地址;
4.PC改变为0x0000_0004中的值,开始执行复位处理,同时CPU的工作状态从异常模式切换为线程模式,开始正常工作;
3 中断
1.CPU接收到中断信号(IRQ/NMI/systick等);
2.寄存器入栈
3.根据中断信号查找中断向量表(对应汇编启动代码中的_Vector字段);
4.中断处理函数执行完成后,寄存器出战,PC跳转;
根据中断向量表的编号—>进入ISA程序;
ISA中C程序执行关键信号:
Hxxxx(以H开头的信号) HBus总线
vis_rX_O 通用寄存器,通过仿真观察这些寄存器能够知道相关汇编指令是否正常执行(ADD、MOV)
vis_msp_o 栈指针
vis_r14_o 链接寄存器,程序返回出错时需要检查此寄存器
vis_pc_o 程序计数器,可以用来判断处理器是否在正常运行
vis_ipsr_o 中断状态寄存器,当发生错误的时候,PSR的值会改变,用于判断发生何种类型错误;
LOCKUP 处理器处理NMI或者Hardfault时又发生错误后,处理器将会被死锁
1.2 处理器
1 Cortex-M3处理器核
直接在DesignStart上下载好M3软核;
DesignStart-M3面向个人的Eval和FPGA版本; 面向企业用户的Physical和Pro版本;
Eval版本:就是为网表级Verilog代码,可读性几乎为0;
FPGA版本:只有Xinlinx和Gowin版本;基本上用的最多的就是Xilinix的,搭配Keil,Jlink开发调试工具;FPGA上实现了arm内核后,就是相当于一颗通用单片机功能了;
2 例化接口配置
即M3顶层例化接口信号固接;根据功能进行信号分组;
3 AHB-Lite总线接口
该AHB总线是M3与外部进行交换信息的总线;
读写时序关系总线在这里就不介绍了;
AHB最主要的三个总线:I/D/S
I-AHB: I-mem;
D-AHB: D-mem;
S-AHB: 用于访问外设;
4 扩展外设
- 扩展Decoder;
- 在Interconnect中增加slave Port;
- 在Interconnect中将新增的Slave Port与扩展的Decoder Hsel信号以及Slave Mux连接;
- 扩展连接外设、外设接口、总线;
- C语言程序中编写外设接口结构体;
2 使用标准组件来定制
具体即为使用AMBA Designer来生成具体所需标准cmsdk组件;
2.1 轮子
使用AMBA Designer来避免重复造轮子;
大轮子:使用cmsdk来搭建总线系统; 小轮子:使用cmsdk外设; 自定义轮子:写外设驱动的两种方法;
轮子跑起来:外设驱动移植与startUP;
具体示例:利用cmsdk来搭建基本的SoC; 基于cmsdk的总线系统搭建;基于cmsdk的外设及其软件驱动移植;自己实现自定义外设的思路;
DesignStart: 一个CortexM3处理器核;一套CMSDK IP/工具;一个cmsdk搭建的样板SoC工程;
CMSDK: 1.AHB and APB Protocol; 2. 外设:GPIO,timers,watchdog, and uart; 3. M0/M3/M4 Processors; 4.编译和仿真脚本来创造Verilog的开发环境;5.软件驱动和例程;
2.2 开发方法
1.直接在模板工程上魔改;
2.以样板工程为参考,自己用cmsdk搭建;
–1. 全局同步时钟;
–2. BRAM的readmemh/readmemb;
技术社区帖子:使用cmsdk搭建CortexM3SoC;
2.3 需要软件
仿真:ModelSim
综合:VIVADO/Quartus;
WSL: make,Minicom;
软件调试:make; Minicom;
2.4 使用CMSDK搭建CortexM3SoC
具体分类包含以下部分:
- APB comoponents;
- Advanced AHB-Lite components;
- The memory models
- The verificatoins components;
cmsdk_ahb_busmatrix/cmsdk_ahb_to_sram/cmsdk_fpga_sram/cmsdk_ahb_to_apb/cmsdk_ahb_to_apb_sync/cmsdk_ahb_default_slave;
1 AHB bus
配置文件都是XML文件;
1.cmsdk_ahb_busmatrix(remap):
2.cmsdk_ahb_to_apb_sync
3.cmsdk_ahb_slave_mux
decoder+arbiter;
2 软件driver
移植外设驱动.c文件;
接下来尝试用FPGA或者纯仿真来搭建一个M3的SoC,然后在跑起来C;