OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 725|回复: 0

[国产FPGA] 《ATK-DFPGL22G 之FPGA开发指南》第四章 Pango Design Suite软件的安装和使用(下)

[复制链接]

1061

主题

1072

帖子

2

精华

超级版主

Rank: 8Rank: 8

积分
4407
金钱
4407
注册时间
2019-5-8
在线时间
1196 小时
发表于 2023-10-25 14:27:34 | 显示全部楼层 |阅读模式
本帖最后由 正点原子运营 于 2023-10-25 14:27 编辑

第四章 Pango Design Suite软件的安装和使用


1)实验平台:正点原子 ATK-DFPGL22G开发板

2) 章节摘自【正点原子】ATK-DFPGL22G之FPGA开发指南_V1.0

3)购买链接:https://detail.tmall.com/item_o.htm?id=692712955836

4)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/fpga/zdyz-PGL22G.html

5)正点原子官方B站:https://space.bilibili.com/394620890

6)FPGA技术交流QQ群:435699340

155537c2odj87vz1z9vj6l.jpg

155537nfqovl2gg9faaol9.png

1.1.1 固化程序
这里下载的程序是.sbit文件格式,开发板断电后程序将会丢失。如果我们想要程序断电不丢失的话,就必须将程序保存在开发板的片外Flash中,Flash的引脚是和FPGA固定的引脚相连接,FPGA会在上电后自动读取Flash中存储的程序,这个过程不需要我们编写驱动代码和人为干预,只需要通过JTAG下载sfc文件即可。需要注意的是,sfc文件不是软件自动生成的,而是需要我们手动的将sbit文件转换成sfc文件。首先我们在程序下载界面的菜单栏中选择“Operations”下“Convert File”进行文件转换,操作如图 4.3.40所示              
image001.png
图 4.3.40 文件转换操作

转换文件对话框主要功能是将FPGA位流文件转换成各种格式的文件,如用于Flash配置、菊花链器件以及一些FPGA器件功能的实现。具体有Generate Flash Programming File;GenerateDaisy Chain File;Generate Multi Revision File;GenerateChain Svf File四种形式的文件转换。如图 4.3.41所示:
image003.png
图 4.3.41 Convert File Dialog对话框

1、GenerateFlash Programming File:
该功能主要用于转换生成可配置Flash的SFC文件,其界面上图所示。首先选择对应的Flash器件及其读写模式。然后选择要转换的位流文件,如果转换的位流文件为Logos系列,则还可选择数据采样的边沿和是否生成SPI X8模式。

如果用户想配置位流在Flash的起始位置,可通过在Start Address输入地址来修改位流的起始地址。例如用户输入的地址为0x24,则软件在转换时将会在在位流开始处添加0x24个FF,换句话说,位流的起始地址相对于Flash芯片的开始处偏移了0x24个字节。如果用户不需要添加用户数据,此时可直接点击OK进行转换。

如果用户需要在位流后面添加用户数据,此时可勾选Load User Data,然后在Load File Name表格中添加自己的用户数据,并可根据提供的按钮对用户数据进行位置的调整和删除。一般来说,用户数据的起始地址默认跟随在位流后面,软件会自动计算出起始地址。如果用户想修改用户数据的起始地址,一定要注意起始地址值一定要大于位流文件的大小和位流文件起始地址所偏移的大小之和。如果输入的地址不正确,软件会自动更正该地址值为默认值。
注:添加用户数据条件为:必须要有位流数据。

选择好位流文件以及调整好用户数据文件的位置后,点击OK按钮,便可生成SFC文件。如果添加的用户数据文件过多,可能会导致生成的时间较长,需要等待一段时间。

2、GenerateDaisy Chain File:
该功能主要是生成级联数据流下载文件,其界面如图 4.3.42所示。在Generate Daisy Chain File窗口,添加产生级联数据流的sbit文件,文件前面的序号为实际FPGA链的位置。用户可以通过按钮来调整位置,一定要注意的是,生成级联数据流各个数据流所对应的器件一定要和下载到实际FPGA链中的器件位置相对应。

