首页 >>  正文

verilog反馈移位寄存器

来源:baiyundou.net   日期:2024-09-20

西风 发自 凹非寺

量子位 | 公众号 QbitAI

和ChatGPT聊聊天,就可解决CPU开发过程中的一大难题?

纽约州立大学(NYU)研究人员完成了一件看似不可能的事情:

无需专业的硬件描述语言(HDL),仅靠说人话就能设计芯片!

在ChatGPT的帮助下,他们不仅设计出CPU上的一个组件,甚至还通过了有效性验证环节。

这个组件主要负责创造出一种基于八位累加器的微处理器架构的逻辑。而累加器本质上是寄存器(存储器),是专门存放算术或逻辑运算的一个操作数和存储运算结果的。这是CPU运作中不可或缺的一部分。

所以,还有什么是大语言模型不能做的?

有网友表示:

芯片设计的部分流程实现自动化无疑是个好消息。

也有网友表现出对在芯片设计中使用AI编写HDL的担忧:

ChatGPT对芯片设计干了啥?

通常,设计和制造芯片的过程中会经历几个阶段。

其中一个阶段是用硬件描述语言(HDL)(例如Verilog)描述芯片内不同部件的实际几何形状、密度和整体布局。

在此前,作为一个极其专业化和复杂的领域,HDL编写一直是一项相对罕见且非常难以掌握的工作。

研究团队成员之一、也是研究助理教授的Hammond Pearce博士更是认为:

硬件描述语言的最大挑战就是没有多少人知道如何编写它们,很难成为这方面的专家。

这也就意味着,即使是最好的工程师也还是经常需要用这种语言做一些琐碎的事情。

而ChatGPT作为一种模式识别器,可以在各种类型的语言中转换自如,这就可以帮助工程师们跳过HDL阶段。

△使用 LLM 创建 IC(集成电路)的设计流程。

在这项研究中,研究人员分别使用LLM对八个具有代表性的硬件设计示例进行了研究。工程师与LLM之间实时来回交互,将纯英文文本逐步转化为Verilog(HDL)的等效代码。

其中一位硬件工程师与LLMs共同设计了一种新颖的基于八位累加器的微处理器体系结构。他们将这些基准测试和处理器发送到Skywater 130纳米Shuttle进行流片(tapeout)。

这个过程中,研究人员评估了ChatGPT-4、ChatGPT-3.5、Bard、HuggingChat四个不同LLM创建硬件设计的Verilog能力:

此外,研究人员还针对8位移位寄存器进行了基准测试。告诉大模型正在尝试为一个「测试名称」创建一个Verilog模型。然后提供规范说明,定义输入和输出端口以及其他所需的具体信息。最后询问他该如何编写一个满足这些规范的设计。

△8位移位寄存器的设计提示

下面是不同大模型给出的设计方案:

△左图是ChatGPT-4的八位移位寄存器设计,右图是ChatGPT-3.5

△左图是Bard(第4行的「红色」输入过宽),右图是HuggingChat(截断,格式化)

如上图所示,虽然ChatGPT都能够满足规格要求并开始进行设计流程,但Bard和HuggingChat都未能满足规格要求的初始标准。

研究人员又基于Bard和HuggingChat的初始提示,让它们重新生成了五次回答,但两者还是都失败了。Bard一直无法满足给定的设计规格要求,而HuggingChat的Verilog输出在模块定义之后就不符合语法规范。

鉴于Bard和HuggingChat在初始的挑战基准测试中表现不佳,研究人员决定后续完整测试仅对ChatGPT-4和ChatGPT-3.5进行。

与此同时,顺便让大模型进行了Testbench(测试台)的设计:

你能为这个设计编写一个Verilog测试台吗?测试台应该具备自检功能,并且能够与iverilog一起用于仿真和验证。如果测试用例失败,测试台应该能够提供足够的信息,以便找到并解决错误。

最终结果表明ChatGPT-4的表现较为出色。大多数基准测试都通过了,并且大部分只需要工具反馈即可。

与创建可运行设计相比,ChatGPT-4在创建可运行的测试台上遇到了更多困难,往往还是需要人类的反馈意见。

而与ChatGPT-4相比,ChatGPT-3.5的表现明显较差,大多数基准测试都失败了,而那些通过测试台的对话大多数也不符合规范。与ChatGPT-4相比,ChatGPT-3.5每次对话和基准测试之间会出现各种各样的问题,在设计和测试台方面需要更频繁地进行修正。

