目录
1概述 1
1.1开发板性能说明 3
1.2 开发板框图说明 4
1.3 M7-L144的电源轨 5
2 Fuxi软件安装 8
2.1 Fuxi EDA software down load 8
2.2 License 申请 9
2.3 MAC 地址的获取方法 9
2.4 Fuxi软件安装 10
3 M7A12N5L144C7管脚布局 12
3.1 用户交互接口 12
3.3 M7-L144 扩展接口PINOUT 16
3.4 Clock Input 17
4 软件设计与演示示例 18
4.1 Fuxi软件安装 18
4.2 跑马灯程序 18
4.2.1 新建工程 19
4.2.2PLL的配置 21
4.2.3配置ARM内核 24
4.2.4编写FPGA代码 28
4.2.5管脚分配 29
4.2.6 Keil中新建工程编辑ARM程序 30
4.2.7库文件的介绍 33
4.2.8编写Keil代码 34
4.3程序下载 36
4.4在线调试 37
4.4.1 Keil 在线调试 37
4.4.2 FuXi 调试功能DebugWare 40
版本号 |
作者 |
发布时间 |
备注 |
V1.0 |
Jacky Xie |
20200701 |
初次发布 |
1概述
M7L144 EVM 是为评估京微齐力(北京)科技有限公司的M7系列FPGA而设计的一款评估板,M7系列FPGA具有如下特点:
资料来源于M7 Data sheet P3(第三页,页码3)
请注意M7不同的封装形式,里面包换的性能可能稍微有些差异,具体的请参考如下的说明:
(资料来源于M7 数据手册第4页)
备注: “-” 表示没有此封装或此功能。
M7系列FPGA是基于SRAM的40nm工艺的产品, 内置硬核ARM Cortex-M3处理器,片上128K Code RAM, 64K data RAM, 具有可选的16Mbit Flash 用于存放配置文件(包含Cortex M3 程序),具有丰富的外设接口: I2C,SPI, UART, USB, 10M/100M/1000M以太网等,支持IP保护方案(128 位 AES及Efuse)。用户可以免费从官网下载最新的具有自主知识产权的Fuxi软件,快速方便地设计 FPGA。
For More information , you can visit Website:
http://www.hercules-micro.com/
1.1开发板性能说明
-
1 片M7系列 FPGA (CME-M7A12N5L144C7)
-
10PIN JTAG 接口 Header 10: 用于下载及调试使用。
-
时钟:20MHz晶振时钟源for PLL CLK0 输入。
-
5V电源
电源插头输入
扩展接口引出,供用户测试使用
Header 40*3
指示灯: D1电源指示灯, D3: FPGA I/O VCC3.3V
复位开关: SW2
电源开关
串口(UART to USB CH340转换IC)
USB Mini USB
JP4跳线: 连接则为Host (OTG), 不接则为 Normal (Device).
ADC:没有外界模拟量,将接口留了出来
1.5V 1.8V,2.5V,3.3V I/O Bank 电源选择跳线:
J2: For I/O Bank3,4,5.
J3: For I/O Bank 9
J4: For VDDIO 11, VDDIO12
I/O Bank 10 直接连接的是3.3V。
备注: VDDIOx 的意思是I/OBank x的电源管脚
1.2 开发板框图说明
下图是参照HME-M7L144 实物,列出了相应的接口及外设情况,以方便大家理解和调试
M7-L144开发板预装了一个跑马灯的小程序,以方便用户验证开发板是好的还是坏的。
-
5V Adapter给M7-L144开发板供电,则电源指示灯D1就会亮。
1.3 M7-L144的电源轨
RT8010 输出1.1V,给 VDD_Core(经过滤波处理),供FPGA核供电。
(上图有错,以此文字为主)
LM1117 供电给13个I/O Bank:
通用I/O Bank, LVDS I/O Bank, DDR I/O Bank, 可配置I/O Bank, RTC I/O Bank; ADC I/O Bank
通过下图可以看出,每个I/O Bank可以单独供电,当然也可以由同一个电源供电,I/O的电源轨取决于外接设备的电平情况。
(下面的图,是借助M5的图,有点偷懒了,但是原理是一样的,只是M7-L144有13个BANK)
下图根据FPGA的架构给出了I/O与核电压的供电范围:
备注说明:
另外每个I/O Bank都可以单独供电,下面是一个示意图,请了解

