乐于分享
好东西不私藏

AI在IC设计中的实践操作

AI在IC设计中的实践操作

简单聊聊大模型在最近IC设计过程中的几个使用场景

1. 使用AI生成标准模块脚本

使用大模型产生能够生成CRC代码的脚本crc_gen.py,脚本能够支持多种多项式,支持输入位宽可变,输出CRC结果为固定位宽。期望crc_gen.py生成的CRC代码如下图。

1.1 使用心得

调用的大模型是deepseek-v4-pro,模型分析过程大致是靠谱的,但是产生的脚本不靠谱,产生的CRC代码存在错误,需要反复调试,存在风险。

2. 使用AI读取接口信号表格产生block IO和结构体

在进行方案设计时,我们常常会将模块接口信号以及相关的定义说明填写到表格中,当完成方案评审(包含信号评审对齐)后就可以直接写代码了,此时采用大模块读取表格直接提取表格内存,产出模块接口代码和接口相关结构体定义会特别方便。

大模块生成的接口信号和结构体定义如下:

Thrift                  // ==============================================================                  // AA-BB 接口结构体与参数定义                  // 生成时间:2025-12-20                  // 适用场景:PCIe 主机请求接口,AA为发起端,BB为接收端                  // ==============================================================                  // --------------------------                  // 位宽参数宏定义                  // 可根据项目实际需求修改配置                  // --------------------------                  `ifndef PCIE_HOSTID_WDTH                  `define PCIE_HOSTID_WDTH3// PCIe HostID 位宽,默认3bit                  `endif                  `ifndef PCIE_FUNCID_WDTH                  `define PCIE_FUNCID_WDTH14// PCIe FuncID 位宽,默认14bit                  `endif                  `ifndef PCIE_ADDR_WDTH                  `define PCIE_ADDR_WDTH64// PCIe 地址位宽,默认64bit                  `endif                  // --------------------------                  // 请求信息打包结构体                  // 对应表格中的 aa2bb_req_info 复合信号                  // --------------------------                  typedef struct packed {                  logic [`PCIE_HOSTID_WDTH-1:0]hostid;// 请求对应的HostID                  logic [`PCIE_FUNCID_WDTH-1:0]funcid;// 请求对应的FuncID                  logic [`PCIE_ADDR_WDTH-1:0]addr;// 请求目标地址                  } aa2bb_req_info_s;

模块AA接口信号

Java                  // ==============================================================                  // 模块AA:PCIe 请求发起端                  // 功能:向模块BB发送主机请求,输出请求有效信号与请求信息                  // 生成时间:2025-12-20                  // ==============================================================                  `include "aa_bb_interface.svh"                  module module_aa (                  // 全局时钟与复位                  inputwireclk,                  inputwirerst_n,                  // AA→BB 接口信号                  output regaa2bb_req_vld,                  output aa2bb_req_info_saa2bb_req_info                  // 可在此处添加模块AA的其他业务接口                  );                  endmodule

模块BB接口信号

C++                  // ==============================================================                  // 模块BB:PCIe 请求接收端                  // 功能:接收模块AA发送的主机请求,解析请求信息并执行对应操作                  // 生成时间:2025-12-20                  // ==============================================================                  `include "aa_bb_interface.svh"                  module module_bb (                  // 全局时钟与复位                  inputwireclk,                  inputwirerst_n,                  // AA→BB 接口信号                  inputwireaa2bb_req_vld,                  inputaa2bb_req_info_saa2bb_req_info                  // 可在此处添加模块BB的其他业务接口                  );                  endmodule

结构体定义

Thrift                  // ==============================================================                  // AA-BB 接口结构体与参数定义                  // 生成时间:2025-12-20                  // 适用场景:PCIe 主机请求接口,AA为发起端,BB为接收端                  // ==============================================================                  // --------------------------                  // 位宽参数宏定义                  // 可根据项目实际需求修改配置                  // --------------------------                  `ifndef PCIE_HOSTID_WDTH                  `define PCIE_HOSTID_WDTH3// PCIe HostID 位宽,默认3bit                  `endif                  `ifndef PCIE_FUNCID_WDTH                  `define PCIE_FUNCID_WDTH14// PCIe FuncID 位宽,默认14bit                  `endif                  `ifndef PCIE_ADDR_WDTH                  `define PCIE_ADDR_WDTH64// PCIe 地址位宽,默认64bit                  `endif                  // --------------------------                  // 请求信息打包结构体                  // 对应表格中的 aa2bb_req_info 复合信号                  // --------------------------                  typedef struct packed {                  logic [`PCIE_HOSTID_WDTH-1:0]hostid;// 请求对应的HostID                  logic [`PCIE_FUNCID_WDTH-1:0]funcid;// 请求对应的FuncID                  logic [`PCIE_ADDR_WDTH-1:0]addr;// 请求目标地址                  } aa2bb_req_info_s;

2.1 使用心得

几乎任意一个主流国产大模型都能100%完成,只要信号命名遵守项目规则,极少会出现错误。

3. 使用AI读取文档整理出细节点

可以使用大模型读取完整的PCIe协议,并且从协议中找到问题答案,并且让大模型给出参考原文用于人工校对。

案例提问:读取当前目录文档NCB-PCI_Express_Base_6.3.pdf,给出结论PF的bme信号是否控制VF的dma读写 ?

AI解答:如下

3.1 使用心得

部分大模型会胡编乱造,在我使用过程中,豆包和千问的部分版本都出现过此问题。协议原文没有的语句也会胡诌。目前我在Claude code经常调用deepseek-v4-pro,整体是挺靠谱的。最关键的一点:一定要根据协议原文校对答案。