- 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
4.7 KiB
4.7 KiB
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 | 自适应/变系数结构 | 不替换(抽头非常量) |
判定口诀
- 先
hdl_block_search('关键字'):库里有 → 必须用库里的,不许写 m 代码; - 库里没有、且能用基础模块(Delay/Product/Sum/Switch/Lookup/RAM)拼出来 → 拼出来;
- 两者都不行 → 才轮到铁律 2:指定具体的 Xilinx IP + 仿真证明 cycle-true + 登记豁免。