M7-L144 的电源如下:
备注: 每个电源都是独立供电的,但是可以共用一个电源,电路图上要连接好。
如果您想知道具体的PIN管脚电源情况,可以通过M7 PIN List 文件获得详细的信息。
下面通过PIN List 获得的信息,列出来供大家参考:
2 Fuxi软件安装
M7L144开发板需要如下软件的支持:
-
Fuxi EDA software (Version 2019.1.0)
运行环境及要求:
安装目录最低空间要求为 2.7G, 使用内存最低要求为4G,系统要求Win7-64bit, Win8-64bit OS. Win10-64bit OS
-
Keil 5
-
M7L144 Example file
2.1 Fuxi EDA software down load
如果您的电脑没有安装京微齐力的Fuxi Software 或者您的软件版本低于2019.1.0,那么您就需要从官网下载软件,下载地址如下:
http://www.hercules-micro.com/technology/download.html
2.2 License 申请
当软件在下载的时候,我们可以同时将License 申请完毕,这样快的话,我们在下载完成的时候,Licence也收到了。
点击上图的申请License 或者点击如下链接
http://www.hercules-micro.com/technology/apply.html
我们可以看到如下的信息。

我们也可以将如下用户信息发送邮件到License@hercules-micro.com,以获取License.
-----------------------------------------------------------------------
1.公司名称(或学校):
2.公司网址:
3.部门:
4.联系人姓名:
5.联系人邮箱:
6.计算机网卡MAC地址:
7.Fuxi版本号
----------------------------------------------------------------------
2.3 MAC 地址的获取方法
(1)如果所使用的操作系统是win2000以上(win2000、NT、Winxp、Vista),在桌面上点击任务栏上的"开始"菜单,选择"运行";
(2)单击“运行”后,弹出“运行”对话框,在下拉列表框中输入“cmd”命令后,打开cmd窗口;
(3)出现“命令提示符”这一黑色对话框,在里面输入“ipconfig -all”命令,敲击键盘上“Enter”键;
(4)出现网络配置信息,在“本地连接”下方有“物理地址”,在它后面对应的一串12位的地址即为自己机器的MAC地址。
如果是Win10 系统,则可以按照如下步骤去操作:
(1) 运行CMD, 如下图在查询里面输入CMD, 然后回车。
(2)在弹出的CMD窗口里面,输入 ipconfig -all,就可以弹出如下的窗口,物理地址有好几个,选择最后一个就可以了。
2.4 Fuxi软件安装
注意:
-
安装路径不能包含中文字符或者空格,错误的安装例如:
例1:c:/中文/hercules_micro/
例2:c:/install folder/hercules_micro/
正确的如下:
例3:D:/hercules_micro/
-
安装目录最低空间要求为 2.7G, 使用内存最低要求为4G,系统要求win7-64bit, win8-64bit OS.
安装步骤:
-
进入解压目录,双击Fuxi2019.1_setup.exe,安装Fuxi,以及USB JTAG驱动
-
运行Fuxi,选择Tools-》Options,选择 EDA Tools ->License,输入获取的license key到此处;
-
此处默认已经安装完成了Keil, 关于Keil的安装,请自行安装,因为Keil已经非常成熟了,此处就不画蛇添足了。 我们需要做的就是将HEM的驱动安装好。
AGDI路径如下:

