深入理解FPGA(Cortex-M0片上系统Soc搭载及代码编写调试)

这篇具有很好参考价值的文章主要介绍了深入理解FPGA(Cortex-M0片上系统Soc搭载及代码编写调试)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

深入理解FPGA

FPGA到底是什么,FPGA其实本身只是一个个孤立开来的器件或者模块,没有任何的联系,我们可以通过FPGA工具,例如Quartus、TD导入芯片的资料,这样就会有芯片的管脚图和一些IP核,这些IP核分为Primitive Core和Soft Core。Primitive Core就是硬核,例如SDRAM,ADC等,这是不需要代码的,因为相当于已经有一个专门用于这个功能的芯片,我们只需要直接利用就可以,把管脚对应到我们需要的管脚,例如PLL,我们直接去拿来用就可以产生非常精准的周期脉冲信号。还有一些软核Soft Core,软核是什么呢,就是比如说我们编写的每一个module其实都可以看作软核,那么为什么板卡自带的软核那么长而且我们看不懂呢,其实是因为公司为了保护自己的IP(知识产权),将这些代码加密了,一般是门级网表的形式,让我们举SD_Card作为例子。这个软核是导入板卡后自带的,那么这个软核大概起到了什么作用呢,其实就是我们将这个软核的Input和Output配置到对应的引脚上,或者说信号上,这个IP软核就会完成对应的功能,对于SD卡来说就是读操作和写操作,这些操作的具体实现就不用我们自己写了,我们只需要阅读官方的使用文档便可以直接使用这些软核。那么为什么例程里面没有用这个自带的IP软核而是自己写SD卡的Read和Write模块呢,因为首先这个软核是加密过的,你不知道他内部具体干了什么,你只能使用它最终的结果,故而不太容易改动,灵活性较差。而自己写模块的话其实也可以理解为自己设计了一个软核,而且可以满足你自己的需求,而且你看得懂,并且可以修改,故而很多程序使用的都是这种办法。

我们来到下一个问题,我们的目标是搭建Soc(片上系统),首先我们需要去官网下载Cortex-M0的软核,那么这个软核又是个什么东西呢,如果他不牛的话为什么会有那么多人用他这个软核呢。其实我们了解后我们就知道设计一个这样的软核很厉害。这个软核里面使用的是AHB总线协议,然后还有JTAG调试接口等。我们把这个软核部署到FPGA上之后(配了几个对应的管脚后),我们相当于有了一个CPU,有了一个处理器,可以对指令进行处理和传达。

cortexm0的soc设计,FPGA,Cortex-M0,Soc,fpga,arm开发,c语言

相当于是这么一个东西,我们有了一个处理器,他有对应的指令集架构等。

让我们先继续说回FPGA,当我们将FPGA的代码写好后,其实我们是在重排板卡上面的各个电路器件,通过生成的bit流使板卡上的资源呈现出我们想要的效果。这个时候FPGA已经为我们所用了。

此后我们实例化顶层模块时,我们实例化那个Cortex-M0软核的时候,我们相当于给了他一个时钟、复位信号、调试信号等,然后对他的IRQ(中断向量),看门狗等做了一些设置,可以理解为我们在对CPU做一个初始化的设置。随后我们可以往AHB上挂载一些单元,然后我们可以通过一些信号来控制是哪个单元的读写存储等功能,稍微具体一点就是有一个AHBlite_Decoder可以解码看出主机选择进行通信的是哪一个单元等等信息,然后通过XXX_AHBlite和总线进行数据的传输,当然还有一个XXX的module(也可以看成一个软核),去实现我们想要的功能,除了这些。我们还需要在AHBlite_Interconnect中增添从机与主机进行通信必须用到的的地址总线,数据总线等等,我们还需要在AHBlite_SlaveMUX中添加我们所增添的从机,该模块用于选择是哪一个从机与主机进行通信。

cortexm0的soc设计,FPGA,Cortex-M0,Soc,fpga,arm开发,c语言

以上所有的操作就相当于搭建好了一个完善的通信系统以及可以进行调试的系统,并且可以实现我们想要的功能。

那么接下来我们将讲如何控制这个CPU。

接下来我们来到了另一个软件,可以是Keil可以是CCS,在上面选择的是你所使用的IP软核,例如Cortex-M0,此时选择的不再是板卡型号了,因为现在我们相当于我们在使用一个CPU,所以自然和板卡的型号无关了。

那么我们是怎么控制这个CPU的呢,首先我们需要一个Startup启动文件,这个文件里存放的是一些汇编代码,大致是干了什么呢,首先是中断向量表

cortexm0的soc设计,FPGA,Cortex-M0,Soc,fpga,arm开发,c语言

下面通常含的是要跳转到哪些模块等等。那么随之而来的疑问是,板卡怎么知道我的代码是控制LED灯的还是控制HDMI的呢?其实是通过地址的方式,我们看一个GPIO的流水灯例程,我们在TD软件中可以看到我们给流水灯分配的地址是0x40000000到0x4000000f,然后这个地址呢有我们写的流水灯的module,就是这个流水灯可以干什么,所以现在我们就差一个可以控制流水灯的信号。

cortexm0的soc设计,FPGA,Cortex-M0,Soc,fpga,arm开发,c语言

cortexm0的soc设计,FPGA,Cortex-M0,Soc,fpga,arm开发,c语言

