当前位置: 首页 > news >正文

浅尝AI辅助C转Verilog方法

一、常规算法模块的开发流程

日常芯片开发工作中,挺多看工作是把C语言转verilog。例如ISP的代码,都很先由算法进行C model的开发,验证完性能后,输出算法原理文档和c代码;数字设计接手,把C语言转换为verilog代码。

这其中C代码,不同于通常的C仿真,通常是考虑数据在运算过程中的位宽——这就需要在C代码的处理过程中,注意有效位宽的控制。

添加图片注释,不超过 140 字(可选)

二、转变思路,思考能如何能用AI加速RTL的开发

关于算法代码转verilog,我见过的最早的商业尝试是MATLAB。因为在MATLAB里面验证算法,是很常见的方式;进而,它也推出了m语言或者simulink转verilog(主要用于FPGA)的方式。但是生成的代码面积或者效率还是乏善可陈。但是,还是一个很大的尝试。后来,MATLAB还支持生成UVM验证环境。

但是开发ASIC,通常对于PPA是有比较苛刻的要求的。通常都是要有经验丰富的数字设计人员来完成C model(或者其他语言)转verilog的工作。但是,团队人员的经验和数量,也限制了RTL的开发效率。

如果使用AI,最佳的方式应该是本地部署,自己调优。但是这个见效慢,对于小公司或者个人来说,除了硬件成本高,学习成为、维护成本都比较高。

对于还是AI菜鸟的我,就想先用网页版的AI大模型看看能不能实现我的思路,等有一定的可行性,再考虑上本地部署。

之前用AI,都还是习惯于命令式的,例如:帮我做XX;帮我把XX转换为YY。

这种情况得到的结果,通常AI理解的肯定不如一个经验丰富的数字设计好;而且公司产品一些常用的设计方法,AI也无从知晓。

然后,就想到,是不是让AI教我,如何深度定制C转verilog的行为,让它更懂我。下面是基于这个思路,和多个AI提问后,结果的融合。

三、如何深度定制AI的行为

书回正题,怎么利用现有的大模型(非本地部署,等有条件了,再尝试本地部署)。

其实,我也不知道怎么能让AI帮我把C转换为verilog,那我先问问它们。

输入提示词:

我是一名芯片开发工程师,我能让你帮我把C语言代码翻译为verilog吗? 我之前已经有比较多的c转verilog的代码,如何能让你按照我的工作习惯进行转换?

得到的回答:

1、提供样本,用于让AI学习规则和开发习惯。

2、提供额外的规则文档,深度定制verilog的编写方式。

关于样本

准备阶段,需要喂给AI的代码对(c-verilog)的样本:

这些文档是用来描述转换规则的。建议准备3到5对转换结果。

这些样本中,AI可以学习到命名规范(例如C的函数名与verilog的module名的转换关系);接口映射规则‘状态机编码风格;for循环的展开规则。因此,这些样本,最好也有这些信息。

代码对的示例(C),含for循环:

// C示例 (sum_array.c) 
int sum(int arr[4]) { int s = 0; for(int i=0; i<4; i++) s += arr[i]; return s; 
}
代码对的示例(verilog):
// 对应Verilog(按你的风格)
module sum_array (input clk,input [31:0] arr [0:3],output reg [31:0] sum_out
);
always @(posedge clk) beginsum_out <= arr[0] + arr[1] + arr[2] + arr[3];  // 循环展开
end
endmodule

关于规则文档

除了样本,还可以提交结构化的规则文档——描述你的一些习惯,深度定制:

例如:

- 接口命名:输入加`_i`后缀,输出加`_o`

- 状态机:用三段式FSM,状态名全大写(如`IDLE`, `CALC`)

- 位宽声明:显式写出`[MSB:0]`而非`[MSB-1:0]`

- 时序逻辑:非阻塞赋值统一用`<=`

- 组合逻辑:用`assign`或`always@(*)`,避免`wire/reg`混用

四、进一步的优化

  • 局部优化或者修改:可以针对不满意的地方,提出改进要求。之前对AI生成的python代码进行过局部的微调,还比较可控——例如,要求某个函数的返回值类型、函数的调用方式从循环改为递归等等。

  • 增量转换:例如仅修改变化的代码段

http://www.dtcms.com/a/322558.html

相关文章:

  • 阿里云 ECS 怎么用 nginx 部署80端口多个网站
  • 无印良品:回归本质的管理哲学
  • 海康威视摄像头实时推流到阿里云公网服务器(Windows + FFmpeg + nginx-rtmp)
  • webrtc弱网-BandwidthQualityScaler 源码分析与算法原理
  • Ruoyi-Vue-Plus 修改包名、模块名、项目名
  • MySQL 临时表详细说明
  • 20.万物皆可变身术:状态模式架构全景解析
  • 【Git】Visual Studio 实现合并分支
  • 在 Ubuntu 中测试串口通信:详细指南与实践
  • 【面试场景题】微博热点新闻系统设计方案
  • 容器docker场景下新增接口测试及工具使用方法介绍
  • 人工智能技术发展历史演变
  • Java基础-TCP通信(多发多收和一发一收)
  • 八、Linux Shell 脚本:变量与字符串
  • Dotenv 入门教程
  • 政府数字化大屏系统 - Flask实现方案
  • 上海AI Lab、浙大EagleLab等提出RRVF:利用「验证非对称性」,只输入图片学习视觉推理
  • 接口文档深入解析
  • OpenAI开源大模型 GPT-OSS 开放权重语言模型解析:技术特性、部署应用及产业影响
  • Python基础教程(七)匹配模式:隐藏在结构之美中的编程革命
  • JVM常用参数有哪些?
  • Orange的运维学习日记--36.NFS详解与服务部署
  • 人脸情绪检测数据集-9,400 张图片 智能客服系统 在线教育平台 心理健康监测 人机交互优化 市场研究与广告 安全监控系统
  • WinForm 复合控件(用户控件):创建与使用指南
  • 【2025】Datawhale AI夏令营-多模态RAG-Task1、Task2笔记-任务理解与Baseline代码解读
  • 线程池多反应堆服务器webserver(c++)
  • 免费PDF编辑软件 pdf24-creator 及其安装包
  • 【无标题】AI 赋能日常效率:实用案例与操作心得分享
  • AI工具在数据质量管理中的应用
  • 电子电气架构 --- 电气/电子架构迁移已拉开帷幕