双击agdi_installation.exe, 安装AGDI 驱动,一路选择默认即可, 安装完成之后,我们再打开Keil ,随便建一个工程,然后选择器件,我们可以找到HEM的器件了,H1, M5 ,M7等,如下图:
3 M7A12N5L144C7管脚布局
3.1 用户交互接口
LED灯
Board Label |
Signal Name |
M7 L144 Pin Name |
Pin # |
D5 |
LED_D0 |
IO04_1 |
5 |
D6 |
LED_D1 |
IO05_1 |
6 |
D7 |
LED_D2 |
IO06_1 |
7 |
D8 |
LED_D3 |
IO07_1 |
8 |
D9 |
LED_D4 |
IO08_1 |
10 |
D10 |
LED_D5 |
IO09_1 |
11 |
D11 |
LED_D6 |
IO10_1 |
12 |
D12 |
LED_D7 |
IO11_1 |
13 |
数据来自于M7_L144开发板的电路图,如下:
按键
Board Label |
Signal Name |
M7 L144 Pin Name |
Pin # |
SW4 |
USER_BUT0 |
IO12_1 |
14 |
SW5 |
USER_BUT1 |
IO13_1 |
15 |
SW6 |
USER_BUT2 |
IO14_1 |
16 |
SW7 |
USER_BUT3 |
IO15_1 |
17 |
SW8 |
USER_BUT4 |
IO16_1 |
19 |
拨码开关
Board Label |
Signal Name |
M7 L144 Pin Name |
Pin # |
SW3 |
USER_SW0 |
IO17_0 |
20 |
SW3 |
USER_SW1 |
IO18_0 |
21 |
SW3 |
USER_SW2 |
IO19_0 |
22 |
复位按键及工作指示灯
Board Label |
Signal Name |
M7 L144Pin Name |
Pin # |
备注 |
SW1 |
RST |
IO43_RST_2 |
36 |
|
D4 |
N |
IO39_CFDONE_2 |
32 |
实际有连接 |
D3 |
N |
N |
N |
指示3.3V是否工作正常 |
D1 |
N |
N |
N |
指示5.5V电源输入是否工作正常 |
备注: 拿到的电路图为V1.2版本的,上边没有将此管脚PIN32焊接出来,但是V1.1硬件版本有此管脚的输出连接到了D4上,用于指示是否烧写成功。
USB接口PIN OUT
Board Label |
Signal Name |
M7 L144 Pin Name |
Pin # |
Micro USB |
USB_IP_VBUS |
VBUS |
81 |
Micro USB |
DM_IP |
DM |
76 |
Micro USB |
DP_IP |
DP |
77 |
Micro USB |
USB_IP_ID |
ID |
80 |
电路图如下:
USB 的VBUS 及ID 端口有接PRTR5V0U2X(NXP)ESD保护电平,防止损坏电脑及FPGA,电路如下:
USB ID 通过跳线 JP4(位于MINI USB旁边)可以选择USB的工作模式,如下图:
默认未连接。
当USB工作于Host 模式的时候,需要MP62341提供电源给USB外设:
MP62341默认是悬空的,应该不工作(需要实际测试一下),JP4跳线连接的时候,需要将JP1的2及3用跳线连接起来。
UART接口PIN OUT (通过大USB接口可以连接电脑)
Board Label |
Signal Name |
M7 L144 Pin Name |
Pin # |
UART1_TX |
UART1_TX |
IO03_CLK1_10 |
107 |
UART1_RX |
UART1_RX |
IO02_CLK0_10 |
106 |
UART2_RX |
UART2_RX |
IO01_UART2_TXD_10 |
105 |
UART2_TX |
UART2_TX |
IO00_UART2_RXD_10 |
104 |
UART部分的电路图如下:
我们可以通过USB连接电脑,透过CH340进行UART to USB的转换,做调试。
ADC 接口
因为电路部分已经很清晰了,就不列出了,J6 是ADC的输出端口。
3.3 M7-L144 扩展接口PINOUT
开发板上有两排I/O输出,供用户测试使用,可以对照电路图进行测试使用,本说明也摘录如下,供参考:
Bank11
BANK4
3.4 Clock Input
目前拿到的电路图上,Xin 的晶体振荡器的输入部分没有焊接,请了解
时钟是通过晶振口输入到PLL上的,如下图:
Board Label |
Signal Name |
M7 Pin Name |
Pin# |
备注 |
Y1 |
Xin |
Xin |
110 |
电路实际为焊接 |
Y1 |
Xout |
Xout |
111 |
电路板实际未焊接 |
Y2 |
SYS_CLK |
IO40_CKS0_2 |
34 |
PLL Input |
备注:时钟信号可以在I/O Editor 里面做连接,如下图:
4 软件设计与演示示例
4.1 Fuxi软件安装
我们首先需要安装京微齐力的EDA工具Fuxi, 具体的安装步骤,请参考文档
《Fuxi软件安装》后者参考前边的章节
《Fuxi软件的安装》
4.2 跑马灯程序
本部分是结合京微齐力Fuxi自带的跑马灯程序,根据小白的实际操作,做了一些细化,以便更容易理解和操作。
4.2.1 新建工程
1安装好Fuxi后,打开软件如图4.1所示:
2点击Project->New Project,选择工程的路径,填写工程文件名和顶层模块名,如图4.2所示:
图4.1 Fuxi界面
图4.2 新建工程界面
3点击Next,选择FPGA的型号,这里选择M7A12N5L144C7,如图4.3所示:
图4.3 选择M7A12N5L144C7
4点击Finish,完成工程的建立。
5接下来需要创建文件,点击Projiect->Add New Flie,出现对话框如图4.4所示,选择需要保存的路径(一般选择工程所在目录下的src文件夹),填写文件名,点击保存。
备注: 一般理解要添加一个已经存在的文件,这个理解是个误区,直接填写文件名即可。
图4.4 添加新文件对话框
6这时在左边的工程目录里就可以看见刚刚创建的文件添加到test工程中了,如图4.5所示:
图4.5 工程中的文件
4.2.2PLL的配置
利用FPGA内部的PLL输出一个时钟作为arm的运行时钟。首先对FPGA中的PLL配置。
PLL的输入时钟源,就是前边提到的那个20MHz的晶振输入
1 在Fuxi软件的菜单栏上选择Tool->Wizard Manager,将会出现对话框如图4.6所示,选择创建一个新的设计。
图4.6 选择新设计的对话框
2 点击Next,出现的对话框如图4.7所示,选择Phase-Locked Loop。
图4.7 选择PLL对话框
3 点击Next,命名模块名,如图4.8所示。
图4.8 命名模块名对话框
4 点击Next,
因为CME-M7-EVB开发板上的晶振是20M,所以在右上角Input frequency中输入20,那么PLL的clkin就为20Mhz,如图4.9所示。
图4.9 PLL输入时钟配置对话框
5 点击Next,选择输出时钟clkout0,如图4.10所示。
图4.10 输出时钟的选择对话框
6 点击Next,设置clkout0的输出时钟为200Mhz,用于提供给arm的系统时钟。
图4.11 输出时钟配置对话框
7 点击next,点击finish。在弹出的Summary中可以看到配置的PLL的信息,如图4.12所示,点击ok。此时top工程就添加了pll.v文件。
图4.12 summary
4.2.3配置ARM内核
1按照配置PLL 的步骤,执行到图4.13中的对话框,选择ARM Cortex-M3。
图4.13选择ARM Cortex-M3对话框
2点击Next,命名模块名,如图4.14所示。
图4.14 命名模块对话框
3点击Next,右边列了arm硬核的可用端口,跑马灯只需要GPIO就可以了,如图4.15所示。
图4.15 选择ARM硬核的功能对话框
4点击Next,
本例程使用刚刚配置的PLL输出的200Mhz时钟给ARM提供系统时钟,所以这里填写200。如图4.16所示。
图4.16 系统时钟的配置对话框
5点击Next,如图4.17所示,
这里用来设定arm对应的程序下载文件(*.hex),目前还没有arm工程和相应的烧录文件,等到keil编写好arm的程序时,再来设置,点击Finish,出现arm的summary,如图4.18所示,点击ok,这样arm.v也加入到工程中了。
图4.17 创建keil工程对话框
图4.18 arm的summary
4.2.4编写FPGA代码
1接下来编写顶层文件top的代码,以及例化PLL和ARM。在top.v文件中,输入代码如下:
module led (clk,rst,led);
input clk,rst;
output reg[7:0] led;
wire clk_sys;
wire [31:0] gpio_0_out_o;
wire [31:0] gpio_0_in_i;
pll PLL(
.clkin0(clk),
.clkout0(clk_sys),
.locked(rst)
);
arm ARM(
.fp_clk_sys(clk_sys),
.gpio_0_out_o(gpio_0_out_o),
.gpio_0_oe_o(rst),
.gpio_0_in_i(gpio_0_in_i)
);
assign led=gpio_0_out_o[7:0];
Endmodule
2保存文件,将top模块设置成顶层模块,如图4.19所示,设置成功后, top字体颜色将变成红色。
图4.20 设置led_keil为顶层模块
3编译。
选择菜单栏上的Flow->Return Project进行编译
,

