目录

AutoLasm

FT-M7004 DSP 高性能算子 LASM 代码生成工具

将 C/C++/Python 算法描述转换为 FT-M7004 DSP 的 LASM 线性汇编代码,自动优化流水线调度。

工作流程

用户输入                              系统输出
────────                              ───────
C算子API/需求描述                      .la 源代码
        ↓                                  ↓
  Claude Code 处理                    lasm.exe 编译
  (ft7004-lasm skill)                      ↓
        ↓                              .asm 汇编文件
  9步强制流程:                             ↓
  Step 0   触发判断                   dspsim.exe 仿真
  Step 0→1 前置确认                       ↓
  Step 1   算法分析                   仿真结果
  Step 2   决策匹配+库函数
  Step 3   详细查阅指令
  Step 4   编写LASM代码
  Step 4.5 易错指令检查
  Step 5   覆盖审计
  Step 6   尾数处理
  Step 7   编译验证

用户输入格式

向 Claude Code 描述算子需求时,请提供:

请生成一个 [算子名] 算子:
- 功能:[计算公式,如 Y[i] = alpha * X[i] + Y[i]]
- 参数:[C函数签名,如 void axpy(float *Y, float *X, float alpha, int N)]
- 数据位置:[AM空间 / DDR空间需DMA搬运]
- 数据对齐:[16字节对齐]
- 是否需要尾数处理:[N不保证32倍数]

地址空间约束

用户需自行管理空间使用,向量计算不能访问越界:

地址空间 基址 用户可用大小 说明
CORE_AM 0x10000000 512KB 核本地向量存储,向量ldst直接访问
SHARE_AM 0x20000000 8MB 多核共享向量存储,向量ldst直接访问
DDR 0x81000000 64GB 外部DDR,必须通过DMA搬运到AM

关键规则:向量ldst指令只能访问AM空间,DDR数据必须先通过DMA搬运到AM。

项目结构

autolasm/
├── CLAUDE.md                    # 项目配置(Claude Code)
├── README.md                    # 本文件
├── Business_Requirements.md     # 业务需求
├── 7004_LASM/LASM_20250714/     # LASM 工具链
│   ├── bin/lasm.exe             # 线性汇编器
│   ├── bin/dspsim.exe           # DSP仿真器
│   ├── bin/layout.json          # 内存布局配置
│   ├── doc/                     # 用户手册PDF
│   └── sample/                  # 工具链示例
├── lib/                         # 库函数
│   ├── math.la                  # 数学库(sdiv, sqrt, sin等)
│   └── csl.la                   # 系统控制库(DMA, 核配置等)
├── .claude/skills/ft7004-lasm/  # LASM Skill文档
│   ├── skill.yaml               # Workflow定义
│   ├── entry.md                 # 快速入口
│   ├── fixed/                   # 固定规则层
│   │   ├── architecture.md      # 架构约束(地址空间/寄存器/参数对)
│   │   ├── decision-guide.md    # 指令决策(4层15章)
│   │   ├── programming-guide.md # 编程指南(LASM语法/模式)
│   │   └── usage-checklist.md   # 易错检查清单
│   ├── maintainable/            # 可维护规则层
│   │   ├── operator-interface.md # 算子接口模板
│   │   └── library-verification.md # 库函数+编译验证
│   ├── FT-M7004V_DSP_INST.md   # 完整指令集参考
│   └── templates/               # 代码模板(vadd/vsub/vscal/dot等)

编译与验证

编译

# 在.la文件所在目录执行
cd <.la文件目录>
../../7004_LASM/LASM_20250714/bin/lasm.exe <input>.la \
    --layout ../../7004_LASM/LASM_20250714/bin/layout.json \
    --output <input>.asm

仿真

cd 7004_LASM/LASM_20250714
./bin/dspsim.exe output.asm

Skill 文档体系

文件 查阅时机 内容
entry.md Step 0 触发入口 触发判断+强制检查清单+规则摘要
architecture.md Step 0→1 前置确认 地址空间/参数对/寄存器规范/条件寄存器限制
decision-guide.md Step 1→2 决策匹配 4层决策架构:数据准备/计算执行/数据变换/流程控制
programming-guide.md Step 4 编程模式 LASM语法/数据类型/常用指令模式/循环优化
usage-checklist.md Step 4.5+5 检查审计 易错指令使用模式+覆盖审计清单
operator-interface.md Step 4+6 算子模板 算子需求确认/函数模板/尾数处理
library-verification.md Step 2+7 库函数验证 math.la/csl.la库函数+编译验证流程
FT-M7004V_DSP_INST.md Step 3 详细查阅 完整指令集(禁止全文阅读,需通过decision-guide定位)

库函数

math.la — 数学库

函数 功能 用法
sdiv 整数除法 @icall sdiv, a, b, = q, r
vfdivs32 向量浮点除法 @icall vfdivs32, vr_a, vr_b, = vr_c
vfsqrts32 向量平方根 @icall vfsqrts32, vr_a, = vr_res
vreduc16_sum_fp32 浮点向量求和 @icall vreduc16_sum_fp32, vr_a, = sum

csl.la — 系统控制库

函数 功能 用法
get_am_addr 获取核AM地址 @icall get_am_addr, = am_l, am_h
Sync_DMA_Trans 同步DMA传输 @icall Sync_DMA_Trans, src_l, src_h, dst_l, dst_h, size, tunnel
sys_bar 多核栅栏同步 @icall sys_bar, id, num

关键约束

约束 说明
CVCCR配置 使用向量运算前必须配置:SMOVIL 3, R0; SMVCGC R0, CVCCR; SNOP 5
AM空间限制 向量ldst只能访问AM空间,DDR需DMA搬运
参数对传递 C接口:指针用X_l/X_h,32位标量用val/__val
寄存器对顺序 高位在前:r1:r0
条件寄存器 最多3个(R0-R2),内联函数计入总数
偏移量限制 >15必须用OR寄存器
地址寄存器 向量ldst用AR0-AR7,标量ldst用AR8-AR15
VREDUC 不支持浮点归约,浮点用库函数
SMOVIL/SMOVIH 必须成对使用同一寄存器

License

MIT

关于

让AI agent和大模型自动将高级语言生成7004线性汇编代码,以提高DSP代码性能、简化程序员对线性汇编和汇编编程的学习成本,使DSP编程变得更简单。

7.3 MB
邀请码
    Gitlink(确实开源)
  • 加入我们
  • 官网邮箱:gitlink@ccf.org.cn
  • QQ群
  • QQ群
  • 公众号
  • 公众号

版权所有:中国计算机学会技术支持:开源发展技术委员会
京ICP备13000930号-9 京公网安备 11010802032778号