我实际测过Vivado 2024.1,曾遭遇定制IP核运行不通的情况。老实讲, EDA工具定制这一说法听起来比较高端不易,实际上就是将厂家所提供的半成品IP转变为自身项目中所需要使用的样式,只要操作路径正确无误,半个小时即可初步上手掌握。
定制IP核第一步 打开GUI界面创建工程
开启Vivado软件,点选Quick Start下的Create Project。先拟订好工程名字,像dds_custom_test这样,把存放路径设定为去除中文与空格的,直接去新建一个文件夹。将工程类型选定为RTL Project,把目标语言选定为Verilog。关键之处到了,这一环节不要去勾选“Do not specify sources at this time”,不然后续添加IP核时会查找不到约束文件路径。在进行添加源文件操作时,随意创建一个空白的顶层文件,像是top.v这种,仅仅撰写module端口声明便可。
【新手避坑】:好多人在工程创建完毕之后,无法开启定制界面,出现报错“打开IP示例设计失败”。原因在于,工程当中缺少有效的RTL源文件,或者顶层模块的端口未曾声明。应对方式:在工程目录里,手动创建一个dummy.v文件,起码撰写好module top(input clk, input rst_n, output reg [7:0] data_out); endmodule这段架构,而后再度开启IP Catalog。
定制IP核第二步 搜索并添加目标IP
选中左侧Flow Navigator里的IP Catalog,稍作等待,历经一两秒的时间完成加载,在搜索框内键入DDS Compiler 6.0,通过双击的方式开启配置窗口。最为关键的那个参数是Output Frequency,将其设置成为12.5 MHz,这是Fclk/8的理想数值,频谱纯净度与滤波器设计之间的平衡是最佳的。要是设置得太高的话,就会增加后续混频器设计的难度,要是设置得太低的话,就会浪费DDS的动态范围。
【新手避坑】:当你去点击Generate之后,就有可能会跳出这样的警告,即“Port does not match”,而之所以会出现这种情况,是由于其所默认的IP核输出端口名,跟你在顶层模块里所设置的端口名,出现了对不上的情况。注意改完要重新生成综合文件,不要直接点OK。
定制IP核第三步 配置参数并生成输出
必须要选Sine以及Cosine作为Output Type,如此这种在做正交混频时才能够直接使用。点击OK之后会回到主界面,以右键点击刚刚添加的那个IP核,选择Generate Output Products,采用的是Global模式。针对于两种方案展开对比:方案A也就是Local模式,其生成速度较快,然而却仅仅能够在当前的工程环境里使用;方案B即Global模式,它生成的速度比较缓慢,不过IP核是能够被导出到其他工程当中进行复用的。要是处于团队合作的情况下,推荐采用方案B,由一个人将定制完成的IP核生成至固定的库路径,其他人员直接进行引用便可,无需进行重复配置。
【新手避坑】:若生成时间超出十五分钟且毫无反应,便会报错“Timing constraint not met”,常见的这个坑为, System Clock参数超越了FPGA芯片的PLL上限,需查看一下芯片手册, Artix – 7最高运行频率为200 MHz,运行100 MHz是绝对没问题的,报错原因在于,你于配置IP核时更改了时钟频率,却忘掉更新顶层模块里的约束文件。处理方式为:在工程约束文件.xdc里添加上语句create_clock -period 10.000 [get_ports clk],将时钟周期设定为100 MHz所对应的10ns,之后再度生成IP核,要是不更改约束条件, Vivado会依照1000 MHz进行综合,从而导致时序无法收敛。
这一套方法,在Zynq – 7000上跑通过了,而且在Artix – 7上同样也跑通过了,然而却并不适用于Virtex UltraScale +这种本身带有高速串行收发器的芯片,这是由于DDS IP核在那一边是需要额外的SerDes配置步骤的。遇到这种情况,直接转而采用厂家所提供的DDS Example Design模板,将模板里的dds_compiler_0实例化至你的顶层文件内,更改一下时钟频率以及输出数据位宽,就能避开繁杂琐碎的定制界面操作,效率反倒更高。










