利用 ChatGPT-4o 自动化 RTL 设计流程

简介

这个 idea 是我在痛苦的 debugging 的过程中突发奇想,能不能直接利用 ChatGPT-4o 模型自动生成对应功能的 RTL 文件,自动编译生成 wave 文件。于是,我通过测试一个简单的 full adder 电路设计,发现这个流程是完全可以跑通的,因此记录如下。

操作步骤

第一步

ChatGPT-4o 对话框输入以下内容: You should be a Linux terminal, the version is CentOS Linux 7, and Icarus Verilog is installed. I'll type the command and you'll reply with what the terminal should display. I want you to only echo terminal output within a unique block of code, and nothing else. Don't write explanations. Do not type commands unless I instruct you to do. When I need to tell you something in English, I put the text in side curly braces {like this}. My first command is pwd.

返回内容一般为:

第二步

ChatGPT-4o 对话框输入以下内容: mkdir verification; cd verification

第三步

ChatGPT-4o 对话框输入以下内容,确认已经安装 Icarus Verilog: iverilog --version

返回内容一般为:

第四步

ChatGPT-4o 对话框输入以下内容,生成所描述的"adder.v"文件: {In the cuurent folder, create a file named "adder.v". The content of this file is to implement a full adder in verilog HDL language. This full adder has three inputs and two outputs. The three inputs are two data inputs with a bit width of 4 bits, and a carry input from the lower bit. The two outputs are the data result with a bit width of 4 bits and a carry result.}

返回内容一般为,这步可能具体代码不同,但实现功能应一致:

ini 复制代码
module full_adder(
    input [3:0] A,
    input [3:0] B,
    input Cin,
    output [3:0] Sum,
    output Cout
);

    wire [4:0] temp_result;

    // Perform addition including the carry input
    assign temp_result = A + B + Cin;

    // Assign the sum and carry outputs
    assign Sum = temp_result[3:0];
    assign Cout = temp_result[4];

endmodule

第五步

ChatGPT-4o 对话框输入以下内容,生成所描述的"top_adder.v"文件: {In the current folder, create a file called "top_addr.v". The content of this file is to use the verilog HDL language to implement a top layer to verify the full adder just generated above. In this testbench, it is necessary to instantiate the design of the full adder. The testbench needs to contain the statement to generate the vcd wave file.}

返回内容为:

ini 复制代码
`timescale 1ns/1ps

module top_addr;

    reg [3:0] A;
    reg [3:0] B;
    reg Cin;
    wire [3:0] Sum;
    wire Cout;

    // Instantiate the full_adder module
    full_adder uut (
        .A(A),
        .B(B),
        .Cin(Cin),
        .Sum(Sum),
        .Cout(Cout)
    );

    initial begin
        $dumpfile("waveform.vcd"); // Generate VCD file
        $dumpvars(0, top_addr);

        // Test cases
        A = 4'b0001; B = 4'b0010; Cin = 1'b0; #10;
        A = 4'b0101; B = 4'b0110; Cin = 1'b1; #10;
        A = 4'b1111; B = 4'b0001; Cin = 1'b0; #10;
        A = 4'b1001; B = 4'b1001; Cin = 1'b1; #10;

        $finish;
    end

endmodule

第六步

ChatGPT-4o 对话框输入以下内容,生成所描述的"Makefile"文件: {Under the current folder, create a file named "Makefile", where the commands include compile. The compile command will use iverilog to compile the "adder.v" file and the "top_adder.v" file you wrote, and generate a wave file named "wave".}

返回内容为:

makefile 复制代码
compile:
	iverilog -o wave adder.v top_addr.v

第七步

ChatGPT-4o 对话框输入以下内容:make compile

返回内容为:

第八步

ChatGPT-4o 对话框输入以下内容:vvp -n wave -lxt2

返回内容为:

第九步

ChatGPT-4o 对话框输入以下内容:{download waveform.vcd for me}

由于 ChatGPT 是对话形式的界面,目前还没测试直接生成波形图,所以把波形文件下载了下来。

返回内容为:

最后在自己的系统里,利用 GtkWave 成功生成了波形图,yeah !!

注意

第一,安装的软件不能是 VCS,Verdi 这类闭源软件,所以我选择了 Icarus Verilog;第二,我这里没让 ChatGPT 写太复杂的 verilog HDL 代码,可能相对复杂的代码需要 debug 一下,这也可以交给 ChatGPT 做(我猜的),后面真正的全自动流程化 RTL 设计还要再打磨一下,但至少这次把流程跑通了,yeah !!!

相关推荐
美酒没故事°20 小时前
Open WebUI安装指南。搭建自己的自托管 AI 平台
人工智能·windows·ai
云烟成雨TD20 小时前
Spring AI Alibaba 1.x 系列【6】ReactAgent 同步执行 & 流式执行
java·人工智能·spring
AI攻城狮20 小时前
用 Obsidian CLI + LLM 构建本地 RAG:让你的笔记真正「活」起来
人工智能·云原生·aigc
鸿乃江边鸟20 小时前
Nanobot 从onboard启动命令来看个人助理Agent的实现
人工智能·ai
lpfasd12320 小时前
基于Cloudflare生态的应用部署与开发全解
人工智能·agent·cloudflare
俞凡20 小时前
DevOps 2.0:智能体如何接管故障修复和基础设施维护
人工智能
comedate21 小时前
[OpenClaw] GLM 5 关于电影 - 人工智能 - 的思考
人工智能·电影评价
财迅通Ai21 小时前
6000万吨产能承压 卫星化学迎来战略窗口期
大数据·人工智能·物联网·卫星化学
liliangcsdn21 小时前
Agent Memory智能体记忆系统的示例分析
数据库·人工智能·全文检索
GISer_Jing21 小时前
Page-agent MCP结构
前端·人工智能