pyhton做网站,外贸网站有哪些?,二合一收款码免费制作网站,网站改标题降权#xff08;一#xff09;手把手教你如何通过ARM DesignStart计划在FPGA上搭建一个Cortex-M3软核
一、ARM DesignStart计划
1.1 如何下载ARM DesignStart Cortex-M3相关文件
关于ARM DesignStart计划的介绍:ARM DesignStart计划——私人定制一颗ARM处理器 - 知乎 (zhih…一手把手教你如何通过ARM DesignStart计划在FPGA上搭建一个Cortex-M3软核
一、ARM DesignStart计划
1.1 如何下载ARM DesignStart Cortex-M3相关文件
关于ARM DesignStart计划的介绍:ARM DesignStart计划——私人定制一颗ARM处理器 - 知乎 (zhihu.com)。
在arm Developer官网[Arm Developer](https://developer.arm.com/downloads)右上方的Downloads中搜索ARM DesignStart Cortex-M3第一个即是FPGA上定制的Cortex-M3软核IP。 图1.1 官网主页界面 图1.2 官网的Downloads界面 图1.3 搜索界面 以下是我从官网下载的Cortex-M3的百度网盘链接M0也是同样的方法https://pan.baidu.com/s/1jO1cTTL89xig5wEomUTrlQ?pwd1234。
上面我废话了两句是因为我一开始在官网主页中直接搜索ARM DesignStart Cortex-M3一直找不到软核工具包只能找到相关的用户说明书Cortex-M3软核IP要到Downloads才能找到。总之是我搜索方式不对的原因给大家避个坑。
1.2 Cortex-M3 DesignStart Eval工具使用介绍
在arm Developer官网主页面中直接搜索Arm Cortex-M3 DesignStart Eval User Guide可以找到Cortex-M3软核IP的相关用户使用手册。 图1.4 在官网主页面搜素相关用户手册 图1.5 搜索结果 在该用户使用手册文件的1-17页有具体的文件结构说明。其中我们用到的我觉得比较重要的是Cortex-M3内核文件夹在下图1.5路径中 图1.6 Cortex-M3内核文件夹及路径 在cmsdkCortex-M System Design KitCortex-M系统设计工具包文件夹中有着大量官方提供的现成的MCU实现组件像串口、定时器等外设ahb、apb总线接口经过封装的FPGA内部sram存储器等这些组件都是由verilog代码实现的。如下图1.7所示 图1.7 cmsdk组件 另外一个很常用的用户使用手册是Arm Cortex-M System Design Kit Technical Reference Manual可以直接在官网主页搜索得到。这个用户手册中有很大一部分是对cmsdk工具包文件夹中的系统组件的说明例如对上图1.7中cmsdk_apb_uart和cmsdk_apb_time这两个由verilog代码实现的外设IP的寄存器构成、时序逻辑等都在该文档中有详细说明。在我们的系统实现中我就是对着这个文档对gpio、uart和timer这三个外设编写的软件驱动。该文档的具体内容如下图1.8所示 图1.8 Arm Cortex-M System Design Kit Technical Reference Manual说明手册中定时器外设具体说明 如上图可以看到定时器外设的寄存器地址偏移、位宽、描述等除此之外还有模块端口信号特征描述等。
二、如何搭建软核
在搭建SoC系统的过程中碰到过许多问题查阅了许多资料这里就不一一详细说明了我把查阅过的视频和资料都列出来 使用Keil设计基于ARM DesignStart M3软核的软件程序_哔哩哔哩_bilibili 该视频前半段是在VIVADO上搭建硬件资源后半段在配置KEIL因为我们是在安路的平台上搭建因此跳过了前面的部分看的是后半段的KEIL配置以及代码编写主要是实践操作性。 使用CMSDK搭建CortexM3SoC - 极术社区 - 连接开发者与智能计算生态 (aijishu.com) 这篇文章可以结合着下面的极术社区的视频一起看主要写了 使用CMSDK生成总线矩阵这部分比较复杂主要就是给主从设备分配端口和地址具体怎么操作我不太懂是我队友做的。硬件上添加CMSDK APB外设文中以uart为例如何将外设模块端口信号和APB总线相连连接至AHB总线上也大同小异。自定义外设简要地讲解了如何编写外设硬件代码和完成外设软件驱动。最后给出了一份硬件和软件上的参考范例。 极术公开课|【集创赛培训】基于Arm Cortex M3的SoC设计与FPGA实现_哔哩哔哩_bilibili 这是往年集创赛ARM杯的培训视频很有必要看一遍看完之后可以对整个软核的搭建有一个清晰的概念主要偏向理论性并给出整体框架概念。 GitHub - ian-lab/my_CortexM3 一个开源GitHub项目是一个完整的Cortex-M3的SoC系统范例。 目录 - Arm Cortex-M0的SoC实现 (yuque.com) 硬木课堂知识库其中一个章节就是Arm Cortex-M0的SoC实现基于安路EG4S20。这几篇文章兼有理论和实践理论上如总线的知识、SoC的组成等对在大脑中构建一个整体SoC概念很有帮助。实践上这篇文章手把手教你硬件代码如何编写KEIL上如何配置等等。但是因为这篇文章是用汇编语言进行软件编写的因此在我比赛过程中就没有参考。另外这些文章中提到的下载的文件都没有不用找和问了。
三、总体架构
3.1 整体架构展示
本系统的系统框图如图3.1。在基于ARM DesignStart计划开放的Eval版ARM Cortex-M3软核搭建片上系统硬件主要模块包括图中的ACC硬件加速器实际上还没有
ARM Cortex-M3处理器内核一、二级AHB系统总线和二级APB系统总线总线间接口和总线与外设间接口挂载在AHB和APB总线上的外设 由FPGA片上BRAM实现的程序和数据存储器ITCM和DTCM片上功能外设包括串口UARTGPIO定时器TIMER外部SDRAMFLASH SWD调试接口外部SDRAM与总线之间的高速缓存Cache。 图3.1 系统框图 以上系统框图以及顶层代码的排布都是按照系统地址递增的顺序排列的为的是能有更清晰的逻辑下面是整个系统的地址层次。
Cortex-M3的总线位宽为32位因此提供了4GB的存储器寻址空间。在我们设计的片上SOC中具有片内RAM片外SDRAM和外设驱动层电路因此具有灵活的地址映射和寻址方式。具体的地址空间映射如下图3.2所示 图3.2 地址映射图 3.2 顶层文件代码分析
我们的所有工程都会上传到我的github仓库后期也会不断做修改JimmyForest · GitHub。以下是我对着顶层文件进行的代码分析简单讲述了搭建软核的思路以及软核的框架结构
最开始的一个GLOBAL BUF这个在我们的代码的注释中以下的都是是对全局时钟走线的处理走全局时钟网络的信号具有低偏斜、低抖动以及高扇出的特点。接下来是DEBUG IOBUF对调试接口的三态处理因为安路中找不到相应的三态原语因此就用了1bz代替。后面两个是全局复位的处理。接下来的cortexm3ds_logic模块是官方提供的Cortex-M3内核即图3.1中的Cortex-M3 Core为整个系统的中央CPU。该模块的底层代码由大量的assign语句构成且所有信号均由无规律的字母和数字组成无实际含义因此具有很差的可读性。另外该内核主要有三大主机接口与一级AHB总线相连接分别是I_busInstructions指令总线D_busData数据总线和SYSTEM_bus系统总线。前两个分别是内核与ITCM和DTCM交互分别取指和数据读写系统总线还不是很懂CSDN上有说法是这条总线用来加载外设。在内核模块的后面是一级AHB稀疏总线矩阵L1AhbMtx这是AHB总线的核心部分。该模块包含多个子模块其中包括多个仲裁器、地址译码器、从机的输入级和主机的输出级模块后面两个什么意思和功能我不懂是根据注释翻译的。相比于后面的二级AHB总线模块这是一个完整的总线模块拥有总线的完整功能可以通过在第二点中2、3两小点中提供文章和视频提供的方法进行生成。在一级AHB总线矩阵模块下面的是ahb_eram此处的eram也即可理解为BRAM即为块状BLOCKRAM利用大块的RAM作为ITCM指令存储空间。之前采用分布式SRAM作为ITCM的存储空间导致存储资源不够是因为SRAM的本质是LUT查找表LUT较适合用于小容量的存储和逻辑电路的综合对于大容量的存储使用SRAM效率十分低下。在ITCM下面的是cmsdk_ahb_to_sram这个并不是DTCM存储器SRAM而是AHB总线和DTCM的接口层。下面的cmsdk_fpga_sram才是DTCM的SRAM实例化模块。这里采用分布式SRAM是因为在KEIL中配置ITCM和DTCM时。ITCM大小为64kb bitDTCM大小为16kb bit。因此DTCM大小较小采用了分布式RAM实现。接下来的是APB总线部分首先是APB与AHB的接口模块cmsdk_ahb_to_apb。后面是APB总线的核心部分cmsdk_apb_slave_mux根据名字看mux是多路选择器但模块内部不仅包含了从机多路选择器还包含了地址译码器。因为APB总线是单主机结构因此不存在仲裁器。具体的总线内容放到下一篇文章。再下面是两个挂载在APB总线上的外设串口和定时器。前面APB总线的地址译码器决定了两个外设的基地址。在APB后面的是二级AHB总线和APB总线一样AHB与AHB总线之间有一个同步桥模块cmsdk_ahb_to_ahb_sync是一级AHB总线和二级AHB总线之间的数据指令同步接口模块。在同步桥下面是AHBlite_InterconnectAHBlite是只AHB总线的简化版本AHB支持多主机而AHBlite仅支持单主机因此AHBlite在AHB总线的基础上可以简化仲裁器等大量的控制信号。例如在该系统中一级AHB总线是二级AHB总线的主机在二级AHB总线下可以挂载多个外设。AHB的AHBlite_Interconnect模块和APB的cmsdk_apb_slave_mux一样也是由地址译码器和多路选择器组成。在二级AHB总线下面是三个挂载在总线上的外设GPIO、LCD和FLASH。最后在一级AHB总线上单独挂载了一个外设外部SDRAM不挂载在二级AHB总线上是为了提高外部SDRAM的数据读写效率。数据经过总线的读写会造成时钟延迟降低数据的传输效率。在顶层文件的代码最后一行一个assign语句是系统中断IRQ信号的位宽大小为240表示该系统最大可以支持240个自定义的外部中断。如在该系统中就有定时器中断GPIO1的中断等等。