凡亿专栏 | 在IC设计/验证中怎么应用ChatGPT?
在IC设计/验证中怎么应用ChatGPT?

技术改变生活。最近一段时间,OpenAI旗下的ChatGPT大火。根据官网自身的介绍(见图1),其是由 OpenAI 提出的大型预训练语言模型,使用了许多深度学习技术,可以生成文本内容,也可以进行文本分类、问答等任务。GPT 与传统的机器学习方法不同,它通过预先训练来学习大量文本数据,然后可以进行各种自然语言处理任务。

c1ce59460f07733697766c982e1708.png

图1  ChatGPT官网简介(来自https://openai.com/blog/chatgpt/)


刚看到这个信息的时候,小编就联想到了咱们身为IC工程师,有没有方法可以利用这个工具,提升效率进一步解放生产力?首先想到的就是,日常工作中会用到的各种脚本,包括但不限于shell/python/perl/makefile,实现特定功能,帮助流程自动化,提升效率。如果这个工具真的好用,那么对于工程师群体应该帮助很大!按照官网的介绍,工程师们完全可以把所要实现的逻辑步骤用自然语言描述清楚,然后ChatGPT会翻译出满足相应要求的代码进行实现。话不多说,如图2直接上干货进行测试!


5649043663ee2843512a757f6ff67e.png

图2  简单shell脚本自动生成

测试效果简直太惊艳了,不但进行了背景知识的介绍,实现过程更是注释清晰明了,甚至补充了代码的注意事项,谁能不爱这个工具呢!!!随后小编也试过用perl和python来写脚本,效果如下。

要求:写一个perl脚本,文件名叫test.pl,查找当前目录下包含“abc”字符串的文件,将这些文件备份,备份名称为在原名称后加“_bak”。备份完后,原有的文件中包含“abc”字符串前插入一行字符串,“1st,所有备份的文件不进行此修改。调用同目录下另一个叫做mkdir.pl的脚本。mkdir.pl脚本的内容,在当前目录下建立叫做“test_bak”的文件夹,将之前备份的带“_bak”的文件移动到这里面。详情见图3.


e82bcfb43e67d6f65ea8b8fde8a6cf.png


a743faf97ea3c1c9ba62ffd6cd8529.png

要求:写一个python脚本,文件名叫test.py,查找当前目录下包含“abc”字符串的文件,将这些文件备份,备份名称为在原名称后加“_bak”。备份完后,原有的文件中包含“abc”字符串前插入一行字符串,“1st, 所有备份的文件不进行此修改。调用同目录下另一个叫做mkdir.py的脚本。mkdir.py脚本的内容,在当前目录下建立叫做“test_bak”的文件夹,将之前备份的带“_bak”的文件移动到这里面。详情见图4。


26addff87891edeb7b839174f27e70.png

6cd7e374e6b68755f0c4f5ea18a7fe.png

哈哈,继续发挥想象,能不能写verilog呢?下面这段是ChatGPT写的简单APB总线接口模块。图太长,直接贴出代码了。

module apb_reg_if (    input  wire        pclk,    input  wire        presetn,    input  wire [31:0] paddr,    input  wire [31:0] pwdata,    output wire        psel,    output wire        penable,    output wire        pwrite,    output wire [31:0] prdata);// 地址和数据宽度可配置的寄存器reg [31:0] regs [0:31];parameter ADDR_WIDTH = 5, DATA_WIDTH = 32;// 根据地址选择寄存器always @(paddr) begin    psel <= paddr="">end// 寄存器读写always @(posedge pclk or negedge presetn) beginif (!presetn) begin    // 复位寄存器    for (int i = 0; i < 32; i++)        regs[i] <= 0="">endelse if (psel && penable) begin    if (pwrite) begin        // 写入数据到寄存器        regs[paddr[ADDR_WIDTH - 1:0]] <= pwdata="">    end    else begin        // 读取寄存器数据        prdata <=>    endendendendmodule

一眼看上去,貌似没有什么问题。惊喜,继续挑战,写点验证环境,以下是部分代码。

class apb_reg_env extends uvm_env;    `uvm_component_utils(apb_reg_env)    apb_reg_if apb_reg_if;apb_reg_tc apb_reg_tc;function new(string name = "apb_reg_env", uvm_component parent = null);    super.new(name, parent);endfunctionvirtual function void build_phase(uvm_phase phase);    // 创建测试设计实例    apb_reg_if = apb_reg_if::type_id::create("apb_reg_if", this);    // 创建并配置测试用例    apb_reg_tc = apb_reg_tc::type_id::create("apb_reg_tc", this);    apb_reg_tc.set_config_object(this);endfunctionvirtual function void run_phase(uvm_phase phase);    // 运行测试并收集结果    apb_reg_tc.start(null);    apb_reg_tc.finish(null);endfunction

endclass

同样的,效果很让人惊艳!!此外,小编还尝试了提论问题让ChatGPT写小作文回答、写爬虫等也是可行的。下面是关于这个工具的一些思考:

  1. 能够做到按照言语要求给出代码,对于固定结构的模块或者功能,帮助会很大。

  2. 能够详细的为代码添加描述性注释。

  3. 言语描述越精确,细节丰富,相应生成的代码准确度越高。

  4. 生成的代码正确性不能保证100%,还是需要人为实际检查运行。

  5. 对于初级工程师,效率可以大大滴提升!!

总之,这个工具太让人惊艳了,小编个人认为这是具有划时代意义的,甚至可以说降低了各行各业的编程门槛,让普通人也可以更容易的接触编程。网上如何注册的教程很多,今天小编就不在这里放了。不知大家还有没有奇妙的想法,可以和这个工具结合,碰撞出更多创新的火花呢?

最后,祝福大家,保持健康!欢迎评论区留言讨论。



声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表凡亿课堂立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。
相关阅读
进入分区查看更多精彩内容>
精彩评论

暂无评论