选择好位流文件以及调整好文件的位置后,点击OK按钮,便可生成级联数据流。如果添加的位流文件过多,生成的时间较长,需要等待一段时间。
image005.png
图 4.3.42 Generate DaisyChain File窗口

3、GenerateMulti Revision File
该功能主要是生成黄金数据流及组合数据流的Flash下载文件,其界面如图 4.3.43所示。用户可在Device Family Type选择相应的器件并在Data Stream Type选择框选择所要生成的位流格式。目前所支持的格式有
(1)、SPIUpgrade Data Stream:SPI(SerialPeripheral Interface)远程升级数据流,至少有两个应用数据流时才能正确生成。
(2)、BPIUpgrade Data Stream:BPI(Byte-widePeripheral Interface)数据流,至少有两个应用数据流时才能正确生成。
(3)、MultiBoot Data Stream:多启动数据流,仅Logos、Logos2、Titan2系列支持。至少有两个应用数据流时才能正确生成。
(4)、MultiFunction Data Stream:多功能数据流,仅Logos系列支持。至少存在两个应用数据流时才能正确生成。
(5)、MasterAuto And Dual Boot Data Stream:主自加载双启动数据流,仅Compact系列支持。当且仅当有两个应用数据流时,才能进行生成。
注:组合数据流最多支持4个数据流进行组合。
image007.png
图 4.3.43 Generate MultiRevision File窗口

这里我们需要生成可配置FlashSFC文件。所以仅需在Generate Flash Programming File窗口进行文件转换操作。我们板载的flash芯片是WINBONDW25Q128M,所以厂商名称选择WINBOND,设备名称选择W25Q128MFlash Read Mode这里我们选择SPI X4,当然也可以按自己的实际需求选择其它模式,然后选择要转换的sbit文件,其它保持默认,最后点击 OK 即可,操作如图 4.3.44所示。
image009.png
图 4.3.44 Generate FlashProgramming File窗口操作

转换完成后会弹出Success(成功)窗口,点击OK即可,如图 4.3.45所示。
image011.png
图 4.3.45 Success窗口操作

固化的方式有两种,第一种是选择Configuration Mode窗口下的Spi Flash Configuration然后点击Scan Device图标,在识别到flash器件后,选择需要固化的sfc文件进行固化操作即可;第二种是择Configuration Mode窗口下的Boundary Scan然后点击Scan Device图标或者直接点击Scan Device图标(图 4.3.38 程序下载中红框内图标),先识别到fpga芯片后,在通过FPGA芯片将程序固化到flash芯片中。操作界面如图 4.3.38 程序下载所示。

由于我们的硬件设备中JTAG口没有直连到flash芯片上,所以无法通过第一种方法进行程序固化。所以这里我们选取第二种方法,开始步骤与下载程序部分介绍的相同,这里不再进行赘述,识别到FPGA芯片后我们右击芯片点击Scan Outer Flash扫描外部flash芯片,操作如图 4.3.46所示。
image012.png
图 4.3.46 扫描flash芯片操作

点击后Scan Outer Flash后,在弹出的界面里找到我们需要固化的sfc文件,双击该sfc文件或单击该sfc文件后点击Open皆可,操作如下图所示。
image014.png
图 4.3.47 选择固化的sfc文件


然后右击flash芯片单击program开始固化程序,操作如图 4.3.48所示。
image016.png
图 4.3.48 程序固化

自此程序固化完成,如想擦除可右击flash芯片单击Erase进行擦除,操作如图 4.3.49所示。
image018.png
图 4.3.49 擦除固化程序

1.1.2 创建时序约束文件
通过上文的讲解我相信大家现在已经基本学会了如何使用PDS软件了。接下来再向大家介绍一下时序约束文件的建立。