编译时如果出现任何窗口,只要点击OK,就可以了,如果没有错误将会出现提示信息,就表示编译OK

同时会弹出软件运行的结果,如下图:
4.2.5管脚分配
点击菜单栏Tool->IO Editor,选择要分配的管脚拖动到右边芯片的对应管脚上,或者直接选择对应的IO口,如图4.21所示。
分配完成后进行保存。clk是连接到外部的时钟引脚,复位管脚是Dedicated Pin ,不需要用I/O Editor进行编辑配置(顾明思议,I/O Editor就是对普通I/O口进行编辑的),如下图:
利用I/O Editor参考前边的PIN脚分配或者参考原理图
《M7 L144原理图》,配置如下:
图4.21 管脚分配图
I/O 的电压根据实际连接的电压进行选择,驱动电流也可以进行选择,使用默认的也可以,因为LED的电流并不需要很大。
保存完成之后,最好再编译一下,看看是否有其他错误,如果没有则进行下一步Keil部分的设计。
4.2.6 Keil中新建工程编辑ARM程序
本次例程使用的Keil 版本为Keil 5, 大家可以通过Help- About uVision 查看:
1 打开keil,单击菜单栏上的Project->New μVision Project,如图4.22所示,选择需要新建工程的路径,添加工程名,点击保存。
图4.22 创建新工程对话框
2 在弹出的对话框中选择Capital Micro Device(只有安装了agdi_installation.exe程序才会在新建工程时可以选择京微齐力对应的器件),如图4.23所示,点击OK。
图4.23 cpu数据库的选择对话框
备注:如果不弹出器件框或者有任何的错误出现,均无视,我们可以在后面做修改,Keil的项目配置信息,具体的可以参考
《Keil 项目配置说明》
3 在弹出的器件选择对话框中,在Data Base中选择M7,如图4.24所示。点击OK。

