注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
mars4zhu的个人空间 http://home.eeworld.com.cn/space-uid-216477.html [收藏] [复制] [分享] [RSS]
日志

【Sipeed 高云GW2A FPGA开发板】——ARM Cortex-M1软核处理器_硬件设计与点亮LED

已有 464 次阅读2022-11-27 19:11 |个人分类:FPGA

4. TangPrimer-20K开发板上运行Cortex-M1软核处理器

4.1. 适用于GoWin FPGA的ARM Cortex-M1 DesignStart简介

ARM针对FPGA领域,利用EDA软件,对自家的Cortex-M0内核的verilog源文件进行加密,使得在保护IP源代码知识产权的情况下,终端用户可以直接采用ARM Cortex-M0内核作为FPGA的复杂逻辑控制的处理器,此时FPGA里的Cortex-M0软核处理器就被命名为Cortex-M1。

高云与ARM合作,将Cortex-M1内核,以及许多芯片内IP集成,形成一个完整功能的SoC,并以加密的形式发布,并提供了SoC的参考设计,从GoWin网站上下载 Gowin_EMPU_M1_V1.6.5.zip ,解压后其内容结构以及加密后的M1内核源文件如图:

其中给出了两种不同配置Cortex-M1内核的SoC参考设计,一种带有JTAG/SW调试功能支持,另一种则不带。前者是后者的超集,包含了后者的功能,因此本实验主要采用前者,并在后续软件测试中,利用JTAG/SW的调试功能,实现代码下载、软件调试等。

4.2. FPGA软核SoC的构建

参考设计开发包针对GoWin官方的不同系列的几个开发板进行了适配,与本实验使用的TangPrimer-20K开发板接近的是DK_START_GW2A18_V2.0。后续所有操作都是根据该开发板的项目文件来进行修改移植。

该开发板有两个适配项目,一个是ddr3_example,另一个是gowin_empu_m1,出于简便考虑,先测试后者gowin_empu_m1。

gowin_empu_m1集成了多种IP核,包括GPIO、UART、I2C、SPI,以及Ethernet(RGMII接口的)、SD卡(SPI模式)、等等,如图:

4.2.1. gowin_empu_m1项目文件的概览与综合

按照FPGA开发软件的流程,打开 ref_designFPGA_RefDesignDebug_RefDesignDK_START_GW2A18_V2.0gowin_empu_m1下的项目文件,可以看到项目层次结构,与对应的文件:

综合后,可以看到资源利用率和关键时钟信号:

4.2.2. 适配TangPrimer-20K开发板的IO引脚分配

打开FloorPlanner,对引脚进行分配,由于原项目是针对DK_START_GW2A18_V2开发板,配置的IO引脚也是跟该开发板匹配,如图:

     

为了移植到本次实验用到的开发板(TangPrimer-20K+Docker),根据FPGA项目中的引脚需求和TangPrimer-20K的板载硬件资源,除了项目中的RGMII接口无法满足外,其余均可连接至TangPrimer-20K对应的硬件资源中。其中:

  1. GPIO[3:0]分配到LED,GPIO[7:4]分配到S1~S4按键,GPIO[15:8]分配到2.54mm排母上;

  2. rstn分配到按键S0,clk为板载27MHz;

  3. JTAG分配到2.54mm排母上。

  4. sdcard和spi-flash都分配到核心板上对应的信号,多出的几个信号分配到无关的LED/IO引脚;

  5. RGMII相关信号分配到Docker底板的HDMI接口上,并确保HDMI接口留空,避免信号冲突;

  6. UART0分配到Docker底板调试器的UART上,UART1、I2C、SPI分配到2.54mm排母上。

  7. 同时需要在菜单栏的Project->中,设置SSPI、MSPI、READY、DONE等多功能引脚作为通用IO引脚功能:

4.2.3. FPGA项目的编译与下载

按照EDA软件的编译流程,完成布局布线、时序、功耗分析,最终生成bitstream文件。各项流程报告如下:

  

使用Programmer软件下载到FPGA,由于没有软件代码,Cortex-M1内核处于异常状态,开发板无运行输出。

4.3. Keil软件开发和下载调试_led例程

选用的是带有JTAG/SW调试接口的Cortex-M1软核,因此可以使用Keil等开发工具进行在线代码下载、调试。

4.3.2. Keil项目的设置、编译、下载与调试

使用Keil软件打开ref_design/MCU_RefDesign/Keil_RefDesign/led/PROJECT/led.uvprojx,按照文档说明,由于本设计采用的是片内ITCM和DTCM,因此应改为对应的地址,如图:

调试初始化文件ext_debug.ini中,也应改为对应的地址:

FUNC void Setup (void)
{
        SP = _RDWORD(0x00000000);
        PC = _RDWORD(0x00000004);
}
LOAD %L INCREMENTAL
Setup();

为适配TangPrimer-20K板载的27MHz时钟频率,需要将软件代码中,system_GOWIN_M1.c文件中的SYSTEM_CLOCK改为27000000,如下:

/*----------------------------------------------------------------------------
  Define clocks
 *----------------------------------------------------------------------------*/
#define  XTAL            (100000000UL)     /* Oscillator frequency */

// #define  SYSTEM_CLOCK    (XTAL / 2U)       /* 50MHz                */
#define  SYSTEM_CLOCK    (27000000)        /* 27MHz                */

在Keil软件中开启Debug,Keil软件读取ext_debug.ini并执行代码的下载,和SP、PC寄存器的初始化,然后可以设置断点,运行、单步调试等操作:

4.3.3. 运行效果

运行效果如下:

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章