深入理解FPGA(Cortex-M0片上系统Soc搭载及代码编写调试)
创始人
2024-11-04 18:38:04
0

深入理解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,有了一个处理器,可以对指令进行处理和传达。

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

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

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

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

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

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

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

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

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

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

相关内容

热门资讯

两秒就懂!微信斗牛房卡找谁买,... 斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享受...
重大通报,金花房卡代理零售天狗... 今 日消息,天狗大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
创建金花房间链接教程/金花链接... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
我来教你/牛牛房卡游戏代理黑鹰... 黑鹰众玩是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
两秒就懂!拼三张房卡如何购买,... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:56001354许多玩家在游戏中会购买房卡来享...
微信牛牛链接怎么制作/微信炸金... 微信炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡...
我和你安卓系统下载,下载与个性... 亲爱的读者,你是否也像我一样,对安卓系统下载充满了好奇和期待?想象一个全新的世界在你指尖轻轻一点间展...
推荐一款!金花房卡出售新超圣/... 微信游戏中心:新超圣房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或相关小程序...
IA解析/金花房间怎么创建烛龙... 烛龙大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
两秒就懂!炸金花链接房卡怎么搞... 炸金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:71319951许多玩家在游戏中会购买房卡来享...
玩家攻略,金花微信链接市场价格... 今 日消息,神盾大厅/新天道房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更...
ia实测“炸金花房卡链接怎么买... 新圣游是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:86909166许多玩家在游戏中会购买房卡来享...
一分钟了解!牛牛房卡制作链接时... 时光互娱是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
正规平台有哪些,斗牛房间怎么创... 正规平台有哪些,斗牛房间怎么创建的至尊大厅/房卡微信链接Sa9Ix苹果iPhone 17手机即将进入...
两秒就懂!拼三张房卡如何充值,... 拼三张是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:66336574许多玩家在游戏中会购买房卡来享...
ia攻略/金花房卡制作链接九哥... 九哥联盟是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:【3329006910】或QQ:332900...
正版授权“金花链接如何创建房间... 天王大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
头条推荐!游戏推荐斗牛房卡出售... 头条推荐!游戏推荐斗牛房卡出售悠悠众娱/房卡链接怎么获取Sa9Ix苹果iPhone 17手机即将进入...
正版授权!牛牛房卡哪里有卖的人... 今 日消息,人皇大厅房卡添加微信33549083 苹果今日发布了 iOS 16.1 正式版更新,简单...
正版授权!牛牛充值房卡新详心/... 微信游戏中心:新详心/天王大厅房卡在哪里买打开微信,添加客服微信【88355042】,进入游戏中心或...