ChatGPT是芯片设计中的“力量倍增器”

随着大语言模型(LLM)的继续发展,未来从构想到功能设计,LLM或许都可以轻松实现。

△研究人员用ChatGPT-4设计的基于累加器的数据通路(图是人绘制的),控制信号用虚线表示

研究人员认为:

尽管我们强调了模型的单步性能(即一步完成设计),但对于硬件应用来说,让它们以“共同设计师”的身份加入,可能会表现得更好。

当与经验丰富的工程师协同工作时,它们可以成为一种“力量倍增器”。工程师可以根据模型提供的“初版设计方案”,进行微调和快速迭代。

Hammond Pearce博士说道:

这项研究成果是我们认为首次完全由人工智能生成的硬件描述语言(HDL)转化为物理芯片的案例。一些人工智能模型,比如OpenAI的ChatGPT和谷歌的Bard,可以生成不同编程语言的软件代码,但它们在硬件设计领域的应用尚未被广泛研究。

而这项研究表明,人工智能在硬件制造方面也具有潜力,尤其是在对话式应用中,通过反复交流可以完善设计。

并且,这样一来HDL编写过程中人为引起的错误就会减少,从而可缩短设计时间和上市时间,也可允许更多创造性的设计。

不知一些HDL工程专家听到这里是否会略感紧张。

研究人员认为如果这个过程能够实现自动化,不仅可以加快现在的工作速度,还可以减轻人为瓶颈。但是,完全依靠类似于ChatGPT这种大模型,或者依赖电力运行的软件机器也存在一定的风险。用于芯片设计的LLM在训练阶段也存在难解的黑盒子等一系列问题。

对此,你有什么看法?

参考链接:

[1]https://arxiv.org/abs/2305.13243(论文链接)

[2]https://www.tomshardware.com/news/conversation-with-chatgpt-was-enough-to-develop-part-of-a-cpu

— 完 —

量子位 QbitAI · 头条号签约

","gnid":"989ea3f057c407ef0","img_data":[{"flag":2,"img":[{"desc":"","height":"404","title":"","url":"https://p0.ssl.img.360kuai.com/t01bc73edb88485d33c.jpg","width":"1188"},{"desc":"","height":"750","title":"","url":"https://p0.ssl.img.360kuai.com/t01948b51c8bcbf82f1.jpg","width":"750"},{"desc":"","height":"172","title":"","url":"https://p0.ssl.img.360kuai.com/t0147d979143c2658c5.jpg","width":"1312"},{"desc":"","height":"252","title":"","url":"https://p0.ssl.img.360kuai.com/t01466191a3ec1a8e23.jpg","width":"1352"},{"desc":"","height":"480","title":"","url":"https://p0.ssl.img.360kuai.com/t015946f75cdc7e0709.jpg","width":"722"},{"desc":"","height":"272","title":"","url":"https://p0.ssl.img.360kuai.com/t01976271934e43bc9d.jpg","width":"1376"},{"desc":"","height":"288","title":"","url":"https://p0.ssl.img.360kuai.com/t013cdd7af7fd7e9d7e.jpg","width":"716"},{"desc":"","height":"488","title":"","url":"https://p0.ssl.img.360kuai.com/t0127210ab14689222b.jpg","width":"1572"},{"desc":"","height":"566","title":"","url":"https://p0.ssl.img.360kuai.com/t01c9ef65be80b8d139.jpg","width":"1578"},{"desc":"","height":"140","title":"","url":"https://p0.ssl.img.360kuai.com/t0115625791e6f3c7cc.jpg","width":"704"},{"desc":"","height":"1040","title":"","url":"https://p0.ssl.img.360kuai.com/t0108c48d1e6ddd5b0f.jpg","width":"1388"},{"desc":"","height":"712","title":"","url":"https://p0.ssl.img.360kuai.com/t012b94250b33608589.jpg","width":"1376"}]}],"original":0,"pat":"art_src_3,fts0,sts0","powerby":"hbase","pub_time":1687236120000,"pure":"","rawurl":"http://zm.news.so.com/df08445203611d4214f34d0faf41ba9e","redirect":0,"rptid":"353b882d582eefff","rss_ext":[],"s":"t","src":"量子位","tag":[{"clk":"ktechnology_1:cpu","k":"cpu","u":""},{"clk":"ktechnology_1:芯片","k":"芯片","u":""}],"title":"ChatGPT强势加入芯片设计!不用学专业硬件描述语言,说人话就行

