[X]关闭

[米联派-安路飞龙DR1-FPSOC] FPGA基础篇连载-02使用安路TD开发工具创建FPGA工程

文档创建者:FPGA课程
浏览次数:550
最后更新:2024-09-07
文档课程分类-安路-DR1
安路-DR1: FPSOC-DR1-FPGA部分 » 2_FPGA实验篇(仅旗舰) » 1-FPGA基础入门实验
软件版本:Anlogic -TD5.9.1-DR1_ES1.1
操作系统:WIN10 64bit
硬件平台:适用安路(Anlogic)FPGA
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
本教程使用了米联客-MLKPAI-SF01-DR1M90M开发板,购买链接:https://milianke.tmall.com/


1概述
本实验以FPGA芯片DR1M90GEG484为例,同时适用于安路其他FPGA芯片
实验目的:
1:掌握基于TD创建FPGA工程的方法
2:掌握基于TD新建FPGA代码文件
3:掌握基于TD调用PLL IP CORE
4:掌握基于TD添加时序约
5:掌握基于TD添加PIN脚约束
2如何利用TD创建FPGA工程
启动TD软件
b8f406d7f6b5408ca5f0613ab44f6fb1.jpg
创建一个新的空的工程(虽然是国产FPGA厂家,但是目前国内主流FPGA厂家都是采用英文菜单,这个符合FPGA开发的习惯)
12f845611695470289fa2fcf719c3391.jpg
Project Name:新建一个fpga工程名,这里米联客的教学类fpga工程统一命名为fpga_prj
Project Path:工程路径设置,这里我们需要根据自己的磁盘和文件管理路径合理设置
Device Family:设置器件的系列,这里设置DR1,因为我们的开发板采用的是DR1M90MEG484这颗FPGA芯片
Device Name:设置芯片的名字,这里选择DR1M90MEG484
bc830b1f6d4944ea95167b71e4909682.jpg
一个空的FPGA工程创建完成后入下图所示
5d2d0966e0de477ebbbf25b674343e11.jpg
以下是对软件工具的大概介绍更多可以结合具体应用加以理解:
e48afdc4a86846cab9e837578c012771.jpg
3TD创建或者添加代码
首先根据米联客的代码管理规范,在对应的FPGA工程路径下创建uisrc路径,并且创建以下文件夹
01_rtl:放用户编写的rtl代码
02_sim:仿真文件或者工程
03_ip:放使用到的ip文件
04_pin:放fpga的pin脚约束文件或者时序约束文件
05_boot:放编译好的bit或者bin文件(一般为空)
06_doc:放本一些相关文档(一般为空)
ba0544df6ae74e2da335a3ff7a7f6a79.jpg
3.1如何新建FPGA代码文件
右击Hierarchy可以看到弹出的菜单中可以选择新建fpga代码或者添加已经存在的fpga代码
8fd89ca0bc864663a4f05f35b134580a.jpg
比如新建FPGA代码选择New Source
File Type:如下图所示,可以支持多种编程语言,这里选择verilog
50d389cdc722431fabcc72b9434e8519.jpg
File Name:设置文件名
Location:设置文件路径,这里放到uisrc/01_rtl路径下方便管理
c90646b7fff64809a736ae9175a54c2f.jpg
当只有一个文件的时候,默认是Top文件
5d99e0814a3b4d598fd208bb14f019bb.jpg
当有多个文件软件无法确认top文件的时候,可以右击文件名设置
ed595b9204a34afda456ba3ae7ec5adf.jpg
双击代码,可以看到TD默认输入了2行代码
22372d3ab80c46c6972dbd5624527845.jpg
编写以下测试代码,其中关于PLL IP核调用的部分我们提前调用了接口,用户也可以在PLL核产生后再调用
  1. `timescale 1ns / 1ps

  2. module pll_test(
  3. input I_sysclk,//系统时钟输入
  4. output [1:0]O_up_led//LED输出
  5.   );
  6.    
  7. wire        clk0;
  8. wire        pll_lock;
  9. reg [25:0]  cnt;

  10. //例化PLL模块
  11. mypll mypll_u(
  12. .reset      (1'b0),//PLL复位
  13. .refclk     (I_sysclk),//PLL输入时钟
  14. .clk0_out   (clk0),//PLL输出时钟
  15. .lock       (pll_lock)//PLL锁住
  16. );
  17. assign O_up_led = {cnt[25:24]};//输出计数器的高位用于驱动LED

  18. //计数器
  19. always @ (posedge I_sysclk or negedge pll_lock)begin
  20.     if(pll_lock==1'b0)
  21.       cnt <= 26'd0;
  22.     else
  23.       cnt <= cnt + 1'b1; //cnt power on initial value is all 1
  24. end

  25. endmodule
复制代码
3.2添加PLL IP核
7bcced9e397c47d0b93481ae1a37d677.jpg
1741a7954e6a4c6ba1dafa90359e5024.jpg
60d2844c55054741a0824a78ab011fde.jpg
f343f031e67f4dbd8242e16c1e77c162.jpg
7896ceb493c146488f79f6ca590b5c47.jpg
5640c599a1f2433389f9e10f352f4ded.jpg
f49aefc781624fffa6e6fc85bee3e903.jpg
38194007b75c4518bea8156b8f12b227.jpg
3.3调用PLL
双击IP内部的代码,查看PLL的调用接口(由于我们提前编写的代码正确调用该PLL所以可以看到PLL包含在顶层代码的下一级中,否则会和顶层代码平级)
1e0ee07db052429ba47a2f7856fe5283.jpg
添加调用PLL的端口
mypll mypll_u(.pllreset   (1'b0),//PLL复位.refclk     (I_sysclk),//PLL输入时钟.clk0_out   (clk0),//PLL输出时钟.lock       (pll_lock)//PLL锁住);
修改完代码后,记得保存文件。
4添加约束文件
TD软件可以通过多种方式添加约束文件
为了可以通过向导定义约束,需要线综合下,双击综合
963e96bdb5bc4aad9ea06fa8ff9c8fed.jpg
综合完成后,对应的符合上打了✔
90de07fa023e47079f369904a8962b69.jpg
4.1如何通过向导添加
4.1.1添加IO约束
利用向导方式,一定要先完成综合,这样软件才能识别出来端口
af9757100e274c97a750ea6db0cb9af3.jpg
47132ffac3e24a6eb6018ffdfd33a4ca.jpg
根据原理图中的定义,正确填写IO号,如下所示:
我们根据原理图填写好Location 以及IOStandard其他默认,对于一些高速应用我们可能还要设置输出输出延迟
Name:信号名字
Direction:IO输入输出方向
Bank:FPGA的IO所在的BANK(FPGA的IO会分布在多个BANK)
Location:IO的具体位置,这也是我们重点需要约束的,这里需要看原理图找到PIN脚定义
IOStandard:IO的电平模式,需要正确设置,一般单端的有LVCMOS33 LVCMOS25 LVCMOS18等
DriverStrength:驱动能力,数值越大,驱动能力越强
PullType:上拉下来类型
SlewRate:转换速度,对于低速场合选择SLOW高速场合选择FAST
InDelay:可以手动设置IO输入延迟
OutDelay: 可以手动设置IO输出延迟
DifferentioalPair:差分对
其他一些设置暂时都用不到
3bd1b5480b504708a9bf011e8b52e43b.jpg
设置好后,单击保存,一般选择single Line方式,阅读起来比较简洁
b107337432c44751b63487f6417630c9.jpg
保存Pin脚约束到文件路径uisrc/04_pin,命名为fpga_pin.adc
775cbe6f21134a6bad62ae2695ca4e94.jpg
之后会提示是否添加到本工程,单击YES
8d898513d27f408eaae36f35deb29ad2.jpg
可以看到现在已经添加进来了
c18d193bb92c4bb686cfe12804141444.jpg
双击查看文件(具体管脚约束以实际工程为准)

4.1.2添加时序约束
首先双击综合
313c34bea2e9453d84423a62f5d1c868.jpg
2851af3b11aa4cb2b9126ba9db4c88ee.jpg
由于刚刚添加完成PIN脚约束,所以会有以下警告提示单击Continue,由于我们确认代码没修改,因此继续添加
d7d915f357064d55be7d13e926da3f27.jpg
本方案比较简单,我们只添加周期约束
db0ee436bd144a499f3f15d5ac6a081a.jpg
384dd027a6f54000a58ff55189d9d825.jpg
b7e9f6bc5d9244d988dd725edcdb1be7.jpg
599f85c3dc2a4ca2a0bb0b1f573f7de8.jpg
如果之前没有定义过时序约束文件,会提示保存文件,单击SAVE前,修改时序约束文件路径
4042fefd1f4d425d98ebc1fb43c4a583.jpg
我们不使用默认的命名,我们修改到路径uisrc/04_pin路径下,并且命名为timing.sdc
625f7204d406466bbbc36f013baf5ab3.jpg
最后点击save
208f4616e29445779aa5e67d6a61b05f.jpg
aff7b23136634d3aaa8d43ba6cf1f97c.jpg
f46e039c90bd45e9a026b000d31bbf4c.jpg
可以双击查看约束
  1. create_clock -name sysclk -period 40 -waveform {0 20} [get_ports {I_sysclk}]
复制代码
4.2如何移除约束文件
单击需要移除的约束文件,然后右击
88395dfd5a2840ef80a92348748ba769.jpg
分别移除fpga_pin.adc和timing.sdc文件
ce59ef04ef504552b5497393bd7d2215.jpg
4.3如何添加已有约束文件
有2个位置都可以添加已经存在的约束文件,一个是project Hierarchy中右击constraint添加,另外一个是在FPGA Flow中双击User Constraints中的Add ADC file和Add SDC File
8945104b3ac54fc9ad570709103b6b72.jpg
分别右击constraint添加PIN脚约束文件和时序约束文件
c7db3bf5c6e548eca16aaee06f57a81a.jpg

d531c6909a754a6f80bedc876f8fd4ad.jpg
5工程编译
5.1一键编译
f528b987d1fb4ff3900b998cde8c81b8.jpg
完成编译后如下
08e861c97f4e4576a85a934bcdf09874.jpg
5.2查看Log Tree报告
14535dd53d6543a1be8f26cd279a58cc.jpg
5.3查看资源利用报告
bd2a4da78d11468792e77dfa39c88119.jpg
5.4查看时序分析报告
239960d154b3407f8f053ea3e7ac950a.jpg
7aefe74fe0a9434782d54dd5bb9257a9.jpg
6下载演示
6.1硬件连接
(该教程为通用型教程,教程中仅展示一款示例开发板的连接方式,具体连接方式以所购买的开发板型号以及结合配套代码管脚约束为准。)
请确保下载器和开发板已经正确连接,并且开发板已经上电(注意JTAG端子不支持热插拔,而USB接口支持,所以在不通电的情况下接通好JTAG后,再插入USB到电脑,之后再上电,以免造成JTAG IO损坏)

90f887d7f3dc4de0b69feda0fdd1bb66.jpg
6.2程序下载
单击下载按钮
7036c5dd79e748a98f1196881df34474.jpg
可以看到已经识别到芯片
c696ac4c3a2943f68c19bf15d8d33dcb.jpg
6.2.1下载bit
选择bit文件
d27d74a565334fa4a043f22d369f6cc9.jpg
选中后单击Run
6fa35df39f7442508112f19cade22416.jpg
下载成功
66010fac69ea4d60a641a43bd5b27de1.jpg
6.3运行结果
(该教程为通用型教程,教程中仅展示一款示例开发板的上板现象,具体现象以所购买的开发板型号以及配套代码上板现象为准。)
d2b7c0b1a8fb404b8ce98897f4f80c86.jpg

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则