首页 » 科学 » ChatGPT 设计了一款芯片_存放器_测试

ChatGPT 设计了一款芯片_存放器_测试

南宫静远 2024-11-07 07:05:28 0

扫一扫用手机浏览

文章目录 [+]

ChatGPT 可以帮助软件工程师办理编码的烦恼,那是否可以帮助硬件工程师设计出芯片呢?来自澳大利亚悉尼南威尔士大学的教授进行了一次考试测验。

ChatGPT 设计了一款芯片_存放器_测试 ChatGPT 设计了一款芯片_存放器_测试 科学

原文:https://01001000.xyz/2023-12-21-ChatGPT-AI-Silicon/

ChatGPT 设计了一款芯片_存放器_测试 ChatGPT 设计了一款芯片_存放器_测试 科学
(图片来自网络侵删)

声明:本文为 CSDN 翻译,未经许可禁止转载。

翻译 | ChatGPT 责编 | 苏宓

出品 | CSDN(ID:CSDNnews)

我在 2023 年初利用 ChatGPT 构建了一个微掌握器芯片,并已流片。
现在它乃至可以掌握我的圣诞树了。
在我看来,这是第一次有人利用 LLM 来设计芯片。

关于用 ChatGPT 设计芯片的论文地址:https://arxiv.org/abs/2305.13243