叶陶中2889verilog左移位寄存器 -
盖毛俩15052187319 ______ 很简单的 always@(posdge clk) begin din[7:0] <= {din[6:0],datain} end

叶陶中2889写出4位串入、串出移位寄存器的verilog HDL描述.
盖毛俩15052187319 ______ module a(clk,din,dout); input clk,din; output dout; reg [3:0] rdata; assign dout = rdata[3]; always@(posedge clk) rdata &lt;= {rdata[2:0],din}; endmodule

叶陶中2889FPGA中怎么产生一个随机数? -
盖毛俩15052187319 ______ 采用伪随机数,至于生成式,可以自己试试. 一般产生随机数是以2的N次幂, 如verilog语法 reg [7:0] a; always @(posedge clk or negedge rst_n) begin if(~rst_n) a <= 8'haa; else a <= #1 {a[0]^a[1]^a[3]^a[4]^a[7],a[7:1]}; end 至于初始值和生成式,可以自己调整,使其更符合伪随机数. 为了产生更大范围的伪随机数,还可以在前一个伪随机数下在做一次.

叶陶中2889关于verilog移位运算符 -
盖毛俩15052187319 ______ x<<n使用的是逻辑移位运算符,其对包括符号位在内的所有位进行移位操作; x<<<n使用的是算术移位运算符,其只对非符号位的进行移位操作,而符号位保持不变.

叶陶中2889写出4位串入、串出移位寄存器的verilog HDL描述(要准确答案,正确的话,我把所有分都给你!) -
盖毛俩15052187319 ______ input [N-1: s&lt: s&lt,in; default; shiftreg[3]&lt,f,rst; always@(a or b or f) case(f) `ADD: s<=a | b:0] s; input in: s<=in;=shiftreg[0]; `OR:0] a;=a & b; output out,b; end assign out=shiftreg[3]: s< `AND; wire out:0] f;=shiftreg[1];=a-b; `SUB:0] shiftreg;=a+b:0] s; ...

叶陶中2889EDA技术应用中,用verilog HDL编写的移位寄存器中预置位是什么作用? -
盖毛俩15052187319 ______ 要看具体功能了,预置位可以让寄存器初始值设定位你要的值

叶陶中2889verilog中移位操作符号 -
盖毛俩15052187319 ______ 比如你定义一个寄存器型变量a reg [3:0]a; a<=a<<1;(这是让a左移一位的表示方法) a<=a>>1;(这是让a右移一位的表示方法) <<表示左移,后面跟着的数字表示移位的位数. >>表示右移,后面跟着的数字表示移位的位数.

叶陶中2889verilog移位出现问题 该怎么办 -
盖毛俩15052187319 ______ 第一:a,b应该定义为reg而非wire; 第二:x,y是输入,好像不用定义类型吧;第二:你的a,b是24位,而你的 {cout,sum}仅为20位,那这个{cout,sum}=a+b+cin有问题;

叶陶中2889在verilog HDL语言中的阻塞赋值和非阻塞赋值究竟有什么不同?同一变量在不同的过程块中(同时触发)又是如 -
盖毛俩15052187319 ______ 在always语句块中,verilog语言支持两种类型的赋值:阻塞赋值和非阻塞赋值.阻塞赋值使用“=”语句;非阻塞赋值使用“<=”语句.注意,千万不要将这两种赋值方法与assign赋值语句混淆起来,assign赋值语句根本不允许出现在always语...

叶陶中2889用verilog编的序列检测器仿真时输出错误,求高手解答 -
盖毛俩15052187319 ______ 问题好多啊,先复习一下数电吧.1.移位寄存器是D触发器构成的,而触发器是时序逻辑,所以,第一,你没有时钟.2.移位寄存器的初始状态是通过reset实现的,而不是initial,initial只是用来仿真用的.3.序列检测器是要做序列检测的状态机的,不是一个简单的state==s.举例来说,如果你输入的是00111100,那么照你这个写法,0011不是s,1100也不是s,那么你就漏过了中间的1111了.4.后面的留待你慢慢学习后研究吧

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024