# FPGA 侧(my_exciter / RU_golden) ## 工程 | | my_exciter | RU_golden | |---|---|---| | xpr | `\my_exciter.xpr`(见 `~\skills_env.md`) | `...\RU_golden\RU_golden.xpr` | | top | `smod_top`(`my_exciter.srcs/sources_1/top/smod_top.v`,~2300 行) | `RU_golden_top` | | 作用 | ATSC 激励器全功能 | 打底镜像:网口 + quickboot 自烧,用来兜底和支撑远程升级 | | 器件 | xc7a200tfbg676-2 | 同左 | `my_exciter` 目录本身是 **git 仓库根**(`imx6/` 也在里面)。RU_golden 的 xpr 引用了 my_exciter 里的少数源文件(`ts_lock_top.vhd`、`sdram_tsoip_top.vhd`),改动时留意。 ## RTL 目录(`my_exciter.srcs/sources_1/`) | 目录 | 内容 | |---|---| | `top/` | `smod_top.v` 顶层 + 时钟/AGC/DA 前处理/ORx 抽取等杂项 | | `atsc_mod_xip/` | 8VSB 调制核(加密 IP) | | `dpd/` | 数字预失真 | | `txagc/` | 发射 AGC | | `asi_pre/`, `dvb_asi/`, `ts/` | ASI / TS 输入与包同步(`src_preproc`、`spi_lock_det`) | | `tsoip/`, `tsoip_atsc/`, `udp/`, `sdram/` | TS over IP 收发与缓存 | | `tuner/` | Sony CXD2878 tuner 的 TS 接口(`TUN_D[7:0]/TUN_VLD/TUN_CLK`) | | `quickboot/` | `SpiFlashProgrammer.vhd` + `SpiSerDes.vhd` + `spi_slave32.v` —— 远程升级的 FPGA 侧 | | `i2c/` | imx6↔FPGA 的寄存器桥 | | `gps/`, `uart/`, `misc/`, `bd_cfg/`, `coef/`, `ip/` | 其余 | 约束在 `constrs_1/new/`:`smod_ioplanning.xdc`(SMOD 板的引脚,**这块板用这个**)、 `project_ioplanning.xdc`(旧板,别混用)、`timing.xdc`、`timing_cleanup_120m.xdc`、 `bitstream.xdc`、`debug.xdc`(当前为空,ILA 用 IP 例化而非 XDC 标记)。 ## 用 vivado-mcp 干活 典型顺序(工具名即 `mcp__vivado-mcp__*`): ``` start_session(project=) # 打开工程 → verilog_compile_check # 改完 RTL 先做语法检查,比跑综合快得多 → run_synthesis → get_critical_warnings # 综合后立刻看,别等到实现完 → run_implementation → generate_bitstream → get_timing_report / get_utilization_report → power_off → USB_Blast_off → power_on → (等 sys init over) → USB_Blast_on → program_device # 下 bit(掉电即失) ``` 其它常用:`run_tcl` / `safe_tcl`(任意 Tcl)、`get_run_progress`(长任务轮询)、 `get_ip_status` / `inspect_ip_params`、`xdc_lint` / `xdc_auto_fix`、`get_io_report`。 综合+实现在这个工程上要 **20~40 分钟**。改一行就重跑之前,先用 `verilog_compile_check`。 ## ILA `smod_top.v` 里 ILA 是**手工例化的 IP**(不是 `mark_debug`)。历史上用过 `ila_eth2`、 `ila_2`、`ila_3`、`ila_adrv9009_fb`;当前活跃的是 `u_ila_adrv9009_rx`(复用 `ila_adrv9009_fb` IP,探针宽度 16,16,1,8,1,1,1,8,8,8,8,5)。 要换探针就直接改那个例化的 probe 连接。**探针宽度必须和 IP 里配的一致**,否则综合报错。 需要新宽度就改 IP 或换一个 ILA IP。 抓波形要 `.ltx`(`impl_1/smod_top.ltx`)。归档时 `.bit` / `.ltx` / `.mcs` 三件套用**同一个 tag** 放进 `bitstream/`,否则下次想复现就对不上号了。ILA 导出的 CSV 交给 `/fft-analyse` 做频谱。 **固化前把调试 ILA 去掉**,重新实现出干净的生产 bit:ILA 吃资源、恶化时序,还会和 imx6 抢寄存器总线。 ## 时序 `get_timing_report` 上 WNS 常年在 **-9 ~ -13 ns**,路径落在 JESD204 TX 的 `init_seq_data`(`jesd204_phy_1lane_38j82_refclk` group)。这是基础设计里**既有的 初始化序列 false path**,与 ATSC 数据通路无关 —— JESD 链路实测能起来,RF/调制/tuner 都正常。 不要为了这个数字去改设计。真正要盯的是你改动那部分的时钟域和 CDC。 ## 出 mcs 走 `/fpga_update` skill。一句话:远程升级要的是 `_update.mcs`,不是 `write_cfgmem` 的直接产物; 而且它走 TCP 1234,不走网页。