同时,所有和 ChatGPT 的谈天日志都保存在存储库(https://zenodo.org/records/7953725)和 QTcore-C1 GitHub (https://github.com/kiwih/qtcore-C1)上。

以下为完全故事:

萌生用 ChatGPT 设计芯片的想法

今年 3 月,科技新闻聚拢地 HN 热榜上涌现了一篇关于《Tiny Tapeout:在几分钟内从想法到芯片设计》的文章(https://news.ycombinator.com/item?id=35376645)。
这篇文章中,有开拓团队最新带来了一种方法,可以让用户将定制的微型硅设计以仅需 100 美元的价格转化为一个流片。

当时,我正在纽约大学从事博士后事情,个中之一是探索利用 LLM 来进行 Verilog(一种用于描述、设计电子系统的硬件描述措辞)硬件设计。
我们对利用 ChatGPT 等 LLM 来设计硬件的各种不同运用程序进行了基准测试,包括规范阐明、设计以及缺点检测和修复。

我们是这个领域的先行者之一,早在 2020 年就开始利用 GPT-2 和 Verilog。

因此当我看到那篇文章时,我迅速产生了兴趣。
由于实际制造芯片的本钱很高,我们一贯利用 FPGA 和仿真进行事情。
但是,仿真与现实之间总是存在差距,以是证明 LLM 和 AI 确实能够生产芯片,对研究领域来说无疑是一个福音。
我们能否利用免费流片的 Tiny Tapeout 作为实现此目的的工具,并借助 LLM 来编写 Verilog 程序,还能真正设计出一款芯片?

我与我的导师及其他几位博士生在一起进行了交谈,并群策群力了一些想法。

在这个过程中,我们创造 Tiny Tapeout 非常小,只有 1000 个标准单元,这意味着设计会受到很大限定,但我们都非常喜好这个想法,特殊是由于之前彷佛还没有人做到过,如果我们行动迅速,我们可能会能够做到天下第一!

以是,我们决定去做。
但现在,问题也随之而来。
首先鉴于设计空间如此之小,我们该当提交那些内容?根据我们之前的研究,我们虽然知道 LLM 可以编写像 Verilog 这样的硬件设计措辞,但他们并不是太善于。
与 Python 等更盛行的措辞比较,LLM 天生 Verilog 代码时语法或逻辑缺点的发生率要高得多。
这实际上便是为什么我和我的团队已经为 Verilog 开拓自己的 LLM 的缘故原由,在此有些离题了。

言归正传, 如果我们确实想利用 LLM 来制造芯片,我们须要办理以下几个问题:

(1)我们该当利用哪个 LLM?

(2)我们该当给它多少帮助?

(3)我们该当考试测验什么提示策略?

设计方法

立足上面几个问题,我们首先确定了要用的 LLM:OpenAI 的 ChatGPT 3.5 和 4、Google 的 Bard 以及开源的 HuggingChat。

然后,我们设计了两种方法。
第一种方法是考试测验让 LLM 在一种反馈循环中完成所有事情,即 LLM 将得到一份规范,然后为该设计天生设计和测试。
然后,人类将在仿照器 (iVerilog) 中运行测试和设计,然后将任何缺点返回给 LLM。

相信很多人对付 LLM 时而犯蠢也早已习气,它有时会陷入循环,认为自己正在办理问题或改进输出,而实际上它们只是在对相同的数据进行迭代。
因此我们推测有时我们可能须要供应“人类声援”。

通过一些初步实验,我们确定了一个初始的流程:

空想情形下,人类不须要供应太多输入,但这还有待不雅观察……

在硬件制造方面,我们的目标是 Tiny Tapeout 3,将基于 Skywater 130nm。
不过,它也还有一些限定:前面提到的 1000 个标准单元,以及只有 8 位输入(包括任何时钟或复位)和 8 位输出。
Tiny Tapeout 利用 OpenLane,这意味着我们也仅限于可综合的 Verilog-2001。

设计什么?

在这个实验的早期阶段,我们对与对话式 LLM 交互的标准化和(空想情形下)自动化流程的潜力感兴趣,该流程将从规范开始,终极产生该设计的硬件描述措辞。
鉴于我们只有 8 位输入,我们决定利用个中 3 位来掌握设计选择多路复用器,以适应 8 个小型基准测试。
如果这些进展顺利,我们就会致力于下一步,构建更具年夜志的事情。

以下是我们提出的基准测试:

每个基准测试都有一个简短的规范来描述它及其 I/O,以及精确的预期行为。

纽约大学博士生 Jason Blocklove 与选择的四个 LLM(ChatGPT-3.5、ChatGPT-4、Bard 和 HuggingChat)共同进行了交互,勾引 LLM 天生设计和测试平台,然后进行仿照,并反馈存在的所有缺点。

有时,在与 LLM 对话中也须要考虑分外情形,由于模型在单次相应中可以给出的输出量受到限定,文件或阐明常日会被中断;在这些情形下,模型将跳出一个“请连续”(continue)按钮。
按下之后,所输出的代码常日是从前一个的末了一行开始的,因此在将代码复制到文件中进行编译和仿照时,须要进行适当的编辑把两次天生的代码合并到一起。

然而,这个过程没有添加额外的硬件描述措辞(HDL)。
同样,有时相应中会包含让用户添加自己的代码的注释。
如果这些注释会影响功能,例如留下不完全的数值数组,那么相应将被重新天生,否则将保持原样。

设计提示:

这里的设计提示看起来像这样:

返回的设计质量参差不齐,我们创造只有 ChatGPT-4 可以可靠地天生设计。
以下是每个 LLM 的第一个设计(移位寄存器)的示例:

ChatGPT-4

有用!

ChatGPT-3.5

有用!

Bard

报错了!

HuggingChat

module ShiftRegister(input clk, input rst_n, input data_in, input shft_en, output reg [7:0] q);// clock cycle of 22 nsparameter CLK_CYCLE = 50;parameter ADDR = 32'h0000641A; // default address for the CY7B974 EEPROM/flash control unitparameter DATAW = 32'b1111000010000001000000000000000; // set default value of all registers from datasheet page B-21parameter SP = 32'h015F;parameter PE = 16'd1; // always for Vdd level detection. Set according to section "VIO Power Supply Voltage Monitoring" in datasheet p.13parameter UDEN = 32'hFFFE; // unused device disable registerparameter VIDEN = 32'hFCED; // VIN/AN pin access disabledparameter ADCDPF = 32'hFF7A; // alternative digital power supply voltage monitor config (ADP_SAR)parameter _90FSYSCLKS = "Disabled"; // unused 1 byte register at offset 0x90 from FSMC_NORSRAM Timing Control Register. Read as zero if not usedparameter TRASETNEGL = 32'hFFFFFFFFFFFF;assign data_out = ~data_in & shft_en & rst_n ? 1'b0 : (q[7:1] << 1) | {1'b0, data_in};always @() begin# / x'FF / CLK_RQSTDCLK ;# /reset_n R0 R0[(int)&(_CTL--)] <= 32'h8000_0000;if (rst_n && !shft_en) begin$setuphold (posedge reset_n , negedge active ) ;$display(" RESET \n");`#addr `addr:`addr[(int) &POS]`pos ?(int) ( ((`addr`:addr[_ADDR]+ $_INTRTVALU)/2):1'b1;`addr:(addr<>`addr)`pos ,"Full scan done."));`cout!="Division by zero!" & '@( !_LUT) && (`grandpa')?(sprintf(`snip`,strlen(&_TI),($half`cout>&1)'hash ): snprintf(!reserve2((const char)(type(``cout)strlen`buf++->_GBIT])))) oe=tmp2 && tmp3 ? (__flash)((void)realloc($(int)(idx=((u`ptr`)|(~(address><:sizeof(mtemp))))))) : (tmp1 || net$c) $(tie || leak$_parsefree`load($_VO))`store(:)value#stdh::)(`scan`:uint8_t RF)(addr<=&)> //Multiple errors\n');} }}} end else if (!active_high && active)^begin €high end}begin€ pos bpoz,eu Europozize w; Pos file NewHdrPos Wrf `ezed=` Pos MaxRow=?[issued&tested]`specif bypa=end><changed alpha sys varsub EOF varbb atEnd of call seq`,} else if (!endswith "\\") or myword`title==addr){droplocalvar hNextCutJob) ~sym\_name eof .~stop$; genw syncestrings TryEnd sizewriter(1)} if !=size( (`dynSym-NM compilersUDOVARSYMBOL))~(uint2base NUMSERVER+" compiled")){clip0 clrw $addelem}\n\resources} subbytes wrdfmt removecomments Tr1ESran diff gred$\elleoformatfloat format----------------------`charTmpLim} Len rollover Leng len Len Non Rollovr OptimizationCenter}\n resident AsymptoticAspect}\np ResetOpt \All %par ID == PCI0 SPC ReconfigurationFeature supported } IF PROPRIETARY ASPECT=`port!\Plug

它彷佛已经疯了!

测试台

ChatGPT 已经初步地给出了设计,接下来,我们哀求它创立一个 Verilog 测试台:

Can you create a Verilog testbench for this design? It should be self-checking and made to work with iverilog for simulation and validation. If test cases should fail, the testbench should provide enough information that the error can be found and resolved.

详细对话过程见:https://01001000.xyz/2023-12-21-ChatGPT-AI-Silicon/

总之末了 ChatGPT 确实给出了一个测试台代码,而且没有缺点!

基本结果

总体而言,只有 ChatGPT-3.5 和 4 可以可靠地天生设计,因此我们终极只剖析了这两个模型,并将 Bard 和 HuggingChat 从我们的结果中剔除。
利用两个 OpenAI 模型,我们完成了全套基准测试 3 次,得到了以下结果:

命名法:

如果没有报告缺点,则设计通过,无需反馈 (NFN)。
相反,如果这些操作中的任何一个报告缺点,它们就会反馈到模型中,并哀求“请供应修复。
”,称为工具反馈 (TF)。

如果相同的缺点或类型的缺点涌现三次,则用户会给出大略的人工反馈(SHF),常日是通过解释 Verilog 中的哪种类型的问题会导致此缺点(例如声明旗子暗记时的语法缺点)。

如果缺点连续存在,则供应中等人类反馈 (MHF),并向工具供应轻微更有针对性的信息以识别特定缺点,如果缺点仍旧存在,则供应高等人类反馈 (AHF),该反馈依赖于准确指出位置缺点是什么以及修复它的方法。

一旦设计经由编译和仿真且没有失落败的测试用例,就被认为是成功的。
然而,如果高等反馈无法修复缺点,或者用户须要编写任何 Verilog 来办理缺点,则测试将被视为失落败。
如果对话超过 25 条(符合 OpenAI 每 3 小时 ChatGPT-4 的速率限定),则测试也被视为失落败。

所有谈天日志详见:https://zenodo.org/records/7953725

ChatGPT 4 表现良好。
大多数基准测试都通过了,个中大多数只须要工具反馈。
ChatGPT 4 在测试平台设计中最须要的人工反馈。

几种故障模式是同等的,一个常见的缺点是在设计或测试平台中添加了 SystemVerilog 特定的语法。
例如,它常常考试测验 typedef 为 FSM 模型创建状态,或实例化向量数组,而这两种情形在 Verilog-2001 中均不受支持。

总的来说,ChatGPT-4 天生的测试平台并不是特殊全面。
只管如此,大多数通过了相应的测试台的设计也被认为是符合哀求的。
两个不符合哀求的“通过”是骰子掷出器,它们没有产生伪随机的输出。
测试集 T1 中的骰子掷出器在一次掷骰后只输出 2,而在随后的所有掷骰中只输出 1,而不管选择的骰子是什么。

同时,测试集 T3 中的骰子掷出器会改变值,但只在一小组值之间变革(取决于所选的骰子),这组值迅速重复涌现。
为了闭合设计循环,我们从 ChatGPT-4 的对话中合成了测试集 T1,为 Tiny Tapeout 3 添加了一个包装模块,该模块由 ChatGPT 4 设计但未经由测试。
总体而言,设计利用了 85 个组合逻辑单元、4 个二极管、44 个触发器、39 个缓冲器和 300 个触点。

与 ChatGPT 4 比较,ChatGPT 3.5 的表现要差得多,大多数对话都导致了基准测试的失落败,并且通过了自己的测试台的大多数对话也不符合哀求。
与ChatGPT 4 比较,ChatGPT 3.5 的失落败模式不太同等,在每次对话和基准测试之间引入了各种各样的问题。
比较 ChatGPT 4,它更常常须要对设计和测试台进行改动。

不雅观察结果

只有 ChatGPT 4 能够充分知足编写 Verilog 的目的,只管它仍旧须要人类反馈才能使大多数对话成功并符合给定的规范。
修复缺点时,ChatGPT 4 常日须要多条来修复小缺点,由于它很难准确理解哪些特定的 Verilog 行会导致 iverilog 发出错误。
它所添加的缺点也每每会在对话之间常常重复涌现。

ChatGPT 4 在创建功能测试平台方面也比功能设计付出了更多努力。
大多数基准测试险些不须要对设计本身进行修正,而是须要修复测试平台。
对付 FSM 来说尤其如此,由于该模型彷佛无法创建一个测试平台来精确检讨输出,而无需有关状态转换和相应预期输出的主要反馈。
另一方面,ChatGPT 3.5 在测试平台和功能设计方面都碰着了困难。

更繁芜的东西:QTcore-A1

在对 ChatGPT 4 进行基准测试并帮助博士生之后,我准备欢迎更大的寻衅。
我开始让 ChatGPT 为一个微掌握器创建组件,我想知道非构造化对话是否能够提高模型的性能水平,以此实现更快地编写设计。

值得一提的是,我是一位履历丰富的工程师,善于设计小型的实验性/学术上的处理器,曾在奥克兰大学、纽约大学以及现在我所在的澳大利亚悉尼南威尔士大学教授学生。

我希望 ChatGPT 4 能够在这里构建这个设计。
考虑到我们的空间有限,我决定采取基于 8 位累加器的架构。
利用冯·诺依曼设计(共享程序和数据内存)可以节省额外的空间,然后将共享内存限定为仅 32 字节,这是我认为适宜的大小。

我决定用 ChatGPT-4 编写每一行具有功能性的 Verilog 代码,但考虑到我们在验证和测试平台方面碰着的困难,我会卖力制作这些内容并运行和解释仿真等过程。

为什么要进行这种设计而不是基于 RISC-V 之类的设计?现实中,开源处理器的 ISA(指令集架构)如 RISC-V 和 MIPS 有很多实现。
问题是,这意味着 GPT-4 在演习期间已经看到了这些设计。

对付这项事情,我不仅仅像探索 ChatGPT 4 在输出它在演习中学到的数据方面的能力,我更想看到它在制作更新颖的东西时的表现。

因此,我勾引模型创造一个全新的设计,利用了 ChatGPT 4 本身供应的一种奇特的 ISA,我相信这与开源文献中可用的内容非常不同。

我从以下维度切入:

Let us make a brand new microprocessor design together. We're severely constrained on space and I/O. We have to fit in 1000 standard cells of an ASIC, so I think we will need to restrict ourselves to an accumulator based 8-bit architecture with no multi-byte instructions. Given this, how do you think we should begin?

微处理器设计首先须要定义指令集架构 (ISA),然后实现 ISA 所需的组件,末了将这些组件与与掌握单元组合起来进行管理。
通过仿真和测试来创造缺点并进行修复。

构建对话

对话线程:鉴于 ChatGPT 4 与其他 LLM 一样具有固定大小的高下文窗口,我们假设提示模型的最佳方法是将较大的设计分解为子任务,每个子任务都有自己的“对话线程”界面。
这使总长度保持在 16,000 个字符以下。
当长度超过此值时,专有的后端方法会实行某种文本缩减,但实在现的细节很少。

由于 ChatGPT 4 在不同的线程中无法共享信息,人类工程师会将干系信息从前一个线程复制到新的第一条中,从而形成一个“根本规范”,逐步地定义处理器。
根本规范终极包括 ISA、寄存器列表(累加器 ACC、程序计数器 PC、指令寄存器 IR)、存储器、算术逻辑单元(ALU)和掌握单元的定义,以及处理器在每个周期中应实行的高等概述。
该规范中的大部分信息由 ChatGPT 4 天生,并由人工复制/粘贴和轻微编辑。

主题:每个线程一个主题对付处理器的早期设计阶段效果很好(有一个例外,个中 ALU 是在与多周期处理器时钟周期时序操持相同的线程中设计的)。
然而,一旦处理器进入仿真阶段并在其上运行程序,我们就创造了规范和实现中的缺点和毛病。

设计工程师选择在适当的情形下连续以前的对话线索,而不是开始新的对话线索和重修高下文。
下面的流程图中展示了这一点,个中的“Cont. T. ID”列指示是否“Continued”了以前的线索(如果是,则指示是哪个线索)。

重新开始:有时 ChatGPT-4 会输出次优的回答。
如果是这样,工程师有两个选择:(1) 连续对话并勾引它改动回答,或者 (2) 利用界面逼迫 ChatGPT 4“重新开始”回答,即假装前面的回答从未发生过,重新天生结果。
在这两种选择之间须要进行权衡,并须要专业判断:连续对话可以让用户指定前面回答的哪些部分是好的或不好的,但重新天生将使全体对话更短更简洁(考虑到有限的高下文窗口大小,这是有代价的)。

然而,从结果表中的“# Restart”列可以看出,随着我在利用 ChatGPT 4 方面的履历增加,重新开始的次数每每会减少。
话题 00-07 有 57 次重新开始,而话题 08-18 仅有 8 次重新开始。
在单个中重新开始的最高次数是 10 次,涌如今话题 04(掌握旗子暗记方案)中,该话题有以下:

This looks excellent. According to this list, please produce the module definition for a control unit in Verilog which could operate the processor datapath. Please comment the purpose of each I/O. If a signal is for controlling a multiplexer, please also comment what each possible value should correspond to in the datapath.

这是一个困难的提示,由于它哀求供应具有大量细节的特定类型的输出,但终极产生了令人满意的答案,如下所示:

开拓的指令集架构(ISA)

下表列出了在对话 00 中与 ChatGPT-4 共同天生的 ISA(并在 10 中更新):

这是一种相对大略的基于累加器的设计,具有一些显著的特色:

考虑到大小限定,内存访问“带有可变数据操作数的指令”仅利用 5 位来指定内存地址,这意味着处理器将被限定为绝对最大 32 字节内存。
只有一条具有立即数据编码的指令。
这些指令利用完全的 256 种可能的字节编码。
JSR指令使得实现子例程调用成为可能,只管有点笨拙(没有堆栈指针)。
分支指令有限定但很有用。
向后跳过两条指令可以实现高效轮询(例如加载输入,屏蔽干系位,然后检讨是否为 0)。
向前跳过 3 条指令可以跳过 JMP 或 JSR 所需的指令。
这些是经由多次迭代设计的,包括后来的修正(对话 10-12,“分支更新”),它将向前跳转从 2 条指令增加到 3 条,在仿照过程中我意识到我们无法轻松地在中编码 JMP/JSR只需 2 条解释。
LDAR 指令许可对内存加载进行类似指针的取消引用。
这使我们能够有效地利用内存映命中的常量表(在对话 17 中添加)将二进制值转换为 7 段显示器的 LED 模式。

当考试测验在个中编写程序时,觉得就像是用于 PIC 微掌握器系列的程序的变体。
ChatGPT-4 实际上也为我编写了汇编程序,我可以做得更好(它确实用起来很糟糕,但它确实有效 - 请参阅对话 09)。

我将该处理器的实现称为 QTCore-A1。

这是终极产生的数据路径(掌握旗子暗记用虚线表示 - 利用摩尔型多周期 FSM 来掌握它们)。
在设计处理器时,我确保每个寄存器也通过扫描链连接(也是由 ChatGPT-4 设计的!
)。
这意味着我可以在实现后对设计进行编程,这也是我在仿照期间加载测试程序的办法。

我考试测验利用 OpenLane 进行合成,但糟糕的是——该设计不适宜 1000 个标准单元!
最大略的事情便是不断调度内存,我一遍又一各处这样做,直到我终极达到了神奇的数字,并设法得到了仅 17 字节的数据和指令内存组合。
哎呀!

经由 OpenLane 综合后,GDS 如下所示:

我编写了一些测试程序,很快意识到我须要一些重复涌现的常量值。
玩了之后我还创造,内存映命中的常量值并没有寄存器占用那么多空间!
因此,我设法将一些常量赞助值(包括“1”和“0”)放入内存映命中。

这意味着我可以用该死的汇编措辞为我下载到 FPGA (CMod-A7) 的处理器编写这个小程序 - 只管我还必须实现一个编程器,我利用的是 STM32!
(不要介意这个视频是在椅子上拍摄的,我实际上是在参加演讲时在会议剧院中制作的 - Tiny Tapeout 的截止日期很快就到了)。

它事情了!

以是,我很高兴,它在仿照和 FPGA 上都能事情,以是我很高兴地将它发送到 Tiny Tapeout,然后我们将我们的论文发布到 arXiv 并将我们的设计作为开源 。

参加 Efabless 竞赛和 QTcore-C1

我们收到了很多关于提交的反馈。
Tiny Tapeout 的 Matt Venn 实际上在他的网络研讨会上采访了我和 Jason 两个人。

该项目于 2023 年 6 月 2 日上线,受到了很多关注!
EDA 领域的许多不同公司也与我们联系,个中包括一些您肯定听说过的公司。

不过,最有趣的事情之一是我终极与 Efabless(一个面向“智能”产品的开放式创新、硬件创建平台)的事情职员通了电话,他们见告我,他们一贯在操持一项人工智能天生的开源芯片设计寻衅赛,而且考虑到我们刚刚完成了这样的壮举,大概我们该当考虑参加比赛。

唯一的问题是,他们是在短韶光内举办比赛的,而我们只有几周的韶光来准备——在这几周里,我实际上在外洋参加了一系列会议!

终极,我还是决定参加,并做出一些妥协。
他们的比赛基于 Efabless Caravel ChipIgnite 平台,该平台将 RISC-V 核心与用户项目区域配对,这样你就可以设计一个带有 Wishbone 连接的硬件模块,并将其放置在核心阁下。
这张图片取自 Efabless 网站,最能解释这一点:

空间还有很多,但韶光很短。
我将遵照我之条件出的方法,从 QTcore-A1 开始,修正微掌握器,以便它能够占用 Efabless Caravel 平台中更大的可用区域(仅利用一个可用空间的一部分)。

此时又碰着了一些问题:

只管这是基于 OpenLane 的,就像 Tiny Tapeout 一样,但它是一个更加繁芜的过程,并且没有一个大略易懂的 GitHub 操作指南来做参考。
我必须在我的条记本电脑上安装很多东西!
仿照须要比 Tiny Tapeout 更加稳健,并且考虑到你的设计须要与 Caravel 核心一起进行验证,因此须要更长的韶光。
纵然是我最基本的仿真仍旧须要超过 45 分钟,而 Tiny Tapeout 只须要约 10 秒。
这是一场竞赛,参赛作品的评判标准是它们的文档质量、可用性、对开源项目的贡献等。
以是我还必须确保这方面的统统都很好!

我决定让 ChatGPT-4 对 QTCore-A1 进行以下变动。

首先,内存大小将升级为 256 字节共享指令/数据内存,分为 16 字节页面。
其次,我会添加一些外设——一个 16 位定时器、一些 I/O 端口,并且考虑到我的日常事情是硬件安全研究员,我还决定添加 2 个八位“内存实行保护”掌握寄存器为 16 个页面中的每个页面供应“实行”位,并更新原始的、不受欢迎的分支逻辑。

新的指令集架构

和以前一样,所有内容都是开源供应的,但这次是在 QTcore-C1 GitHub 存储库(https://github.com/kiwih/qtcore-C1)的文件夹下 AI_generation_information/chats。
每个谈天都扩展了原始 QTCore-A1 的对话。

当我提出设计变更时,ChatGPT 终极选择了这种 ISA。

具有可变数据操作数的指令

即时数据操作指令

掌握/状态寄存器操作指令

固定掌握和分支指令

变量操作数分支指令

数据操作指令

数据路径

实则里面有很多变革!
不雅观察现在有一个段寄存器,它与部分指令连接在一起,用于解码具有可变数据操作数的指令的地址。

以下是完全的详细信息:

掌握单元:用于驱动处理器的 2 周期 FSM(3 位 one-hot 编码状态寄存器)程序计数器:8位寄存器,包含程序确当前地址段寄存器:4位寄存器,包含用于数据存储器指令确当前段指令寄存器:8位寄存器,包含当前要实行的指令累加器:8位寄存器,用于数据存储、操作和逻辑存储体:256 个 8 位寄存器,用于存储指令和数据。
掌握和状态寄存器:8 个 8 位寄存器,用于分外功能,包括定时器、I/O、内存保护、发送中断以及吸收和发送旗子暗记给更大的 Caravel 处理器。
掌握/状态寄存器 (CSR) 及其地址SEGEXE_L (000):8 位——表示指定为可实行文件的内存段的低半部分。
寄存器中的每个位对应内存空间低半部分的一个段。
如果某个位设置为 1,则相应的段被标记为可实行。
SEGEXE_H (001):8 位 - 表示指定为可实行文件的内存段的高半部分。
寄存器中的每一位对应内存空间上半部分的一个段。
如果某个位设置为 1,则相应的段被标记为可实行。
IO_IN (010):8 位 - UART(或任何通用 I/O 设备)操作的输入寄存器。
这用于从外部设备读取数据。
IO_OUT (011):8 位 - UART(或任何通用 I/O 设备)操作的输出寄存器。
这用于将数据写入外部设备。
CNT_L (100):8 位 - 16 位计数器寄存器的低 8 位。
这可用于存储计数值的下半部分,可用于计时操作或编程中的循环等。
CNT_H (101):8 位 - 16 位计数器寄存器的高 8 位。
这可用于存储计数值的上半部分,类似于 CNT_L 寄存器。
STATUS_CTRL (110):8 位 - 用于保存 CPU 中不同操作状态的掌握寄存器。
这些位是:{SIG_OUT[7:2], CNT_EN[1], IRQ_OUT[0]}。
SIG_OUT 位用于向较大的 Caravel 处理器发送旗子暗记(6 位)。
CNT_EN 位用于使能计数器。
IRQ_OUT 位用于向较大的 Caravel 处理器发送中断。
SIG_IN (111):8 位 - 这里的 8 位可以来自更大的 Caravel 处理器。
这可用于向 CPU 发送旗子暗记,例如作业开始、作业结束等。

利用汇编程序的示例编程

GPT-4 天生的汇编器简化了为 QTCore-C1 编写汇编程序的过程。

向汇编器供应程序:程序以以下格式呈现[address]: [mnemonic] [optional operand]有一个分外的元指令称为 DATA,它后面随着一个数字。
如果利用的话,只需将该号码放在该地址即可。
程序不能超过内存的大小(在QTCore-C1中,这是256字节)。
存储器包含指令和数据。

示例程序:

在此程序中,不雅观察我们如何通过 SETSEG 读写 I/O、定时器和数据存储器。
我们还通过 CSW 将内存段设置为可实行,然后跳转到不可实行的段以使处理器崩溃。

对此感兴趣的小伙伴可以在 QTcore-C1 GitHub 上查看所有有趣的细节:https://github.com/kiwih/qtcore-C1。

吸收芯片吧!

我们参加了比赛(终极在截止日期前 2 小时完成了提交),然后 QTcore-C1 得胜了!
这意味着芯片将被流片出来。

就在两周前,我收到了一个包裹……

它已经到了!
(准确地说,我在这些小载板上收到了十个芯片,还有五十个芯片须要我自己焊接!

基本测试和圣诞节 LED 显示屏!

很难描述在我面前有一块我参与设计的芯片是多么令人惊奇,特殊是由于我以前从未真正设计过任何流片。
如果没有像 ChatGPT 这样的 LLM 来勉励我去考试测验,我大概也不会这么做。

我又做了一些实验,创造芯片可能存在一些问题,包括在运行 HALT 命令后无法重新启动的问题。

终极,我创建了一个大略的计数器程序,个中包含了与 Caravel 处理器握手,类似于之前的 LED 闪烁程序,然后节日的圣诞树盛宴便开始了:

下一步是什么?

自 2020 年以来,我一贯在研究 LLM 在硬件领域的运用,我坚信它可以简化、加速硬件开拓,特殊是与 OpenLane 和 Caravel 等科技公司供应的开源设计流程结合利用时。

我也不认为我是唯一持有这种不雅观点的人。
近几个月来,芯片公司 Rapid Silicon 宣告了 RapidGPT、英伟达推出了 ChipNeMo、Cadence 宣告了 JedAI,Synopsys.AI 也已推出。
所有这些都是现实天下的商业企业,旨在将 LLM 带入硬件领域。

期待未来 LLM 在硬件领域大放异彩!

标签:

相关文章

数字孪生三峡模拟仿真引擎培植_数据_库容

项目事情任务:多源时空数据处理。对三峡工程坝区、工程库区以及工程下贱影响区多源时空数据进行接入、转换、处理、领悟并发布成通用做事供...

科学 2025-01-15 阅读0 评论0