Files
bowei ea4541ee90 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
2026-07-27 10:39:53 +08:00

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 自适应/变系数结构 不替换(抽头非常量)

判定口诀

  1. 先 hdl_block_search('关键字'):库里有 → 必须用库里的,不许写 m 代码;
  2. 库里没有、且能用基础模块(Delay/Product/Sum/Switch/Lookup/RAM)拼出来 → 拼出来;
  3. 两者都不行 → 才轮到铁律 2:指定具体的 Xilinx IP + 仿真证明 cycle-true + 登记豁免。