图4.24 器件选择对话框
4 点击菜单栏上的File->New,点击保存,选择保存路径,及文件名,如图4.25所示。点击保存。
图4.25 保存文件对话框
5 在左边的工程目录下,Source Group1上单击右键,选择Add Files to Group,如图4.26所示。
图4.26 工程中添加文件
6 选择刚刚保存的.c文件,点击Add,此时文件就被加入到工程中了,再点击Close关闭对话框。
4.2.7库文件的介绍
首先打开Fuxi安装目录下..M73rdPartykeilM7AGPIOCME_PWM的工程文件,可以看到的工程目录如下图4.27所示:








图4.27工程目录结构
4.2.8编写Keil代码
1 继续刚刚建立的keil工程test,首先需要添加库文件到工程,按照图4.27添加。在工程文件组source group 1上单击鼠标右键,选择Manage Components,在Groups栏中修改组名为User。双击下一行空白处,添加新的组,依次为CMSIS, MDK-ARM, StdPerph-Driver,如图4.28所示,点击OK。
图4.28 添加修改组
2 将Fuxi安装目录下的.M7A_ARM_m3的文件夹复制到工程所在文件夹下,然后在StdPerph-Driver组上单击右键,选择Add Files to Group,选择.M7A_ARM_m3Driversrccmem7_uart_retarget.c文件,点击Add,接着选择.M7A_ARM_m3Driverlibm7drv.lib文件,点击Add,添加文件到组中,点击Close关闭对话框。
3 同样的方式,复制Fuxi安装目录下的.M73rdPartykeil CMSS文件夹到工程所在文件夹下,给MDK-ARM组添加.CMSISCME_M7startuparmstartup_cmem7.s文件。在CMSIS组中添加.CMSISCME_M7cmem7_it.c和.CMSISCME_M7system_cmem7.c文件。
4 单击在菜单栏下Project->Options for Target,选择C/C++标签,点击Include Paths后面的省略号,添加选择.CMSISCME_M7路径和.M7A_ARM_m3Driverinc(此文件夹内是外设驱动的.c文件)路径,点击OK。选择Output标签,在Creat Hex File前打上√,点击OK。
5 在main.c文件中,添加如下代码:
#include <stdio.h>
#include "cmem7_includes.h"
int main(void)
{
unsigned int i=0;
GPIO_Init(GPIO_GROUP_GPIO, 0x000000FF); //初始化低8位GPIO
GPIO_EnableOutput(GPIO_GROUP_GPIO, 0x000000FF); //使能GPIO低8位输出
// GPIO 32Bit, 1 enable, 0 disable 相应的位
while (1)
{
for(i=0;i<8;i++)
{
GPIO_Write(GPIO_GROUP_GPIO, 0x000000FF, ~(1<<i));
//向低8位的GPIO写入数据
// GPIO_GROUP_GPIO代表32bit GPIO, 0x000000FF 指出那些位可以输出
//~(1<<i)代表写入的数值
//引脚低电平点亮LED
udelay(100000); //延时
}
for(i=0;i<8;i++)
{
GPIO_Write(GPIO_GROUP_GPIO, 0x000000FF, ~(0x80>>i));
udelay(100000);
}
}
}
备注: GPIO_GROUP_GPIO 是枚举里面的,默认是0;是一个常量。
5 程序中涉及到的GPIO相关函数内容可参考安装Fuxi安装目录..M7A_ARM_m3Driverdoc
CME_M7_FPGA_Std Periph _Lib.chm文件,编译keil。
-
如果点击编译遇到找不到文件或者是路径问题,请参考文件《Keil 目标工程配置说明》,重点看第6点,C/C++的路径配置,因为我们主要用的是C语言,因此该路径以及相关设置是非常重要的。
4.3程序下载
-
加载ARM程序
重新回到Fuxi工程中,在工程文件arm.v上单击右键,选择Edit With Wizared,默认选择Edit an existing design项,一直选择Next,直到选择hex文件对话框,如图4.29所示。在ARM Cortex-M3 hex file前打上√, 然后选择keil刚刚生成的hex文件。点击完成,这样就把keil中的程序加载到工程中来。接下来弹出的对话框,都选择确定。
图4.29 更新ARM中的程序文件
2 选择码流输出类型
点击Tools->Options,选择Project下的Physical Flow,在output Formats中,在SPI前打√,其中JTAG是在线调试,SPI是代码定型保存。点击OK,如图4.30所示。
图4.30 Options对话框
3 再一次进行编译,然后点击Tools->Downloader,选择top_spi.acf,点击右下角的Program,进行下载。这样就可以在开发板上看到跑马灯的效果。
注意事项:
-
在下图中的refresh 一定要点击以下,以便把下载的文件更新为最新的下载文件。
-
检查方法: 下图的横框中有文件的名称,大小,生成时间。
4.4在线调试
4.4.1 Keil 在线调试
1.在keil中,单击在菜单栏下Project->Options for Target,选择Debug标签,在Use前打·,在对应的下拉菜单中选择CMR M7A-CM3,点击Settings,在出现的Cortex-M Target Diver Setup对话框中Download Function项中选择Do not Erase,如图4.31所示,点击确定。
图4.31 Coxtex-M Target Driver Setup对话框
选择Utilities标签,选择Use Target Driver For Flash Programming,在下拉菜单中选择CMR M7A-CM3,如图4.32所示,点击OK。
图4.32 Utilities标签页
如果报告 DP/AP Access Error 如下,则说明AGDI的驱动程序没有装好,重新安装一遍,就可以将下面的问题去掉。
然后再报没有找到DLL的错误
详细错误信息如下:
使用默认配置,则OK,方法就是进入Debug or Utilities, 然后点击Default 即可:
2 单击工具栏中的调试按钮

,进入调试模式,如图4.33所示。
图4.33 调试界面
4.4.2 FuXi 调试功能DebugWare
有时候我们需要监测我们的FPGA是否工作正常,这个时候就需要用到我们的DebugWare 工具了。
Fuxi-Tool-Design wizard Manger ,然后根据向导生成需要的 Debug Ware 如下图: