技术改变生活。最近一段时间,OpenAI旗下的ChatGPT大火。根据官网自身的介绍(见图1),其是由 OpenAI 提出的大型预训练语言模型,使用了许多深度学习技术,可以生成文本内容,也可以进行文本分类、问答等任务。GPT 与传统的机器学习方法不同,它通过预先训练来学习大量文本数据,然后可以进行各种自然语言处理任务。
图1 ChatGPT官网简介(来自https://openai.com/blog/chatgpt/)
刚看到这个信息的时候,小编就联想到了咱们身为IC工程师,有没有方法可以利用这个工具,提升效率进一步解放生产力?首先想到的就是,日常工作中会用到的各种脚本,包括但不限于shell/python/perl/makefile,实现特定功能,帮助流程自动化,提升效率。如果这个工具真的好用,那么对于工程师群体应该帮助很大!按照官网的介绍,工程师们完全可以把所要实现的逻辑步骤用自然语言描述清楚,然后ChatGPT会翻译出满足相应要求的代码进行实现。话不多说,如图2直接上干货进行测试!
图2 简单shell脚本自动生成
测试效果简直太惊艳了,不但进行了背景知识的介绍,实现过程更是注释清晰明了,甚至补充了代码的注意事项,谁能不爱这个工具呢!!!随后小编也试过用perl和python来写脚本,效果如下。
要求:写一个perl脚本,文件名叫test.pl,查找当前目录下包含“abc”字符串的文件,将这些文件备份,备份名称为在原名称后加“_bak”。备份完后,原有的文件中包含“abc”字符串前插入一行字符串,“1st,所有备份的文件不进行此修改。调用同目录下另一个叫做mkdir.pl的脚本。mkdir.pl脚本的内容,在当前目录下建立叫做“test_bak”的文件夹,将之前备份的带“_bak”的文件移动到这里面。详情见图3.
要求:写一个python脚本,文件名叫test.py,查找当前目录下包含“abc”字符串的文件,将这些文件备份,备份名称为在原名称后加“_bak”。备份完后,原有的文件中包含“abc”字符串前插入一行字符串,“1st, 所有备份的文件不进行此修改。调用同目录下另一个叫做mkdir.py的脚本。mkdir.py脚本的内容,在当前目录下建立叫做“test_bak”的文件夹,将之前备份的带“_bak”的文件移动到这里面。详情见图4。
哈哈,继续发挥想象,能不能写verilog呢?下面这段是ChatGPT写的简单APB总线接口模块。图太长,直接贴出代码了。
module apb_reg_if (
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[ADDR_WIDTH - 1:0] == 0;
end
// 寄存器读写
always @(posedge pclk or negedge presetn) begin
if (!presetn) begin
// 复位寄存器
for (int i = 0; i < 32; i++)
regs[i] <= 0;
end
else if (psel && penable) begin
if (pwrite) begin
// 写入数据到寄存器
regs[paddr[ADDR_WIDTH - 1:0]] <= pwdata[DATA_WIDTH - 1:0];
end
else begin
// 读取寄存器数据
prdata <= {DATA_WIDTH{psel}} & regs[paddr[ADDR_WIDTH - 1:0]];
end
end
end
endmodule
一眼看上去,貌似没有什么问题。惊喜,继续挑战,写点验证环境,以下是部分代码。
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);
endfunction
virtual 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);
endfunction
virtual function void run_phase(uvm_phase phase);
//
运行测试并收集结果
apb_reg_tc.start(null);
apb_reg_tc.finish(null);
endfunction
endclass
同样的,效果很让人惊艳!!此外,小编还尝试了提论问题让ChatGPT写小作文回答、写爬虫等也是可行的。下面是关于这个工具的一些思考:
能够做到按照言语要求给出代码,对于固定结构的模块或者功能,帮助会很大。
能够详细的为代码添加描述性注释。
言语描述越精确,细节丰富,相应生成的代码准确度越高。
生成的代码正确性不能保证100%,还是需要人为实际检查运行。
对于初级工程师,效率可以大大滴提升!!
总之,这个工具太让人惊艳了,小编个人认为这是具有划时代意义的,甚至可以说降低了各行各业的编程门槛,让普通人也可以更容易的接触编程。网上如何注册的教程很多,今天小编就不在这里放了。不知大家还有没有奇妙的想法,可以和这个工具结合,碰撞出更多创新的火花呢?