当前位置: 首页 > backend >正文

【基于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;

http://www.xdnf.cn/news/17637.html

相关文章:

  • 当“超级高速“遇见“智能大脑“:5G-A×AI如何重塑万物智联时代
  • 告别数据孤岛!React 路由 3 种传参方法全解析
  • Qt之QMetaEnum的简单使用(含源码和注释)
  • 标准IO操作
  • Python 常用的正则表达式
  • Redis序列化配置类
  • vue2+elementUI实现园型动态步骤条小组件,带缩放功能
  • 【4】Transformers快速入门:自然语言模型 vs 统计语言模型
  • 【无标题】centos 配置阿里云的yum源
  • vue文件或文件夹拖拽上传
  • WPS文字和Word:不只是表格,段落也可以排序
  • 校园快递小程序(腾讯地图API、二维码识别、Echarts图形化分析)
  • 【Dify学习笔记】:Dify搭建图片文件数据分析助手
  • Kimi K2 架构深度解析:万亿MoE模型的效率革命与智能体突破
  • Linux文件系统:从虚拟接口到物理实现的架构解析
  • 【C++】5. 内存管理
  • Android Studio注释如何不从行首开始
  • gpt-5与gpt-5-fast
  • CPPIO流
  • Postman接口测试:postman设置接口关联,实现参数化
  • 当多模态大语言模型遇上视觉难题!AI视觉探索之旅
  • 视频输入输出模块介绍和示例
  • 编译 BusyBox for ARM 平台
  • 力扣面试150题--爬楼梯 打家劫舍 零钱兑换 最长递增子序列
  • Elasticsearch JS 自定义 ConnectionPool / Connection / Serializer、敏感信息脱敏与 v8 平滑迁移
  • 01-Ansible 自动化介绍与使用
  • 83. 删除排序链表中的重复元素
  • Neo4j Cypher
  • Fiddler国内中文网使用经验分享,从抓包入门到API调试进阶
  • 【读代码】深度解析 Researcher:开源自动化科研助手