资讯动态

紫光同创PDS中IP Core安装与使用完全指南:从License到仿真

发布时间:2026/9/28 17:57:41 来源:尧图企业网站定制
如果你跟我一样先在Vivado或者Quartus上把FPGA整套流程跑熟了某天因为项目国产化需求拿到一块紫光同创的板子那恭喜你接下来最磨人的通常不是Verilog语法而是PDS这个软件本身的陌生感。尤其是IP core这一块很多新手不是不会写代码而是卡在“PDS里到底怎么把PLL、FIFO这类现成模块装进工程”这一步。IP core说白了就是芯片厂商提前做好的功能模块锁相环PLL、FIFO缓冲、RAM/ROM存储、乘法器这些都属于基础IPDDR控制器、MIPI、PCIe这些高速接口则是复杂IP。你当然可以自己写一个PLL配置模块但既没必要也容易出错。用IP core就像拼乐高把验证过的模块插进工程、参数调对就行。问题是PDS这个国产工具链的IP管理方式跟Vivado差别不小有些IP还得单独下载安装包加上中文资料少、网上教程参差不齐新手经常在这一步消耗大量时间。这篇文章我把从装PDS软件、申请License、装IP包到例化仿真、排查报错的完整路径写一遍重点讲文档里不写、论坛里没人细说的细节。刚转国产FPGA的工程师、在学校实验室拿到紫光同创开发板的学生、做国产化替代项目的团队都可以直接照着走。1. 为什么新手总在PDS的IP core这一步卡住先聊一个现象。在Vivado里面IP核基本是装完软件就自带打开IP Catalog找想要的核双击配置几十分钟就能跑通一个带PLL的工程。但PDS给我的第一感觉是完全两回事基础IP虽然也在界面里但不少工程案例里需要用到的复杂IP并不在默认列表里得自己去下载对应版本的IP包手动装进软件。很多从Xilinx那边转过来的同事第一次用PDS打开IP配置界面之后第一反应是“我的IP列表怎么是空的”然后就开始折腾各种莫名其妙的操作。另一个更隐蔽的问题是PDS里生成的IP core产物形式和Vivado不一样。Vivado生成的IP在工程里会以.xci文件管理综合时会自动带上IP的网表和约束。PDS这边IP生成后是一套文件包括例化模板、约束文件、仿真模型有些IP甚至只给加密网表代码里根本看不到内部逻辑。新手如果在综合后看不到IP内部模块第一反应往往是“是不是装错了”然后去重装浪费大量时间。还有一类问题出在工具本身的操作习惯上。PDS支持中文界面中文对我这种英文不好的老工程师友好但问题也随之而来比如中文翻译和网上教程里的英文菜单名对不上你搜到的教程说“Tools - IP Compiler”你的界面里显示“工具 - IP编译器”一步对不上就容易卡住。我带的几个新人里至少两个是栽在这种“中英对照”上的。所以这篇文章不光是教你怎么点按钮还把背后的逻辑讲清楚IP core在PDS里为什么这么管理、生成文件分别是什么用途、报错信息对应哪个环节出了问题。搞懂这些换新版本软件你也能自己快速上手。2. 装PDS之前先想清楚的几件事版本、License和安装包很多人拿到软件安装包就直接下一步下一步结果装完了才发现版本不对、License无效甚至工程都建不了。PDS这个软件跟Vivado一样版本和器件强相关先想清楚再动手能省下半天时间。2.1 版本怎么选才不会踩坑紫光同创的FPGA目前用得比较多的是Logos系列和Titan系列不同系列的器件需要PDS版本支持。新手最容易忽略的是官方开发板自带的例程工程是用特定PDS版本创建的高版本未必能直接打开低版本工程反过来更不行。我的做法是拿到开发板先看资料包里写了推荐哪个PDS版本就装那个版本不要图新非要装刚发布的版本。之前一个朋友装了最新版PDS结果官方例程是两年前的版本工程直接打不开IP核还提示版本不兼容最后卸了重装折腾一晚上。如果你是自己买的核心板去官网看看器件对应的PDS版本说明一般都有对照表。2.2 License申请容易被忽略的细节国产EDA工具的License机制跟国外工具大同小异PDS正常用的是节点锁定License也就是说License文件和你电脑的MAC地址绑定。申请的时候需要填网卡MAC这个流程本身不复杂但有几个细节很坑。一是填MAC地址的时候注意你电脑有多个网卡的话填哪个。有的机器有有线网卡、无线网卡还有虚拟机的虚拟网卡申请时填了无线网卡结果后来一直插着网线用License不认。所以申请之前先把MAC地址查清楚用ipconfig /allWindows或者ifconfigLinux看一下挑一个不常改动的物理网卡地址。二是系统时间。License通常有个有效期如果你的系统时间被人为改过或者主板电池没电导致时间不准PDS会直接判定License非法。这问题隐蔽我之前遇到过装完软件一切正常过了几天突然报License错误排查了半天发现是系统时间自动同步出了问题。三是License文件放哪。PDS一般会让你在首次启动时指定License文件路径有人图省事放在桌面后面清理文件把它删了再也没管软件就再也起不来了。建议在非系统盘建一个专门的目录比如D:\pds_license存放License文件避免误删。2.3 安装包下载和校验安装包尽量从官网或者官方渠道下载这个不用多说。需要注意的一点是PDS安装包比较大下载过程中断或者文件损坏的情况我见过不止一次。下载完最好对比一下官网提供的MD5校验值用certutil -hashfile 文件名 MD5命令就能算出来对得上再安装。另外Windows下安装的时候杀毒软件和Windows Defender最好先暂时退出。PDS这类EE工具破解倒是没有但软件里有一些License管理相关的组件和脚本某些杀毒软件会误报轻则拦截组件导致安装不全重则安装到一半直接失败。装完再开回来就行。2.4 安装路径别带中文和空格这条很基础但踩的人最多。C:\Program Files\Pango\PDS这种默认路径可能没问题但有人喜欢自己改路径改成D:\FPGA工具\PDS结果编译的时候各种莫名其妙的问题。PDS底层用的编译工具链对路径里的非ASCII字符支持不好报错信息还不会直说“路径有问题”而是报一些看起来无关的错误。包括后面安装IP包、建工程、写Testbench任何路径都养成用纯英文、不带空格的坏习惯。我现在的做法是统一用D:\fpga\pds\、D:\fpga\prj\这种短路径简洁好找还省事。3. 完整安装与首次启动配置从解压到能建工程准备功夫做足之后安装本身其实不复杂但有几个环节需要留意。3.1 Windows安装的关键操作拿到安装包先右键“以管理员身份运行”。不要双击就完事PDS在安装过程中要写注册表、装驱动、建环境变量权限不够会静默失败。安装过程中按提示走中间有一步是选择安装组件默认全选即可不要为了省空间去掉一些看不懂的组件你永远不知道后面哪个IP会用到哪个库。安装时间取决于电脑性能一般十几分钟到半小时。装完后别急着打开软件先重启一次电脑让环境变量和驱动生效这个细节能帮你避开“装完了找不到License”之类的怪问题。我一开始就是没重启直接开软件结果提示无法连接License服务重开三次都一样重启后才正常。3.2 首次启动时的License配置首次打开PDS会弹出License配置界面两种方式一种是直接指定License文件路径另一种是填写License Server地址如果你的公司在用浮动License。个人开发和学习选第一种就够。指定文件路径之后软件会读License并校验通常界面上会显示License的授权类型、到期时间和包含的功能模块。注意看一下功能模块列表里有没有IP Compiler相关功能有些定制化授权可能不包含特定IP的Feature导致后面配置IP时提示“License for feature xxx not found”。3.3 检查安装是否真的成功了怎么判断软件装好了不是能打开界面就行我的检查清单是能正常新建工程选择目标器件型号不报错。菜单栏能打开IP Compiler且界面上能看到基础IP列表。打开安装目录下的examples文件夹里面有官方例程能完整综合一个简单例程不报错。命令行输入pds或相关命令能识别如果配了环境变量。第一、二点最重要直接对应后续IP使用的基础。3.4 认识PDS的目录结构安装完之后花几分钟看一下PDS的安装目录你会少踩很多坑。一般会有几个关键目录bin放可执行文件ip放IP库examples放官方例程tools放第三方工具链。后续安装独立IP包时常见的方式就是把IP包内容放到ip目录下或者在IP Compiler界面里指定IP包路径让软件自己导入。Linux版本的话还需要注意目录权限和依赖库比如64位系统要装好32位兼容库否则软件某个组件起不来。我在Ubuntu上装过一次就是缺库导致综合软件启动失败后来用ldd查了一下依赖补齐才跑起来。4. IP core从哪来自带IP和独立IP包的区别这是PDS和Vivado最大的不同点也是标题里“IP core安装”这个说法的来源。搞懂这一节你基本就能避开一半的坑。4.1 PDS自带的常用IP有哪些装完PDSIP Compiler里默认会带一批基础IP包括PLL锁相环、FIFO、RAM、ROM、乘法器、移位寄存器这类通用模块。这些不用额外安装直接在IP Compiler里新建就能用。基础IP的覆盖面足够应付大多数入门级项目数码管显示需要计数器、串口通信需要FIFO缓冲、图像处理需要行缓存这些都能用基础IP实现。有一个容易忽略的点基础IP的License通常包含在PDS主License里也就是说只要PDS能正常启动基础IP基本都能配置生成。如果你在配置某个基础IP时提示License问题大概率是License授权列表里没有这项Feature得联系厂商确认。4.2 复杂IP包为什么要单独安装DDR控制器、PCIe、MIPI、高速收发器这一类复杂IP因为IP本身的实现更复杂、不同器件系列差异大通常不是随PDS主安装包分发而是需要单独下载。这也是很多新手第一次被卡住的地方视频里看到别人配置DDR3 IP自己打开IP Compiler却根本找不到这个选项第一反应是软件版本不对。实际上是IP包没装。你需要去官网找到对应器件的IP包下载页面根据自己的PDS版本和器件型号选择对应的IP包版本。下载完成后按照说明把IP包解压并导入。PDS新版一般在IP Compiler界面里提供“导入IP包”或者“从本地安装IP”的入口选择解压后的目录软件会把它注册到IP库中。导入成功后刷新一下IP列表就能看到新加的IP。4.3 IP包版本和PDS版本必须匹配这里必须单独强调IP包版本和PDS版本不匹配是报错重灾区。IP包的大版本号必须跟PDS一致比如PDS是2022.1你最好找2022.1对应的IP包用2021.2的IP包强行装进去生成时大概率报错。如果用了不匹配的版本轻则IP类型显示异常重则例化之后综合报内部错误。遇到这种情况不是软件坏了是版本对不上去下对应版本即可。4.4 生成IP后看不到内部逻辑是正常的很多人第一次在PDS里生成IP后打开生成的.v文件发现里面没有逻辑实现只有一个wrapper壳子以为生成失败了。不是的这是IP保护机制。厂商出于知识产权保护IP内部实现通常以加密网表形式提供你在工程里看到的只有端口定义和例化接口。这不仅存在于紫光同创很多商用IP都这样。所以如果你在某个教程里看到别人能打开IP内部RTL而你的打开全是加密内容别慌这不影响使用。你需要关心的只是端口定义和例化方式。5. 手把手配置一个PLLIP Compiler的完整操作基础流程走通之后我们来实际配置一个最常见的IP——PLL锁相环。大部分开发板都会有一个50MHz或100MHz的有源晶振而工程里不同模块可能需要不同时钟频率PLL就是用来做时钟生成的。下面的操作基于我常用的PDS版本界面细节可能随版本略有差异但逻辑是一样的。5.1 新建工程并打开IP Compiler打开PDS先新建一个工程Project顶层模块名按自己项目来比如top_pll。注意工程路径必须是纯英文。建好之后在菜单栏找到IP Compiler中文界面下一般叫“IP编译器”或“IP核管理”。打开后就是IP库和已有IP实例的列表界面。如果IP Compiler打开后列表是空的先别急检查一下上一步装的到底是哪个版本以及有没有正确导入IP包。基础IP正常情况下都会在列表里。5.2 创建PLL并理解每个参数在IP Compiler里点击“新建”或“”号在IP类型列表中选择PLL。点击进去后进入参数配置界面通常按功能分为几个区通用配置、时钟输入、时钟输出、其他选项。以50MHz输入、需要输出100MHz和200MHz为例输入时钟频率填50单位MHz。输出时钟数量选2分别配置clk_out0为100MHz、clk_out1为200MHz。相移默认填0大多数场景不需要相移。占空比默认50%不用动。配置完看右下角或参数页面上的提示信息是否报错比如“输出频率超出范围”这种。PLL不是任意频率都能配出来的它内部有VCO压控振荡器的可工作频率范围软件会根据你填的输入输出频率自动计算倍频和分频系数。如果输出频率落在合法范围内页面一般不会报错如果报错就调整一下输入频率或者检查器件系列。还注意到配置界面里有“复位”和“锁定指示”相关的选项。PLL一般有locked输出信号表示PLL输出时钟是否稳定。这个信号一定要接出来并在复位逻辑里使用不要悬空或者忽略否则上电后你的逻辑可能在一个不稳定的时钟下初始化出现不可复现的随机现象。5.3 生成IP后你会得到哪些文件配置完成后点击生成。PDS会根据配置生成一套文件。这些文件一般包括一个以IP实例名为前缀的文件夹里面是IP的包装文件也就是你例化时用的模块。例化模板文件告诉你每个端口怎么连接。仿真模型供后续仿真使用。约束文件包含IP相关的时序约束。新手容易犯的错误是只把IP的例化复制到代码里但忘了把IP生成的相关文件添加到工程。这就好比你在代码里调用了一个模块但模块源文件没加进工程综合时必然报“module not found”。PDS一般会自动把IP文件加入当前工程但如果你用的是脚本化流程或者手动管理工程文件就要特别留意。5.4 其他常用IP的配置速查除了PLL新手用得最多的是FIFO和RAM我把它们的核心参数再说一下。FIFO的关键参数是数据位宽和深度。位宽就是你数据总线的宽度比如8位、16位、32位深度则是FIFO能缓存多少个数据一般选2的整数次幂。如果你的系统读写时钟不同要选“独立时钟”模式也就是异步FIFO如果读写同一时钟选同步FIFO就行。还有一个比较实用的选项是“输出寄存器”开启后输出会多打一拍时序更好但代价是多一个时钟周期的读延迟具体看你的协议能不能容忍这一拍。RAM IP主要看端口模式单端口、简单双端口、真双端口。单端口就是一套地址总线读写共用简单双端口是一边读一边写常用于FIFO内部真双端口是两套独立地址总线可以同时读写不同地址。数据位宽和深度同样按需设置注意RAM IP一般有“读优先”“写优先”“不变”几种模式这个跟你的使用场景强相关比如CPU读寄存器场景希望读优先FIFO场景通常无所谓。5.5 参数配置超范围的兜底办法配置IP时遇到“数值超出范围”是最容易解决的问题因为它已经把问题告诉你了。关键是你得知道去哪里查合法范围。每个器件的用户手册或者数据手册里都有对应IP支持的工作范围表格比如PLL的输入频率范围、VCO频率范围、FIFO最大深度、RAM位宽上限等。以PLL为例如果你在手册里查到输入时钟范围是10MHz到500MHz那你填100MHz肯定合法填800MHz绝对报错。还有一点要注意同一个IP在不同速度等级、不同封装下范围可能有差异选器件型号时要选对。6. 把IP接进你的代码例化、综合、仿真一条龙配置好IP只算完成一半后面把它接进流程才是真正的考验。6.1 直接抄例化模板别手写端口IP生成后PDS会提供一个例化模板文件里面是完整的模块例化代码端口名、位宽、注释都齐全。我的建议是永远不要手动打IP例化代码直接用模板复制粘贴。你手动打的端口名跟模板差一个字母综合报错时找半天纯属浪费生命。复制之后按需修改连接信号即可。举个例子PLL常见的例化方式pll_100m_200m u_pll ( .clk_in_50m (clk_50m), .rst_n (rst_n), .clk_out_100m (clk_100m), .clk_out_200m (clk_200m), .locked (pll_locked) );注意这里的端口名不一定跟我写的一样要以你生成的模板为准。模板里的端口名是固定的不要自己改。6.2 把IP文件加入工程PDS图形界面新建工程时生成的IP一般会自动加入工程你可以去看工程属性或Source列表里有没有IP相关文件。如果发现IP文件不在列表里手动添加把IP生成目录下的所有.v文件和仿真模型文件都加进工程。如果IP提供加密网表文件也要加进去否则布局布线时会报找不到实现文件。综合之前建议做一次“语法检查”或“RTL分析”PDS一般都有对应的按钮。这个步骤能快速发现端口位宽不匹配、信号未声明这类低级错误比直接跑综合快得多。6.3 仿真怎么处理自带仿真器和外部工具PDS自带仿真工具简单验证可以直接在PDS里跑。操作方式一般是设置Testbench为顶层仿真文件点击仿真按钮PDS会自己调用仿真器并加载IP的仿真模型不需要额外配置。这种方案最省心新手建议先用它。如果你习惯用ModelSim或者Questasim做仿真那就需要先把PDS的仿真库编译到ModelSim里。这个步骤类似Xilinx的compile_simlib机制在PDS里一般也有对应的仿真库编译工具或脚本。关键点在于编译完库之后需要在ModelSim的modelsim.ini文件里正确映射厂商库名否则仿真一加载IP就报“Cannot find library”错误。这个问题常见得几乎每天都有新人在论坛问。6.4 一个完整的Testbench示例写一个简单的Testbench来验证我们刚才配置的PLLtimescale 1ns/1ps module tb_pll_top(); reg clk_50m; reg rst_n; wire clk_100m; wire clk_200m; wire pll_locked; reg run_test; initial begin clk_50m 0; rst_n 0; run_test 0; #200; rst_n 1; #500; run_test 1; #2000; $finish; end always #10 clk_50m ~clk_50m; // 50MHz时钟 pll_top u_top( .clk_50m (clk_50m), .rst_n (rst_n), .clk_100m (clk_100m), .clk_200m (clk_200m), .pll_locked (pll_locked) ); endmodule仿真时重点观察pll_locked信号从低到高的跳变以及clk_100m、clk_200m输出时钟的周期是否符合预期。如果锁存信号一直拉不高或者输出时钟频率不对优先检查IP配置参数和输入时钟。如果你测试的不是PLL而是自己的逻辑建议也同样先测试IP的锁存/初始化行为再去验证业务逻辑排错会更清晰。7. 常见报错案例的排查思路按错误特征拆解这一节我把自己和身边人实际踩过的报错整理出来每个都按“报错长什么样 - 可能原因 - 解决路径”来写方便你直接按图索骥。7.1 License类报错License没生效报错特征软件启动或配置IP时提示License check failed、Feature not found或License for feature xxx is not available。排查顺序如下检查系统时间是否正确时间不对License直接失效。检查License文件路径是否被移动过以及环境变量LM_LICENSE_FILE是否配置正确。检查申请License时填的MAC地址和当前机器是否一致电脑换过网卡会导致失效。检查License文件里的Feature列表确认当前要用到的IP是否在授权范围内。这类问题80%出在前两步很多人花大量时间研究License文件格式其实换个思路先查环境就快很多。7.2 版本不兼容类报错IP包和PDS对不上报错特征IP Compiler里看不到某个IP或者导入IP包后IP列表里出现灰色、感叹号、提示版本不支持。解决路径确认当前PDS版本号在软件“关于”界面可以看到。去官网找到和当前PDS版本匹配的IP包版本。重新导入并在IP Compiler里刷新IP库。有些老工程师的工程是别人给的里面用了某个IP版本但你的PDS版本不同打开工程时也会提示。这种时候不要强行用最好统一版本。7.3 例化端口相关报错端口不存在或未连接报错特征综合或RTL分析时报Port xxx does not exist in module yyy或者Identifier xxx has not been declared。解决路径打开IP例化模板逐端口对照你的例化代码确认没有拼写错误。检查端口名大小写Verilog区分大小写clk_100m和CLK_100M是两回事。检查信号位宽是否匹配比如IP输出8位你接了4位reg综合时报位宽不匹配警告严重时功能完全不对。连接信号时尽量用最直观的命名方式PLL的locked可以接到pll_lockedFIFO的wr_en接write_enable方便发现问题。7.4 仿真库缺失类报错ModelSim找不到库报错特征仿真启动时报Failed to map library、Cannot find module或者Unknown library。解决路径检查ModelSim的modelsim.ini文件里是否包含PDS仿真库的映射。确认仿真库编译成功编译路径下有没有生成对应的库文件夹。推荐在PDS自带的仿真器里先跑通再考虑接ModelSim减少变量。如果必须用ModelSim编译库的时候注意选择正确的器件系列。这类报错和工具链本身无关纯属外挂环境没配好。在PDS社区里能看到大量这类提问提前把库映射配好能省很多事。7.5 IP被优化掉或输出没有波形报错特征综合报告里IP实例消失或者仿真时IP输出都是高阻/0看起来像没工作。这类问题比较隐蔽常见原因是综合器认为IP输出没有被使用优化掉了或者输入复位没有正确释放。排查思路检查IP输出是否接上了顶层输出或内部逻辑如果悬空综合器会把它优化掉。检查复位信号极性PLL的复位可能是高有效也可能是低有效务必看IP的数据手册或配置界面说明。仿真时加长复位时间尤其有PLL的工程复位拉高后PLL需要一段时间才能锁定锁存信号没拉高前不要对后面的逻辑做期望。检查IP约束文件是否添加进工程缺失约束可能导致布局布线异常。7.6 报错对照表报错特征可能原因处理优先级License check failed时间不对、MAC绑定、路径变动先查系统和路径Module not foundIP文件没加入工程先添加IP文件Port does not exist端口名拼写、大小写错误对照模板检查Cannot find library仿真库未编译或未映射检查modelsim.iniOut of rangeIP参数超出器件支持范围查器件手册IP被优化输出未使用或约束缺失检查端口连接和约束这张表你可以截图收藏后面遇到问题先对号入座别一上来就是重装软件。8. 写给新手的几条实在建议最后说几句实在话。这些年我见过太多人包括我自己在国产FPGA工具链上栽跟头回头想想大部分问题其实不是技术难度高而是沿用国外工具的使用习惯去套国产工具一不匹配就懵了。PDS和Vivado/Quartus的底层设计逻辑是相似的但操作路径、目录管理、IP分发方式都不一样建议空杯心态老老实实看一遍官方文档和例程。我的几个个人习惯供参考一是拿到新板子先原封不动把官方例程完整跑一遍从工程导入到综合、布局布线、下载、上板验证走通之后再开始改自己的逻辑。这个“完整闭环”非常重要因为后面你改代码时遇到问题至少能确定工具链本身是好的问题只在自己的逻辑里。二是学习一个新的IP先找有没有对应的官方例程或者Demo工程有就直接在例程上改参数比从空白工程开始效率高得多。官方例程里的IP配置、例化方式、约束写法都是经过验证的照着改不容易踩坑。三是养成把IP配置参数记录到项目文档的习惯。IP配置界面里几十个参数你这次调通了过两个月再改工程大概率记不清当初选了什么。我用一个简单的文本文件记录每个IP的名称、版本、关键参数、生成日期后面维护工程时会感谢自己。四是遇到问题先在PDS安装目录的doc文件夹和官方论坛里搜一圈。很多报错文本直接复制到搜索框比问群友有效因为你的问题别人大概率已经遇到过。如果是英文报错别急着翻译直接搜原始英文结果往往更准。最后分享一个小技巧PDS自带的一些例程工程里面会演示同一个IP的不同配置场景。比如PLL例程里可能同时展示了分频、倍频、相移三种用法你把这些不同配置在IP Compiler里打开对比一下比读十遍手册都管用。我就是通过这种方式理解了不少IP参数的含义尤其是那些“没改不知道干嘛”的高级选项。写这篇东西之前我特意翻了一下自己的工程记录从第一次用PDS到现在光是IP相关的问题就踩了将近二十个坑。希望这些经验能帮你少走点弯路把时间花在真正有意义的逻辑设计上。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