可能有人要问了,为什么要创建时序约束文件?我通过上文的步骤已经把工程跑起来了呀,功能都是正常的呀,确实对于一些简单的工程时序的要求并不是特别的严格,添不添加时序约束文件影响不大。但是对于一些复杂的工程,涉及到高频时钟,多个时钟信号,跨多个时钟域等等时序比较混乱的工程添加时序约束文件就很有必要了,不添加时序约束极有可能会导致功能不正常或者时而正常时而不正常。

那什么是时序呢,简单的讲就是时钟与数据的关系,这里我们要引入“建立时间”和“保持时间”这两个概念。大家要明白,FPGA内部是有大量的触发器的,而“建立时间”和“保持时间”就是针对触发器来讲的。要想完成一次数据的正确采样,那么就必须满足“建立时间”和“保持时间”的要求,那么什么是“建立时间”和“保持时间”呢,我们先看下图:
image020.png
图 4.3.50 时序图(图片来源于网络)

上图中的Tsu就是建立时间,它是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被稳定的打入触发器,Tsu就是指这个最小的稳定时间。而保持时间是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被稳定的打入触发器,Th就是指这个最小的保持时间。

因此我们在开发工程时一定要注意这两个时间,切忌在数据亚稳态时对数据进行采样,那么采样的数据就不准确。当然时序约束不仅仅如此,还需要考虑各个触发器的延时时间,例如数据需要从寄存器1传向寄存器2,那么假设在寄存器1进行触发时数据被准确采样,当数据从寄存器1出来是需要一定延时的,延时完成后我们再经过组合逻辑处理又会进一步延时,再之后到达寄存器2进行采样,这个时候我们就需要考虑寄存器2时钟的上升沿到来前我们的数据是否已经保持稳定并且能够满足建立时间,如果不满足那么寄存器2极有可能是在数据处于亚稳态的时候对数据进行了采样那么数据是不准确。

上文所述的是寄存器与寄存器之间的数据与时钟的关系,还有输入到输出之间、输入到寄存器之间、寄存器到输出之间以及异步清零和时钟异步进入退出等时序都需要严格的约束,否则整个工程时序混乱会导致数据错误,从而导致功能不稳定,甚至功能直接不正常。

下面就来带领大家一起创建时序约束文件,这里我们仅仅只约束一下系统时钟,给大家做个示范,更复杂的时序约束文件大家也可以自己去查找相关的资料学习。这里还以流水灯为例,我们先打开流水灯的例程。然后点击Tools选中Timing Analyzer如下图所示:
image022.png
图 4.3.51 打开Timing Analzyer工具

然后我们选择“Timing Analyzer(PostSynthesize)”之后进入如下界面:
image024.png
图 4.3.52 Report timing Wizard界面1

在图 4.3.52中,我们直接选择“Next”,因为当前的项目中我们并没有添加SDC文件,如果有已经存在的SDC我们也可以选择第二项“Select SDC File”然后进行添加也是可以的,这里就不进行过多的赘述了。
image026.png
图 4.3.53 Report timing Wizard界面2

我们点击“Next”后会跳出图 4.3.53所示界面,点击“Finish”后如下图所示:
image028.png
图 4.3.54 创建SDC文件1

image030.png
图 4.3.55 创建SDC文件2

如图 4.3.54所示为默认参数指,我们可以对“Clock name”进行名字的修改,“Sourceobject”表示源对象的端口,“Period”可以进行时钟周期的约束,“Waveform”表示波形的周期(上升沿与下降沿位置)。单击对应参数即可进行修改,这里我们需要对“Period”和“Waveform”两个参数进行修改,使其符合我们的50MHz(20ns)系统时钟,修改后如图 4.3.55所示。其中“Period”设为20表示一个时钟周期为20ns;“Waveform”设置为0(空格)10表示时钟上升沿在0ns处,下降沿在10ns处,两者之间用空格隔开,最后“ctrl + s”保存,出现如图 4.3.56所示:
image032.png
图 4.3.56 保存SDC文件

