新建工程
双击图标打开软件,
点击 “Project → New Project” 菜单新建工程。
弹出 “New Project Wizard”对话框
在对话框的第一项填写工程名,
第二项填工程路径,
第三项选器件,我们主芯片是EG4S20NG88,属于EG4系列
第四行选具体型号EG4S20NG88。
新建源码
右键点击 “Hierarchy→ New Source” 菜单新建源码
在弹出的“New Source Wizard”中:
第一项文件类型选择verilog,
第二项输入文件名 test,
第三项默认为工程路径,不作修改。
第四项 “Add To Project”复选项最好勾选上,这个选项会自动新建的代码加到工程中。
如果刚才忘记了勾选“Add To Project”也没关系,那就手工添加刚才创建的代码,
编写代码
可以看到默认的源码有一个名为test的Module框架。
module的主体及端口需要我们自己补充。
输入如下代码
module test(
input clk_ref,
output led_r,
output led_g,
output led_b
);
reg [32:0]cnt; //计数器寄存器
always @(posedge clk_ref) begin
cnt <= cnt + 1'b1; //计数器寄存器累加
end
//将计数器寄存器结果输出到RGB LED上
assign led_r = cnt[15];
assign led_g = cnt[23];
assign led_b = cnt[31];
endmodule
这段代码比较简单,就是设计了一个32位的计数器,将计数器的15、23、31位分别输出到板载的RGB灯上。
设置工程顶层
在test.v上右键单击“Set As Top” 菜单,将test.v设为顶层。这一步不是必须的,工具通常会自动找到顶层,只要在test.v上显示了下图中的这个顶层图标即可。
TD工具的FPGA Flow流程介绍
- Read Design ——该步分析用户源文件的语法语义的正确性, 并产生原始行为级电路结构。
- Optimize RTL ——本阶段将进行多路选择器优化、数据通路优化、特殊功能模块自动识别等。 RTL 级优化将产生包含基本门(AND、 OR、FF/Latch)和特殊功能模块的电路。
- Optimize Gate —— 门级优化包括普通逻辑的优化和映射、特殊逻辑的优化和映射等综合优化。门级优
化将产生包含逻辑单元和专用功能单元的电路。 - Optimize Placement——在得到正确的物理单元网表以后,需要对设计进行物理布局优化、 IO 单元布局、物 理单元布局和物理级逻辑优化等。布局优化将产生并处理只含有物理功能块(IOPAD、 SLICE、 RAM、 DSP 等)的电路。
- Optimize Routing——布局优化后,进行布线优化。布线优化将完成所有模块互联信号的物理连接。这一步也是用户设计实现的最后一步。这一步完成后,所有的物理信息都确定了。布线优化后可查看设计的详细信息,也可以获得准确的剧情相关信息。
- Generate Bitstream——将 FPGA 芯片中可编程开关的配置信息用二进制 0、 1 的格式表示成位流(bitstream)数据供编程下载用。 位流生成器为器件编程产生位流文件,下载工具将位流文件载入到外部的 SPI Flash 存储芯片或直接载入 FPGA 内部的配置存储器中。
综合代码
综合就是把verilog代码变成RTL网表。
双击FPGA Flow中的Optimize RTL,进行工程综合,
运行完之后可以看到FPGA Flow已完成的Read Design和Optimize RTL 流程前面多了一个对勾。
进行到这里TD工具就知道了工程的管脚信息,咱们就可以来锁定管脚了,也就是确定LED绑定到哪几个脚。
约束IO管脚
点击Tools→ IO Constraint菜单打开IO约束界面,可以看到界面的中央是芯片的封装示意图,下面的表格的第一列则是test这个模块的引脚。
作为初学者,我们一般只需要关心Location 和IOStandard 两列,
Location 用来指定管脚号,IOStandard 用来指定管脚电平标识。其它列可以保持缺省值即可。感兴趣的话可以在点击“Help→ Soft User Guide”菜单获取更多的说明信息。
那如这些脚到底锁定到哪个管脚呢?我们打开PotatoPie V4.1的原理图进行查看。
在原理图中我们可以看到LED灯分别连接到了芯片的P8、P68、P67号管脚,系统时钟刚连到P11管脚(在上图的左上脚)。
我们先锁定clk_ref,
在Location列输入P11,在IOStandard列输入LVCMOS33,因为我们的芯片是3V3供电。
这里我们先点击保存按钮保存一下约束
点击对话框的保存按钮后会弹出对话框问询是以单行还是多行格式个框存ADC文件,选择默认的Sigle Line,并且勾选 Remember my setting, 避免后保存时再弹出该对话框。
最后会弹出一个问询是否将这个ADC文件加到工程中的对话框,选择Yes
双击ADC文件打开,可以看到adc文件多一行内容,证明保存成功。
然后依次完成led_r、led_g、led_b。由于P67原理中是复用了PROGRAM_B管脚的,因此我们需要双击Device Setting进行复用IO的设置。
在弹出的对话框中可以看到done默认就是是GPIO模式。
我们只需要将program_b也改为GPIO模式即可。
进行复用这一步操作后需要再次双击Optimize RTL重新打开Tools→ IO Constraint。然后分别将led_b 约束到 P8, led_g约束到P68,led_r约束到P67。
最终管脚锁定如下图。
时序约束
时序约束是简单讲就是告诉TD工具这个设计需要跑多少M。
咱们先双击跑完Optimize Gate这个流程
然后双击Tools → Timing Wizard 打开时序约束工具的对话框。
弹出这个对话框点 “continue”即可
在弹出的对话框左侧选择Create Clock(创建时钟)
在Clock name栏填入clk_ref作为时钟的名字,
由于我们板载的时钟是10MHz, 因此我们在period一栏填入100ns。
可以看到在下面的SDC Command一栏中出现了时序约束的命令,作为初学者我们先不去关心这个命令的具体内容。
点击Targets这一栏的放大镜图标告诉工具clk_ref是从哪来的。
在左侧选中 clk_ref,
点击中间的第一按钮,右侧也出现了clk_ref.
然后点击OK即可,可以看到SDC Command一栏发生了变化,
点击上图中的Create按钮,可以看到SDC Command命令进入到了下面的输出框中
点Finish即完成时序约束, 接下来点击save按钮将时序约束保存到sdc文件中
弹出如下对话框点击OK即可.
双击test.adc我们查看一下SDC文件,可以看到文件中的内容与前面的SDC Comand内容一致.
由于本文只是为初学者介绍流程,而时序约束的内容比较复杂,作为初学者只需要知道流程中必须有这一步,对于当前这个实验时序约束做不做都可以看到实验结果,但时序约束是FPGA设计中不可缺少的一部,当然不是可有可无的, 我们后面再讨论.
编译工程
双击这个按钮编译工程
可以看到该按钮会一次跑完整个流程。
下载程序
点击这个按钮打开下载界面
可以看到如下的下载界面
插上开发板,并安装好驱动,驱动安装见这里PotatoPie 4.0 教程(0) —— TD5.6.4 软件的安装和AL-Link mini 下载器的驱动安装
然后点击下图的Refresh, 如果方框中出现如图字,则说明驱动安装成功,开发板连接无异常,
然后添加Add按钮,添加.bit文件。
选择文件
最后点击RUN按钮进行下载
可以看到demo板上的led灯如下图闪烁。
比特流的固化
前面的下载是JTAG模式,下载速度快,主要用于节省调试时间,但掉电后程序会丢失,如果想要掉电后程序不丟失,模式要改成下图模式即可,
关于各种下载模式区别可以参见下面两篇
安路(Anlogic)FPGA开发工具中EF2器件两种主要的程序烧写方式说明
安路TangDynasty(TD)使用Download工具下载程序(bitstream)
本教程工程在以下路径
没有回复内容