本工程旨在给LLM输入合适的promt,通过调教,让LLM能够根据用户需求生成正确功能的RTL代码,包含三个目标:
-
小目标:将简单电路的算法模型转换为 RTL 实现,通过手动构建 FFT 和 FIR 电路的算法模型,设计一套标准化流程,并通过适当的训练使大模型能够自动生成电路代码,最终运行测试脚本以验证生成的 RTL 代码与算法模型的输出结果一致性。
-
中目标:参考“一生一芯”课程的教案及南京大学的 NEMU CPU 仿真器来设计CPU。采用迭代验证方式逐步实现各项功能和指令集,确保每条新加入的指令或功能模块在系统中能够正确集成,并在不影响已有测试的前提下保持系统的稳定性与一致性。
-
**大目标:**大语言模型生成单周期CPU顶层文件,完成CSR部分RTL代码与testbench让LLM生成CSR模块,进一步扩展CPU应用,在CPU上运行RT-thread操作系统和benchmark以及一些演示程序,探索LLM通过SPEC设计规范自动生成简单CPU。
基于上述三个目标,本工程以LLM模型算法调教工作为核心,使用正确功能的RTL代码作为学习对象,辅以Testbench结果作为反馈,使LLM模型最终能完成上述三个目标。
本工程留档于Github:https://github.com/battt77/LLM_For_RTL
本工程包含三个代码文件夹,每个代码文件夹都可以作为单独的工程进行使用,具体使用方法请参照文件夹内的使用文档:
- llm_code:本工程的核心代码,包含了可以正确完成小目标、中目标、大目标的LLM运行代码
- eval_script_code:包含了在小目标中使用的可以正确反馈FFT和FIR RTL代码运算结果正确性的脚本、FFT和FIR RTL源代码,使用MSE作为误差指标
- rtl_source_code:包含了在中目标和大目标中使用的CPU RTL源代码
项目解析:
- 构建生成FFT和FIR RTL电路的算法模型,适当的训练使大模型能够自动生成电路代码
- 运行FFT和FIR RTL电路测试脚本验证生成的 RTL 代码与算法模型的输出结果一致性
项目步骤:
- 确定FFT、FIR RTL电路基准代码,基于基准电路代码编写测试基于VCD文件的电路结果评估脚本
- 基于确定的FFT、FIR RTL电路基准代码,训练大模型,使用评估脚本测试生成电路结果相对于软件算法结果的一致性
项目路线图:
项目解析:
- 参考“一生一芯”课程的教案及南京大学的 NEMU CPU 仿真器来设计CPU
- 采用迭代验证方式逐步实现各项功能和指令集
项目步骤:
- 完成单周期CPU的各模块的参考模型与Testbench,完成CPU的简单运行时环境使其能进行调试与读取程序
- LLM借助testbench与参考模型生成CPU的各模块,通过顶层连接并运行测试程序
项目路线图:
项目解析:
- 大语言模型生成单周期CPU顶层文件,完成CSR部分RTL代码与Testbench让LLM生成CSR模块
- 在CPU上运行RT-thread操作系统和benchmark以及一些演示程序
- 探索LLM通过SPEC设计规范自动生成简单CPU
项目步骤:
- 完成CSR部分的参考模型并搭建上下文切换与异常处理的运行时环境
- LLM模型通过与参考模型的对比生成CSR模块与CPU的顶层文件
- 设计规范SPEC让LLM自动生成CPU
项目路线图: