sync: SHANGHAI-U9 2026-07-27 三个 Simulink→RTL skill 转系统级 + 新增 simulink-rtl-redev
- simulink_rtl_dev / rtl-ip-replace: 从工程级 .claude/skills 迁到用户级并去工程耦合 (模型名/Notes 文档依赖/工程实测基线移出; addpath 与脚本路径改用户级) - rtl-ip-replace/scripts/gen_cmp_tb.py: Vivado 路径不再写死, 改读 VIVADO_PATH / XILINX_VIVADO (兼容 install root / bin / bin\vivado.bat 三种写法), 回落时提示 去设 skills_env.md 的 VIVADO_PATH - simulink-rtl-redev: 新增。原生模型改动后的仿真模型同步规范, 含两个实测过的工具 check_sync.py (三条时序链新鲜度闸门) 与 measure_k.m (时域/频域/包络三估计器互证) - sim-rtl-flow/SKILL.md: 加入 sync_sim:* 步骤, 引用上述三个 skill
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# m 代码惯用法 → 原生可生成 RTL 的 Simulink 模块
|
||||
|
||||
**用途**:Task12-1 铁律 1 要求"要生成 RTL 的模块及其所有子模块必须用能直接生成 RTL 的 Simulink
|
||||
模块搭建"。下表是把 MATLAB Function 里的常见写法翻译成原生模块的对照表。
|
||||
|
||||
**库来源(本机 R2025b 实测存在)**:
|
||||
|
||||
| 库 | `load_system` 名 | 内容 |
|
||||
|---|---|---|
|
||||
| HDL Coder 模块库 | `hdlsllib` | 基础集(241 个):延迟/RAM/FIFO/查找表/位操作/计数器/数学 |
|
||||
| DSP HDL Toolbox | `dsphdlfiltering2` | Discrete FIR Filter、FIR Decimator/Interpolator/Rate Converter、CIC Decimator/Interpolator、Biquad、**LMS Filter**、Channelizer |
|
||||
| | `dsphdlmathfun2` | **Complex to Magnitude-Angle**(CORDIC) |
|
||||
| | `dsphdlxfrm2` | FFT、IFFT |
|
||||
| | `dsphdlsigops2` | **NCO**、**Farrow Rate Converter**、Downsampler、Upsampler |
|
||||
| Wireless HDL | `whdllib` | 调制、纠错编码、I/O |
|
||||
| Vision HDL | `visionhdllib` | 图像流水线 |
|
||||
|
||||
查库命令(skill 自带):`hdl_block_search('lms','farrow')` —— 关键字搜上述所有库。
|
||||
|
||||
## 对照表
|
||||
|
||||
| m 代码写法 | 原生模块 | 备注 |
|
||||
|---|---|---|
|
||||
| `persistent` 标量状态 | **Unit Delay** / **Delay** | 带复位/使能用 `Unit Delay Resettable Synchronous`、`Enabled Delay` |
|
||||
| `persistent` 数组当延迟线 | **Tapped Delay** / `Delay`(Length>1) | 抽头要外露就用 Tapped Delay |
|
||||
| `persistent` 数组当存储、按地址读写 | **Simple Dual Port RAM** / `Single Port RAM` / `Dual Port RAM` | 下游 `rtl-ip-replace` 会换成 `blk_mem_gen` |
|
||||
| 常量表 `sinT/cosT` 查表相位旋转 | **NCO**(dsphdlsigops2)或 `Sine/Cosine HDL Optimized` | 表本身 → `Direct Lookup Table (n-D)` → 下游 `dist_mem_gen` |
|
||||
| 任意常量表查表 | **Direct Lookup Table (n-D)** / `1-D Lookup Table` / `Prelookup` | 内容固定才算查找表 |
|
||||
| `atan2(y,x)` / `abs(z)` 求角求模 | **Complex to Magnitude-Angle**(dsphdlmathfun2,CORDIC) | 下游可换 Xilinx `cordic` IP |
|
||||
| `sqrt` | `Sqrt` / `Reciprocal Sqrt` | |
|
||||
| 除法 / 倒数 | `Divide` / `Math Reciprocal` | 注意流水延迟,别在反馈环里放 |
|
||||
| **定系数 FIR** | **Discrete FIR Filter** | 下游 `fir_compiler`(只有定系数才 IP 化) |
|
||||
| 抽取 / 内插 FIR | **FIR Decimator** / **FIR Interpolator** / `FIR Rate Converter` | 大比例整数变速 → `CIC Decimator/Interpolator` |
|
||||
| **LMS 自适应均衡**(EqCore 那种) | **LMS Filter**(dsphdlfiltering2) | 原生模块搭得出来 ⇒ 不需要豁免;IP 化不适用(抽头非常量) |
|
||||
| **分数延时 / Farrow 重采样**(TxPreOffset 那种) | **Farrow Rate Converter**(dsphdlsigops2) | 同上:能用原生模块就不许写 m 代码 |
|
||||
| FFT / IFFT | **FFT** / **IFFT**(dsphdlxfrm2) | |
|
||||
| 计数器 `k = k+1; if k==N, k=0` | **HDL Counter** / `Counter Free-Running` / `Counter Limited` | |
|
||||
| `if/elseif` 分支选值 | `Switch` / `Multiport Switch` / `Index Vector` | |
|
||||
| `switch state` 控制状态机 | **Stateflow Chart(纯控制)** 或 `Switch Case Action Subsystem` | Chart 只放控制,**不许放数据通路算术**(审计报 WARN) |
|
||||
| 饱和 / 量化 / 定点转换 | `Data Type Conversion`(saturate/round)、`Saturation` | 位宽与舍入方式在这里定死,便于逐拍对齐 |
|
||||
| 移位、拼位、取位 | `Shift Arithmetic`、`Bit Concat`、`Bit Slice`、`Bit Set/Clear/Reduce` | |
|
||||
| 复数乘加 | `Product`(复数信号)、`Multiply-Add`、`Multiply-Accumulate`、`Dot Product` | |
|
||||
| 队列 / 跨速率缓冲 | **HDL FIFO** | 下游 `fifo_generator` |
|
||||
| 相关器(参考抽头运行时捕获) | `Tapped Delay` + `Multiply-Accumulate` + RAM | 抽头非常量 ⇒ **不做 IP 替换**,但仍应用原生模块搭 |
|
||||
| `max/min`、门限比较 | `MinMax`、`Compare To Constant`、`Relational Operator` | |
|
||||
| 边沿检测 | `Detect Rise Positive` / `Detect Fall Negative` | |
|
||||
|
||||
## 与 rtl-ip-replace 的对应关系
|
||||
|
||||
原生模块搭好 → `makehdl` 生成 RTL → `rtl-ip-replace` 再把其中四类结构换成 Xilinx IP:
|
||||
|
||||
| 原生模块 | 生成的 RTL 结构 | 下游 IP |
|
||||
|---|---|---|
|
||||
| Direct Lookup Table (n-D) / 常量表 | 常量 wire 数组 | `dist_mem_gen` |
|
||||
| Simple Dual Port RAM 等 | `SimpleDualPortRAM_generic` | `blk_mem_gen` |
|
||||
| Complex to Magnitude-Angle | CORDIC 迭代锥 | `cordic` |
|
||||
| HDL FIFO | reg 数组 + 指针 | `fifo_generator` |
|
||||
| Discrete FIR Filter(**定系数**) | Coef 模块 + systolic 抽头链 | `fir_compiler` |
|
||||
| LMS Filter / Farrow Rate Converter | 自适应/变系数结构 | **不替换**(抽头非常量) |
|
||||
|
||||
## 判定口诀
|
||||
|
||||
1. 先 `hdl_block_search('关键字')`:库里有 → 必须用库里的,不许写 m 代码;
|
||||
2. 库里没有、且能用基础模块(Delay/Product/Sum/Switch/Lookup/RAM)拼出来 → 拼出来;
|
||||
3. 两者都不行 → 才轮到铁律 2:**指定具体的 Xilinx IP + 仿真证明 cycle-true + 登记豁免**。
|
||||
Reference in New Issue
Block a user