保持默认,点击“Save”后,SDC文件就已经被创建好了。返回工程界面,然后我们通过图 4.3.56中的默认路径找到flow_led.sdc文件并用编辑软件打开(例如记事本、Notepad++软件(Notepad++软件的安装详见第六章软件的安装)等),flow_led.sdc文件内容如下所示。
image034.png
图 4.3.57 flow_led.sdc文件内容

将时钟约束语句拷贝到flow_led.fdc文件中,需要拷贝的时钟约束语句如下:
  1. create_clock-name {flow_led|sys_clk} [get_ports {sys_clk}] -period {20.000} -waveform {010}
复制代码
右击flow_led.fdc后点击Open Source As Text,如下图所示:
image036.png
图 4.3.58 以文本形式打开flow_led.fdc文件

这时我们将刚刚拷贝的时钟约束语句添加到fdc文件中,如下图所示:
image038.png
图 4.3.59 约束文件

在图 4.3.59中我们可以看到一条名为“create_clock -name {flow_led|sys_clk} [get_ports {sys_clk}] -period{20.000} -waveform {0 10}”的原语约束。这条语句就是创建一个时钟(create_clock),这个时钟的名字是{ flow_led|sys_clk }(即name后的大括号中的内容,注意这里的名字是可以随意起的,但是建议大家命名的时候可以一眼看出其含义);这个时钟的周期是20ns(即period 后的大括号中的内容,这里大家要注意如果没有约束占空比,那么默认50%的占空比);映射到工程的sys_clk端口上(即get_ports后的大括号中的内容,这里映射的端口就是工程的实际端口了,这里代表输入的系统时钟);时钟的上升沿在0ns处,下降沿在10ns处(即waveform后的大括号中的内容,空格前为时钟上升沿的位置,空格后为时钟下降沿的位置,两者用空格隔开)。这样我们就把输入时钟约束好了,他就是一个严格的50Mhz标准时钟。

上述方法做起来比较繁琐,下面我们再讲解一种相对来说简约一点的时钟约束方法,首先我们要进入Pre Synthesize UCE界面,如何进入该界面我们在4.3.4约束输入小节已经讲过了(详见图 4.3.25或图 4.3.26),这里就不再赘述了,打开后界面界面如下所示:
image040.png
图 4.3.60 PreSynthesize UCE界面

打开的Pre Synthesize UCE界面默认处于Timing Constraints界面,我们点击“+”号(上图红框所圈位置),会弹出Create Clock界面,如下图所示。
image042.png
图 4.3.61 Create Clock界面

Clock name为命名时钟名,这个名字可以随意命名(建议大家命名的时候可以一眼看出其含义);Source objects为源对象(即需要进行约束的时钟信号);Period为一个时钟周期的时间,单位为ns;Rise at为时钟上升沿的位置,单位为ns;Fall at为时钟下降沿的位置,单位为ns。
点击Source objects的“…”(图 4.3.61中红框部分) 添加约束对象,界面如下图所示。
image044.png
图 4.3.62 Specify Source objects界面1

image046.png
图 4.3.63 SpecifySource objects界面2

进入Specify Source objects界面先点击Find,这时就可以在Found(发现)窗口下看到我们工程的各个信号了,选择我们需要约束的时钟信号p:sys_clk后点击“→”(流程顺序如图 4.3.62所示),或双击时钟信号p:sys_clk,这时时钟信号p:sys_clk就会出现在Selected(选定)窗口下,然后点击OK即可。再将其他参数设置如下所示:
image048.png
图 4.3.64 CreateClock界面参数设置

参数设置完后点击OK即可,这时我们在Timing Constraints界面可以看到一条新加的时钟约束如下图所示,然后我们“ctrl + s”保存或者点击保存皆可(下图箭头所指位置)。
image050.png
图 4.3.65 TimingConstraints界面