这个信号其实就在Keil中,通过keil的一个文件来制定代码的位置(一般是一个结构体),例如我们申明了一个Waterlight结构体,结构体的起始指针指向0x40000000,然后我们就可以对板卡进行控制。可以看到结构体如下。

cortexm0的soc设计,FPGA,Cortex-M0,Soc,fpga,arm开发,c语言

    随后我们在main.c中编写代码再利用JTAG接口调试,就可以控制FPGA达到我们想要的效果。我们可以生成.hex文件来控制FPGA,只需在TD中将地址指向hex文件即可,同时我们可以通过JTAG接口进行调试。文章来源地址https://www.toymoban.com/news/detail-859217.html

到了这里,关于深入理解FPGA(Cortex-M0片上系统Soc搭载及代码编写调试)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • (一)手把手教你如何通过ARM DesignStart计划在FPGA上搭建一个Cortex-M3软核

    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。

    2024年02月04日
    浏览(39)
  • FreeRTOS在Cortex-M系列内核中遇到的关于系统滴答中断的问题

    众所周知,在Cortex-M内核中,系统节拍由Systick时钟提供,当配置好系统滴答时钟后,每次时钟中断就会触发中断处理函数 xPortSysTickHandler(),   这部分主要是依靠  xTaskIncrementTick(), 来判断任务切换是否在此次系统时钟中断时被需要。如果是,则PendSV标记置位,等待触发PendS

    2024年02月08日
    浏览(44)
  • 【ARM CoreLink 系列 1 -- SoC 片上互联介绍】

    下篇文章:【ARM CoreLink 系列 1.1 – CoreLink 系列 产品介绍】 在摩尔定律的推动下,集成电路工艺取得了高速发展,单位面积上的晶体管数量不断增加。片上系统(System-on-Chip,SoC)具有集成度高、功耗低、成本低等优势,已经成为大规模集成电路系统设计的主流方向,解决了

    2024年02月07日
    浏览(44)
  • 【ARM Cortex-M 系列 2 -- CPU 之 Cortex-M7 介绍】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 上篇文章:ARM Cortex-M 系列 1 番外篇-- Cortex-M0, M3, M4, M7, M33 , M35P 差异 下篇文章:ARM Cortex-M 系列 2.1 – RT-Thread Cortex-M7 异常处理及 hardfault 处理分析 Cortex-M7是基于ARMv7架构,ARMv7 架构主要分为以下三类: 其中 Cortex-M 系列应用

    2024年02月17日
    浏览(36)
  • 【ARM Cortex-M 系列 1.1 -- Cortex-M33 与 M4 差异 详细介绍】

    请阅读 【嵌入式开发学习必备专栏 之 Cortex-Mx 专栏】 在移植 RT-Thread 到 瑞萨RA4M2(Cortex-M33)上时,遇到了hardfault 问题,最后使用了Cortex-M4中的调度相关的函数后,OS 可以正常调度了。所以这里做下 M33与 M4的关系梳理。 ARM Cortex-M33 和 Cortex-M4 都是 ARM 公司设计的32位RISC微处理

    2024年01月21日
    浏览(43)
  • 【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33 差异】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M0/M0+ 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU)核心。这个核心是基于 ARMv6-M 架构设计的, 只支持 56 条指 令的小指令集,大部分指令是 16 位指令, 是 ARM Cor

    2024年02月17日
    浏览(43)
  • 20230426 cortex-A7 cortex-M4核综合实验

    cortex-M4核综合实验 1.通过配置开发板LED1/LED2/LED3三盏灯 2.当KEY1/KEY2/KEY3/光电开关/火焰传感器/人体红外中断触发,需要完成以下内容 1)中断触发,在串口工具打印一句话 2)中断触发,对应LED灯状态取反 3.需求:实验中的内容,需要在一个工程下配置,代码编写 usart.h gpio.c cort

    2024年02月02日
    浏览(38)
  • ARM Cortex-M3内核

    目录 ARM Cortex-M3内核 存储器系统 外设接口 时钟和电源管理 中断控制器 DMA控制器 STM32F1系列微控制器是一款基于ARM Cortex-M3内核的嵌入式芯片,其架构组成主要包括以下几个方面:  ARM Cortex-M3内核:STM32F1系列微控制器采用了ARM Cortex-M3内核,该内核是一种高性能、低功耗的32位

    2024年02月07日
    浏览(42)
  • arm cortex-m 架构简述

    本文仅讨论 cortex-m0/m0+/m3/m4/m7 armv8架构暂不讨论 cortex-m0/m0+/m1 基于 ARMv6-M 架构 cortex-m3 基于 ARMv7-M 架构( ARMv7-M 随 cortex-m3 处理器一起发布) cortex-m4/m7 基于 ARMv7E-M 架构( ARMv7-M 随 cortex-m4 处理器一起发布) corte-m处理器都支持Thumb-2指令集(既支持16位指令,也支持32位指令)。 上图

    2024年01月16日
    浏览(43)
  • 【ARM Cortex-M 系列 1 -- Cortex-M0, M3, M4, M7, M33, M35P 差异】

    请阅读 【ARM Coresight | AMBA BUS| Armv8/v9 | GCC 专栏导读】 下篇文章:ARM Cortex-M 系列 2 – CPU 之 Cortex-M7 介绍 Cortex-M0/M0+ 介绍 Cortex-M0 是 ARM 公司推出的一款微控制器(MCU)核心。这个核心是基于 ARMv6-M 架构设计的, 只支持 56 条指 令的小指令集,大部分指令是 16 位指令, 是 ARM Cor

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包