1. ZCU106与FMC接口基础认知
第一次接触ZCU106开发板的FMC接口时,我盯着那个密密麻麻的HPC连接器发呆了半小时。这种高速连接器就像FPGA世界的USB接口,但比普通USB复杂十倍不止。FMC(FPGA Mezzanine Card)标准其实是Xilinx为了简化高速外设连接设计的,ZCU106板载的HPC(High Pin Count)版本有160对差分信号和80个单端信号,足够应付大多数AD/DA子卡需求。
我用的AN108子卡算是入门级神器,虽然官方标称AD采样率只有32MHz,DA输出125MHz,但实测下来做音频和低频信号处理绰绰有余。这里有个新手容易忽略的关键点:FMC子卡供电。ZCU106的VADJ电压 jumper(J94)默认是1.8V,而很多子卡要求3.3V,我第一次调试时就因为电压不匹配导致AD采样全是噪声。用万用表量一下J94和J33(GND)之间的电压,不对就赶紧用跳线帽调整。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. Vivado工程搭建实战
创建Vivado工程时有个坑我踩了三次:器件型号一定要选xczu7ev-ffvc1156-2-e,这是ZCU106的核心芯片型号。有次手快选了相似型号,综合能过但烧录后板子直接变砖,最后是用回退JTAG模式才救回来。
时钟配置是第二个重灾区。我的方案是用clk_wiz生成50MHz给DA、25MHz给AD,这里要注意时钟约束必须写在XDC文件里。有次忘记加create_clock约束,结果ILA抓到的数据全是跳变的。推荐这样写:
tcl复制create_clock -name sys_clk -period 8.000 [get_ports sys_clk_p]
set_property PACKAGE_PIN AE5 [get_ports sys_clk_p]
DDS IP核配置更是个技术活。AN108只支持8位数据宽度,在dds_compiler配置页面要特别注意两点:
- Phase Width建议设16位以上,否则频率分辨率不够
- 勾选"Hardware Parameters"标签页的"Phase Generator and SIN/COS LUT"
我当时为了生成1MHz正弦波,控制字计算错了三次,最后用这个公式才搞定:
code复制控制字 = 目标频率 × 2^