保存后我们打开fdc文件就会发现时钟约束语句已经自动添加进来了,至此时钟约束讲解完毕。

1.2 在线逻辑分析仪的使用
传统的FPGA板级调试是由外接的逻辑分析仪连接到FPGA的控制管脚,然后将内部信号引出至引脚IO上,进行板级调试。这种方法的缺点是首先我们需要一个逻辑分析仪,而逻辑分析仪一般价格都比较昂贵,且对于需要测试几十个引脚的时候,选择使用外接的逻辑分析仪就比较繁琐了。在线逻辑分析仪克服了以上所有的缺点,其借用了传统逻辑分析仪的理念以及大部分的功能,并利用FPGA中的逻辑资源,将这些功能植入到FPGA的设计当中。一般地,在线逻辑分析仪的应用原理框图如图 4.4.1所示:
image052.png
图 4.4.1 在线逻辑分析仪的应用原理框图

其中,待测设计(DesignUnder Test,DUT)就是用户逻辑,它和片内的在线逻辑分析仪都位于FPGA中。在线逻辑分析仪通过一个或多个探针(Probe)来采集希望观察的信号,然后通过片内的JTAG硬核组件,来将捕获到的数据传送给下载器,进而上传到PDS IDE以供用户查看。在PDS中,存在一个官方提供的插入调试点的软件:Fabric Inserter ,这个软件主要功能是把DebugCore自动插入用户的设计网表中生成新的设计网表,从而使用户不需要手工在 HDL代码中例化,从而达到信号采集的功能。
本小节以LED流水灯实验的工程为例,介绍这个工具的使用流程。

1.2.1 启动和调试
Inserter可以通过单击菜单栏或工具栏中的 Inserter 图标启动 Inserter 软件,或通过双击 Constraints 列表中的.fic 文件启动 Inserter,需要注意的是只有在 PDS 中添加了资源文件(.v 或.vm)后才能启动 Inserter:
image053.png
图 4.4.2 Tools选项卡

这时“Inserter”窗口就被打开了,如图 4.4.3所示:
image055.png
图 4.4.3 “Inserter”窗口

我们点击右下角的New DebugCore Unit按钮,就可以添加一个新的调试核:
image057.png
图 4.4.4 添加成功

接下来我们点击新建好的DebugCore:
image059.png
图 4.4.5 “DebugCore”窗口

“在这个界面里可以对 DebugCore 参数进行配置,这是 Inserter 软件功能的主要体现。一个DebugCore 对应界面中包含以 Trigger Parameters、NetConnections 和 PowerOn Init Parameters 为标题的标签页面,分别对应 DebugCore 不同参数的配置。可以点击 Next 和 Previous 或者直接点击标签页标题进行标签页的切换。下面对各个标签进行简要说明。

Trigger Parameters 选项卡中的配置选项分为三组,分别用于对触发端口(Trigger Port),捕获存储 (Capture & Storage)和触发条件(Trigger Condition)进行相关参数配置。触发端口相关设置包括触发端口的数量,每个触发端口下挂接的匹配单元的数量及其类型等。捕获存储相关配置包括数据的采样深度,采样时钟沿等。触发条件相关配置主要是对顺序触发的最大等级进行配置。当有存在多个 Trigger Port 时,可以通过拖动相应的 Trigger Port 页签来进行排序,或者点击 Trigger Port 页签上的“关闭”按钮来删除某一个 Trigger Port。用户也可以在 Net Connections 选项卡中对 TriggerPort 的进行排序或者删除。当仅有一个 Trigger Port 时,将不能进行排序和删除操作,在这里,我们设置触发端口数为1个,计数器禁用,Match类型为Basic,采样深度为2048。
image061.png
图 4.4.6 TriggerParameters 选项卡

