82 lines
3.9 KiB
Markdown
82 lines
3.9 KiB
Markdown
# FPGA 侧(my_exciter / RU_golden)
|
||
|
||
## 工程
|
||
|
||
| | my_exciter | RU_golden |
|
||
|---|---|---|
|
||
| xpr | `E:\Xilinx_design\smod\SMOD_ATSC\my_exciter\my_exciter.xpr` | `...\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=<xpr>) # 打开工程
|
||
→ 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,不走网页。
|