ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

紫光同创FPGA入门实战:PDS软件安装、约束文件编写与第一个工程跑通

紫光同创FPGA入门实战:PDS软件安装、约束文件编写与第一个工程跑通 1. 为什么选择紫光同创FPGA作为入门起点1.1 国产FPGA的现状与入门门槛这几年FPGA开发的圈子明显在扩大不再只是通信和军工领域的人在玩。我身边不少做单片机的朋友都开始往FPGA方向转原因很直接——并行处理能力和接口灵活性是MCU给不了的。但一提到入门很多人第一反应是去搞Xilinx或者Intel的板子结果卡在软件安装、License申请、器件型号匹配这些破事上热情直接消磨掉一半。紫光同创的FPGA在这两年逐渐进入大家的视野尤其是Logos和Titan系列在中小规模逻辑和接口扩展场景里性价比很突出。更重要的是它的开发工具PDSPango Design Suite对个人开发者相对友好安装包体积可控License获取流程也比国外大厂简单不少。对于想快速跑通“安装软件→建工程→写代码→约束引脚→烧录”这条完整链路的新手来说紫光同创是一个很务实的起点。这篇文章面向的是零基础或者刚接触FPGA的开发者我会把PDS从下载安装到第一个工程跑通的完整过程拆开讲重点放在约束文件.fdc/.pdc的写法上——这是很多入门教程一笔带过、但实际项目里最容易翻车的地方。你不需要有Verilog基础也能看懂安装和建工程的部分但到了代码和约束环节我会尽量把每一行都解释清楚。1.2 PDS软件的整体定位与适用场景PDS是紫光同创官方的FPGA开发套件功能覆盖了综合、布局布线、时序分析、比特流生成和下载。它的界面风格和ISE比较接近如果你之前用过Xilinx的老工具上手会很快。和Vivado那种重型IDE相比PDS的启动速度和资源占用要轻量得多我实测在一台8GB内存的老笔记本上跑中小规模工程完全没问题。它支持的器件主要是Logos系列如PGT30G、PGT60G和Titan系列。对于入门学习Logos系列足够用了逻辑单元从几千到几万不等做计数器、状态机、UART、SPI这些经典实验绰绰有余。PDS还内置了在线逻辑分析仪类似Vivado的ILA调试时序问题的时候非常方便不用外接示波器就能抓内部信号。需要提醒的是PDS的版本和器件支持是绑定的。你下载的软件版本必须包含你手上板子的器件型号否则建工程时根本选不到对应的芯片。这一点在下载前一定要去官网核对清楚别装完了才发现不支持。2. 软件安装与License配置的完整流程2.1 下载前的准备工作与版本选择去紫光同创官网的下载页面你会看到PDS有多个版本并列。这里有个坑不是版本越新越好。新版本可能对老器件的支持反而被削弱或者某些IP核的行为有变化。我的建议是先确定你板子上的芯片型号然后去查该型号推荐的PDS版本。通常板子卖家会提供配套的软件版本号直接按那个来最稳妥。下载包一般是一个压缩文件解压后里面会有安装程序和License相关的说明文档。文件大小在1GB到3GB之间取决于版本。下载的时候注意看有没有单独的器件库包有些版本把器件库拆开了需要额外下载。注意下载页面如果有“推荐版本”的标注优先选那个。我踩过一次坑用了最新版结果发现板子上的Flash型号不在支持列表里又退回去重装。2.2 安装过程中的关键选项与路径设置安装过程本身不复杂一路Next就行但有几个地方值得留意。安装路径不要有中文和空格这是所有EDA工具的通病。我一般直接装在D:\Pango\PDS_2022.1这种纯英文路径下避免后续综合的时候报一些莫名其妙的文件找不到错误。安装类型选择“Complete”完整安装把器件库和示例工程都勾上。示例工程很有价值里面包含了各种外设的参考设计后面调试的时候可以直接拿来对比。安装完成后桌面会出现PDS的快捷方式但先别急着打开License还没配。安装过程中可能会弹出驱动安装的提示主要是下载器Download Cable的USB驱动。一定要允许安装否则后面连板子的时候PDS识别不到硬件。如果当时跳过了后面可以在设备管理器里手动更新驱动指向PDS安装目录下的drivers文件夹。2.3 License获取与配置的实操细节紫光同创的License获取方式相对简单不需要发邮件等几天。在官网注册账号后进入License申请页面填写你的网卡MAC地址和器件型号系统会生成一个License文件。MAC地址的获取方法打开命令行输入ipconfig /all找到当前使用的网卡那一项复制物理地址去掉横杠就是MAC地址。拿到License文件后在PDS的安装目录下找到license文件夹把文件放进去。然后打开PDS在Help菜单里找到License Management指向该文件。如果配置成功软件标题栏会显示你的License信息器件列表里也能看到对应的芯片型号。提示License是和MAC地址绑定的换了网卡或者换了电脑就需要重新申请。如果你经常在多台机器上工作建议用USB网卡把License绑在USB网卡的MAC上换机器的时候把USB网卡带过去就行。3. 创建第一个工程从新建到综合通过3.1 新建工程的参数填写与器件选择打开PDSFile→New Project。工程名和路径都用英文路径尽量短。器件选择这一步最关键Family选LogosDevice选你板子上的具体型号Package和Speed Grade也要对应。这些信息在板子的原理图或者卖家提供的资料里都能找到。选错了器件后面引脚约束和比特流生成都会出问题。工程创建完成后左侧会出现Hierarchy视图。右键点Add Source新建一个Verilog文件。我建议第一个工程就写一个最简单的LED闪烁目的是跑通全流程不要一上来就搞复杂的。module led_blink( input clk, input rst_n, output reg led ); reg [24:0] cnt; always (posedge clk or negedge rst_n) begin if (!rst_n) cnt 25d0; else if (cnt 25d24_999_999) cnt 25d0; else cnt cnt 1b1; end always (posedge clk or negedge rst_n) begin if (!rst_n) led 1b0; else if (cnt 25d24_999_999) led ~led; end endmodule这段代码假设时钟是50MHz计数到24,999,999翻转一次LED闪烁周期是1秒。你可以根据实际时钟频率调整计数值。3.2 综合选项的设置与第一次综合写完之后点综合按钮PDS会开始综合。第一次综合可能会报一些Warning比如“未使用的信号”之类的只要不是Error就先不管。综合完成后打开Synthesize的日志看看有没有严重的时序违例。对于这个简单的LED工程基本不会有问题。综合通过后下一步是布局布线Place Route。这一步PDS会根据你的约束文件把逻辑映射到具体的逻辑单元和IO上。如果约束文件没写或者写错了布局布线会报错或者自动分配引脚导致LED不亮。实操心得综合和布局布线的日志一定要看。很多人一看报错就慌其实大部分Error都是约束文件的问题比如引脚号写错、电平标准不匹配。日志里会明确告诉你哪一行有问题照着改就行。4. 约束文件详解引脚、时钟与电平标准4.1 约束文件的作用与基本语法约束文件是FPGA开发里最容易被忽视、但实际项目里最要命的部分。它的作用是把你的Verilog代码里的端口和芯片上的物理引脚对应起来同时告诉工具这个引脚的电平标准、驱动能力、上下拉等电气特性。没有约束文件工具会随机分配引脚你的LED可能接到一个根本不存在的外部引脚上当然不亮。紫光同创PDS的约束文件后缀是.fdc有些版本是.pdc语法和Xilinx的UCF很像。基本格式是define_attribute {端口名} {属性名} {属性值}比如设置引脚位置define_attribute {led} {PAP_IO_LOC} {A3} define_attribute {led} {PAP_IO_VOLTAGE} {LVCMOS33}第一行把led端口分配到A3引脚第二行设置电平标准为3.3V LVCMOS。这两行是每个IO都必须有的缺一不可。4.2 引脚约束的写法与常见错误引脚号从哪里来板子的原理图上会标注每个外设连接到FPGA的哪个引脚。比如LED接在A3按键接在B5晶振接在C7。你需要把这些信息逐一翻译成约束语句。常见的错误有几种一是引脚号写成了原理图上的网络标号而不是FPGA的引脚编号这两个是不同的东西二是电平标准写错比如板子是1.8V的IO却写了LVCMOS33轻则不工作重则烧引脚三是漏掉了某些端口工具会自动分配导致功能异常。注意每个端口的PAP_IO_LOC和PAP_IO_VOLTAGE必须成对出现。只写位置不写电平标准工具会报错。电平标准要查板子的原理图或者问卖家不能凭感觉写。4.3 时钟约束与时序分析入门除了引脚约束时钟约束也很重要。PDS需要知道你的时钟频率是多少才能进行时序分析。时钟约束的写法define_attribute {clk} {PAP_IO_LOC} {C7} define_attribute {clk} {PAP_IO_VOLTAGE} {LVCMOS33} create_clock -name clk -period 20 -waveform {0 10} [get_ports {clk}]-period 20表示时钟周期是20ns对应50MHz。-waveform {0 10}表示上升沿在0ns下降沿在10ns。这个约束告诉工具时钟的频率和波形布局布线时会根据这个来优化时序。对于入门工程时钟约束不是必须的但不写的话时序分析结果没有参考意义。养成写时钟约束的习惯后面做复杂设计的时候会轻松很多。5. 比特流生成与下载验证5.1 生成比特流前的检查清单布局布线通过后就可以生成比特流了。但在点Generate Bitstream之前我习惯做几个检查约束文件里所有端口都覆盖了吗电平标准都对吗时钟约束写了吗综合和布局布线的日志里有没有Critical Warning生成比特流的过程可能需要几分钟取决于工程大小。完成后会生成一个.bit文件这就是最终要下载到FPGA里的配置文件。5.2 下载器的连接与烧录步骤把下载器通常是USB Cable一头接电脑一头接板子的JTAG接口。板子上电打开PDS的下载工具Downloader。在下载工具里选择正确的下载器型号和JTAG链然后扫描器件。如果能扫描到芯片ID说明硬件连接正常。加载.bit文件点击Program。下载完成后板子上的LED应该开始闪烁。如果不闪先检查LED的引脚约束对不对再检查时钟频率和计数值是否匹配。有时候板子的晶振不是50MHz比如是25MHz那计数值要相应减半。实操心得下载的时候如果提示“Device ID mismatch”多半是器件型号选错了。回去检查工程设置里的Device和Package确保和实际芯片一致。另外有些板子的JTAG接口顺序和下载器不一致需要交叉一下TCK和TMS具体看原理图。5.3 在线逻辑分析仪的使用初探PDS内置的在线逻辑分析仪Pango Logic Analyzer是调试利器。你可以在代码里插入ila核抓取内部信号的波形。比如你想看cnt的计数值就把cnt接到ila的探针上重新综合布局布线后下载然后在分析仪界面设置触发条件就能看到实时波形。这个工具在调试状态机、接口时序的时候特别有用。入门阶段可以先不用但要知道有这么个东西后面遇到问题的时候能派上大用场。6. 常见问题排查与避坑经验6.1 综合报错与约束冲突的排查思路综合报错最常见的原因是语法错误和端口未定义。Verilog对大小写敏感模块名和文件名最好一致。如果报“Cannot find module”检查文件名和模块名是否匹配以及文件是否添加到了工程里。约束冲突通常表现为“IO location conflict”或者“Voltage conflict”。两个端口分配到同一个引脚或者同一个Bank里的IO电平标准不一致都会报这类错误。排查方法是打开约束文件逐行检查引脚号和电平标准确保没有重复和矛盾。6.2 下载失败与硬件连接的检查方法下载失败的原因很多按以下顺序排查下载器驱动装了吗设备管理器里能看到吗板子供电正常吗JTAG线序对吗芯片型号选对了吗我遇到过最常见的是驱动没装好设备管理器里显示黄色感叹号重新安装驱动就解决了。还有一种情况是板子的JTAG接口被其他程序占用了比如同时开了两个下载工具。关掉多余的软件重新扫描器件。6.3 入门阶段最容易被忽略的五个细节第一工程路径有中文或空格导致综合失败。第二约束文件里端口名和Verilog里的不一致大小写不匹配。第三时钟频率搞错LED闪烁速度不对。第四下载器线序接反TCK和TMS交叉。第五License过期或MAC地址变更软件功能受限。这些问题看起来简单但每一个都能让新手卡半天。我的建议是每做一步都保存工程遇到问题先看日志日志里90%的情况会直接告诉你哪里错了。7. 从第一个工程到实际项目的扩展方向跑通LED闪烁之后你可以逐步增加外设按键输入、UART通信、SPI驱动、PWM输出。每加一个外设就多写一组约束多调一次时序。这个过程重复几次你对PDS和约束文件的理解就会从“照着抄”变成“知道为什么这么写”。再往后可以尝试用PDS的IP核生成器比如生成一个FIFO或者RAM看看工具自动生成的约束和代码是什么样的。紫光同创的IP核生态虽然不如国外大厂丰富但常用的基本都有而且文档是中文的读起来比英文手册轻松不少。我个人在实际操作中的体会是FPGA入门最难的不是写代码而是把工具链跑通、把约束写对。代码可以慢慢学但工具链的问题会直接劝退。所以第一个工程的目标不是写出多牛的逻辑而是把“安装→建工程→写代码→约束→综合→布局布线→生成比特流→下载”这条链路完整走一遍。走通了后面就是在这个框架里填内容。最后分享一个小技巧把每次工程的约束文件单独存一份按板子型号分类。下次用同一块板子做新工程的时候直接把约束文件复制过来改端口名就行省去重新查原理图的时间。这个习惯我坚持了两年至少省了几十个小时的重复劳动。
返回列表