Net Connections 选项卡用于将 DebugCore 的输入信号和用户 design 中的网线连接起来,尚未连接时,Net Connections 中的所有信号都为红色显示。点击 Modify Connection,会弹出 Select Net配置界面。利用 Select Net 对话框,可以把 Debug Core 的工作时钟、触发信号、数据信号与设计中的网线连接起来,方法是右侧选中Debug Core 的信号,在左侧下方选中需要连接的网线,单击 MakeConnections 按钮,即可以完成一条或者多条信号的连接。
image063.png
图 4.4.7 NetConnections 选项卡

在这里,我们选用流水灯的系统时钟sys_clk作为ClockPort,流水灯的计数器跟LED灯作为触发端口。注意:每个 DebugCore 都必须进行信号连接,其中 Trigger Port 和 Clk Port 是必须连接的信号。

注:若发现自己想要观察的信号没有找到或者位宽缺失,这是被PDS软件优化导致的,大家可以在所需查看的信号后添加防优化语句来解决。防优化语句如下:v
reg型:/*synthesis syn preserve=1*/。
wire型:/*synthesis syn_keep=1*/。
添加方法如下:
  1. reg   A /*synthesis syn_preserve=1*/  ;
  2. wire  B /*synthesis syn_keep=1*/      ;
复制代码

image065.png
图 4.4.8 ModifyConnection

PowerOn Init Parameters 选项卡用于设置在上电初始化瞬间信号的捕获条件,了解上电初始化瞬间信号的形态和稳定性。默认情况下,不使能捕获上电初始化数据。如果要使用该功能,请点击“Enable Capturing Power On Initial Data”前的复选框。
image067.png
图 4.4.9 PowerOnInit Parameters 选项卡

本次示例中,我们不会用到电初始化瞬间信号的捕获,所以PowerOn Init Parameters 选项卡我们直接略过。各项参数配置完成并完成 Net 连接工作后,点击左上角的保存按钮后退出 Inserter。返回 PDS 软件中运行 Flow 中的 Map,PDS 将自动调用插核流程。
我们点击Tools下的Debugger,启动Debugger窗口,点击如下图所示1所在的位置,就可以扫描当前连接的器件,在2处确认扫描的器件是否正确,点击3处的ok完成预配置。
image069.png
图4.4.10 Debugger窗口

随后,我们点击左上角的下载图标,如下图所示,点击1处的下载图标,之后检查2处的器件是否选择正确,点击3处的加载你已经在执行完Inserter工具之后重新运行生成的bit流文件,之后点击4处的ok后,程序将自动开始下载到FPGA内。
image071.png
图4.4.11 加载程序

等待程序下载完成后,界面会自动进行刷新后的界面如下图所示,1处可以展开触发端口列表,2处可以设置触发条件,3处可以设置触发值,4处设置触发值的数据类型,可以为bin二进制,hex十六进制,octal八进制,unsigned无符号十进制,5处可以单独对每一个触发位进行触发条件的设置。
image073.png
图4.4.12 触发端口条件设置

注意:对FPGA进行下载一定要在Debugger中进行下载,如果在Configuration工具中下载程序,在打开Debugger进行触发端口的波形捕获是可行的,但是这种操作方式会导致所抓取的触发端口本身自带的名称消失,观察起来会非常不方便。
在确保触发条件都设置好以后,我们点击如下图所示1处的Waveform进入波形显示界面,点击2处的标签设置采样方式,Singel为单次触发,Continuous为循环触发,设置好后在点击3处的开始采集图标,这时,Debugger开始采集当前的数据波形,并在窗口内显示出来。
image075.png
图4.4.13 采集到的波形

因为代码中计数器的范围是0-9999999,所以采集出来的波形会比较密集,如果想要更清楚的观察参数的数值,我们可以利用工具栏上面的放大和缩小进行进一步的观察。下图是将采集到的数据进行放大,从而观察到的波形。我们可以看出在线采集到的数据跟代码中需要实现的结果是一致的,说明在线调试抓取的数据跟代码完全一致。
image077.png
图4.4.14 抓取的详细数据
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 09:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表