UISRC工程师开源站

标题: [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-02使用安路TD开发工具创建FPGA工程 [打印本页]

作者: UT发布    时间: 2024-7-28 20:19
标题: [米联客-安路飞龙DR1-FPSOC] FPGA基础篇连载-02使用安路TD开发工具创建FPGA工程
本帖最后由 FPGA课程 于 2024-7-28 20:25 编辑

软件版本:Anlogic -TD5.9.1-DR1_ES1.1
操作系统:WIN10 64bit
硬件平台:适用安路(Anlogic)FPGA
实验平台:米联客-MLK-L1-CZ06-DR1M90G
开发板板卡获取平台:https://milianke.tmall.com/

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

(, 下载次数: 410)
(, 下载次数: 404)
(, 下载次数: 414) (, 下载次数: 415)
(, 下载次数: 402)
3.3调用PLL
双击IP内部的代码,查看PLL的调用接口(由于我们提前编写的代码正确调用该PLL所以可以看到PLL包含在顶层代码的下一级中,否则会和顶层代码平级)
(, 下载次数: 424)
添加调用PLL的端口

  1. mypll mypll_u(
  2. .pllreset   (1'b0),//PLL复位
  3. .refclk     (I_sysclk),//PLL输入时钟
  4. .clk0_out   (clk0),//PLL输出时钟
  5. .lock       (pll_lock)//PLL锁住
  6. );
复制代码




修改完代码后,记得保存文件。

4添加约束文件
TD软件可以通过多种方式添加约束文件
为了可以通过向导定义约束,需要线综合下,双击综合
综合完成后,对应的符合上打了✔
(, 下载次数: 388)






(, 下载次数: 419)
4.1 如何通过向导添加4.1.1 添加IO约束
利用向导方式,一定要先完成综合,这样软件才能识别出来端口
(, 下载次数: 399)
(, 下载次数: 417)
根据原理图中的定义,正确填写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:差分对
其他一些设置暂时都用不到
(, 下载次数: 396)
设置好后,单击保存,一般选择single Line方式,阅读起来比较简洁
(, 下载次数: 374)
保存Pin脚约束到文件路径uisrc/04_pin,命名为fpga_pin.adc
(, 下载次数: 413)
之后会提示是否添加到本工程,单击YES
(, 下载次数: 392)
可以看到现在已经添加进来了
(, 下载次数: 409)
双击查看文件(具体管脚约束以实际工程为准)

4.1.2 添加时序约束
首先双击综合
(, 下载次数: 411)
(, 下载次数: 443)
由于刚刚添加完成PIN脚约束,所以会有以下警告提示单击Continue,由于我们确认代码没修改,因此继续添加
(, 下载次数: 414)
本方案比较简单,我们只添加周期约束
(, 下载次数: 360)
(, 下载次数: 402)
(, 下载次数: 399)
(, 下载次数: 419)
如果之前没有定义过时序约束文件,会提示保存文件,单击SAVE
(, 下载次数: 430)
我们不使用默认的命名,我们修改到路径uisrc/04_pin路径下,并且命名为timing.sdc
(, 下载次数: 405)
最后点击save

(, 下载次数: 416)
(, 下载次数: 439)
可以双击查看约束

create_clock -name sysclk -period 10 -waveform {0 5} [get_ports {I_sysclk}]
create_generated_clock -name pll_out0 -source [get_ports {I_sysclk}] -master_clock {sysclk} -phase 0 -multiply_by 8 [get_nets {mypll_u/clk0_out}]


4.2 如何移除约束文件
单击需要移除的约束文件,然后右击
(, 下载次数: 416)
分别移除fpga_pin.adc和timing.sdc文件
(, 下载次数: 414)
4.3 如何添加已有约束文件
有2个位置都可以添加已经存在的约束文件,一个是project Hierarchy中右击constraint添加,另外一个是在FPGA Flow中双击User Constraints中的Add ADC file和Add SDC File
(, 下载次数: 426)
分别右击constraint添加PIN脚约束文件和时序约束文件
(, 下载次数: 422)

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

(, 下载次数: 410)
6.2程序下载
单击下载按钮
(, 下载次数: 416)
可以看到已经识别到芯片
(, 下载次数: 388)
6.2.1下载bit
选择bit文件
(, 下载次数: 344)
选中后单击Run
(, 下载次数: 452)
下载成功
(, 下载次数: 380)
6.3运行结果
(该教程为通用型教程,教程中仅展示一款示例开发板的上板现象,具体现象以所购买的开发板型号以及配套代码上板现象为准。)
(, 下载次数: 417)











欢迎光临 UISRC工程师开源站 (https://www.uisrc.com/) Powered by Discuz! X3.5