<noscript id="jwsho"><legend id="jwsho"></legend></noscript>
<ins id="jwsho"><video id="jwsho"><var id="jwsho"></var></video></ins><tr id="jwsho"></tr><output id="jwsho"></output>
  • <menuitem id="jwsho"></menuitem>

      <menuitem id="jwsho"></menuitem>

      1. 展會信息港展會大全

        ChatGPT 設計了一款芯片
        來源:互聯網   發布日期:2024-01-02 10:41:06   瀏覽:27744次  

        導讀:ChatGPT 可以幫助軟件工程師解決編碼的煩惱,那是否可以幫助硬件工程師設計出芯片呢?來自澳大利亞悉尼南威爾士大學的教授進行了一次嘗試。 聲明:本文為 CSDN 翻譯,未經允許禁止轉載。 翻譯 | ChatGPT 責編 | 蘇宓 出品 | CSDN(ID:CSDNnews) 我在 2023...

        ChatGPT 可以幫助軟件工程師解決編碼的煩惱,那是否可以幫助硬件工程師設計出芯片呢?來自澳大利亞悉尼南威爾士大學的教授進行了一次嘗試。

        聲明:本文為 CSDN 翻譯,未經允許禁止轉載。

        翻譯 | ChatGPT

        責編 | 蘇宓

        出品 | CSDN(ID:CSDNnews)

        我在 2023 年初使用 ChatGPT 構建了一個微控制器芯片,并已流片,F在它甚至可以控制我的圣誕樹了。在我看來,這是第一次有人使用 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 程序,還能真正設計出一款芯片?

        ChatGPT 設計了一款芯片

        我與我的導師及其他幾位博士生在一起進行了交談,并集思廣益了一些想法。

        在這個過程中,我們發現 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 時而犯蠢也早已習慣,它有時會陷入循環,認為自己正在解決問題或改進輸出,而實際上它們只是在對相同的數據進行迭代。因此我們推測有時我們可能需要提供“人類援助”。

        通過一些初步實驗,我們確定了一個初始的流程:

        ChatGPT 設計了一款芯片

        理想情況下,人類不需要提供太多輸入,但這還有待觀察……

        在硬件制造方面,我們的目標是 Tiny Tapeout 3,將基于 Skywater 130nm。不過,它也還有一些限制:前面提到的 1000 個標準單元,以及只有 8 位輸入(包括任何時鐘或復位)和 8 位輸出。Tiny Tapeout 使用 OpenLane,這意味著我們也僅限于可綜合的 Verilog-2001。

        設計什么?

        在這個實驗的早期階段,我們對與對話式 LLM 交互的標準化和(理想情況下)自動化流程的潛力感興趣,該流程將從規范開始,最終產生該設計的硬件描述語言。鑒于我們只有 8 位輸入,我們決定使用其中 3 位來控制設計選擇多路復用器,以適應 8 個小型基準測試。如果這些進展順利,我們就會致力于下一步,構建更具雄心的事情。

        以下是我們提出的基準測試:

        ChatGPT 設計了一款芯片

        每個基準測試都有一個簡短的規范來描述它及其 I/O,以及正確的預期行為。

        紐約大學博士生 Jason Blocklove 與選擇的四個 LLM(ChatGPT-3.5、ChatGPT-4、Bard 和 HuggingChat)共同進行了交互,引導 LLM 生成設計和測試平臺,然后進行模擬,并反饋存在的所有錯誤。

        有時,在與 LLM 對話中也需要考慮特殊情況,由于模型在單次響應中可以給出的輸出量受到限制,文件或解釋通常會被中斷;在這些情況下,模型將跳出一個“請繼續”(continue)按鈕。按下之后,所輸出的代碼通常是從前一個消息的最后一行開始的,因此在將代碼復制到文件中進行編譯和模擬時,需要進行適當的編輯把兩次生成的代碼合并到一起。

        然而,這個過程沒有添加額外的硬件描述語言(HDL)。同樣,有時響應中會包含讓用戶添加自己的代碼的注釋。如果這些注釋會影響功能,例如留下不完整的數值數組,那么響應將被重新生成,否則將保持原樣。

        設計提示:

        這里的設計提示看起來像這樣:

        返回的設計質量參差不齊,我們發現只有 ChatGPT-4 可以可靠地生成設計。以下是每個 LLM 的第一個設計(移位寄存器)的示例:

        ChatGPT-4

        ChatGPT 設計了一款芯片

        有用!

        ChatGPT-3.5

        ChatGPT 設計了一款芯片

        有用!

        Bard

        ChatGPT 設計了一款芯片

        報錯了!

        HuggingChat

        moduleShiftRegister(inputclk,inputrst_n,inputdata_in,inputshft_en,outputreg[

        7:

        0]

        q);

        //clockcycleof

        22ns

        parameterCLK_CYCLE=

        50;

        parameterADDR=

        32

        'h0000641A;//defaultaddressfortheCY7B974EEPROM/flashcontrolunit

        parameterDATAW=32'b111100001000000100000000000000

        0;

        //setdefaultvalueofallregistersfromdatasheetpageB-

        21

        parameterSP=

        32

        'h015F;

        parameterPE=16'd1;

        //always

        forVddleveldetection.Setaccordingtosection

        "VIOPowerSupplyVoltageMonitoring"indatasheetp.

        13

        parameterUDEN=

        32

        'hFFFE;//unuseddevicedisableregister

        parameterVIDEN=32'hFCED;

        //VIN/ANpinaccessdisabled

        parameterADCDPF=

        32

        'hFF7A;//alternativedigitalpowersupplyvoltagemonitorconfig(ADP_SAR)

        parameter_90FSYSCLKS="Disabled";//unused1byteregisteratoffset0x90fromFSMC_NORSRAMTimingControlRegister.Readaszeroifnotused

        parameterTRASETNEGL=32'hFFFFFFFFFFFF;

        assigndata_out=~data_in&shft_en&rst_n?

        1

        'b0:(q[7:1]<<1)|{1'b

        0,data_in};

        always@(*)begin

        #/*x'FF*/CLK_RQSTDCLK*;

        #/reset_nR0R0[(int*)&(_CTL--)]<=32'h8000_0000;

        if(rst_n&&!shft_en)begin

        $setuphold(posedgereset_n,negedgeactive);

        $display(

        "***RESET***\n");

        `#addr`addr:

        `addr[(int*)&POS]`

        pos?(

        int)(((

        `addr`:addr[_ADDR]+$_INTRTVALU)/

        2):

        1

        'b1;`addr:(addr<>`addr)`pos,"Fullscandone."));`cout!="Divisionbyzero!"&'@(!_LUT)&&(

        `grandpa')?(sprintf(`snip

        `,strlen(&_TI),($half*`cout>&

        1)

        'hash()):snprintf(!reserve2((constchar*)(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_tRF)(addr<=&)>//Multipleerrors\n');}}}}end

        else

        if(!active_high&&active)^beginhighend}begin

        posbpoz,euEuropozizew;PosfileNewHdrPosWrf

        `ezed=`PosMaxRow=?[issued&tested]

        `specifbypa=end>

        else

        if(!endswith

        "\\")

        ormyword

        `title==addr){droplocalvarhNextCutJob)~sym\_nameeof.~stop$;genwsyncestringsTryEnd[]sizewriter(1)}if!=size((`dynSym-NMcompilersUDOVARSYMBOL))*~(uint2baseNUMSERVER+

        "compiled")){clip

        0clrw$addelem}\n\resources}subbyteswrdfmtremovecommentsTr1ESrandiffgred$\elleoformatfloat

        format----------------------

        `charTmpLim}LenrolloverLenglenLenNonRollovrOptimizationCenter}\nresidentAsymptoticAspect}\npResetOpt\All%parID==PCI0SPCReconfigurationFeaturesupported}IFPROPRIETARYASPECT=`port!\Plug

        它似乎已經瘋了!

        測試臺

        ChatGPT 已經初步地給出了設計,接下來,我們要求它創立一個 Verilog 測試臺:

        Canyou

        createaVerilogtestbench

        forthisdesign?Itshouldbe

        self-checking

        andmade

        to

        work

        withiverilog

        forsimulation

        andvalidation.

        If

        testcasesshouldfail,thetestbenchshouldprovideenoughinformationthatthe

        errorcanbe

        found

        andresolved.

        總之最后 ChatGPT 確實給出了一個測試臺代碼,而且沒有錯誤!

        基本結果

        總體而言,只有 ChatGPT-3.5 和 4 可以可靠地生成設計,因此我們最終只分析了這兩個模型,并將 Bard 和 HuggingChat 從我們的結果中剔除。使用兩個 OpenAI 模型,我們完成了全套基準測試 3 次,得到了以下結果:

        命名法:

        如果沒有報告錯誤,則設計通過,無需反饋 (NFN)。相反,如果這些操作中的任何一個報告錯誤,它們就會反饋到模型中,并要求“請提供修復。”,稱為工具反饋 (TF)。

        如果相同的錯誤或類型的錯誤出現三次,則用戶會給出簡單的人工反饋(SHF),通常是通過說明 Verilog 中的哪種類型的問題會導致此錯誤(例如聲明信號時的語法錯誤)。

        如果錯誤繼續存在,則提供中等人類反饋 (MHF),并向工具提供稍微更有針對性的信息以識別特定錯誤,如果錯誤仍然存在,則提供高級人類反饋 (AHF),該反饋依賴于準確指出位置錯誤是什么以及修復它的方法。

        一旦設計經過編譯和仿真且沒有失敗的測試用例,就被認為是成功的。然而,如果高級反饋無法修復錯誤,或者用戶需要編寫任何 Verilog 來解決錯誤,則測試將被視為失敗。如果對話超過 25 條消息(符合 OpenAI 每 3 小時 ChatGPT-4 消息的速率限制),則測試也被視為失敗。

        ChatGPT 設計了一款芯片

        所有聊天日志詳見: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 設計但未經過測試?傮w而言,設計使用了 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 在不同的線程中無法共享信息,人類工程師會將相關信息從前一個線程復制到新的第一條消息中,從而形成一個“基礎規范”,慢慢地定義處理器;A規范最終包括 ISA、寄存器列表(累加器 ACC、程序計數器 PC、指令寄存器 IR)、存儲器、算術邏輯單元(ALU)和控制單元的定義,以及處理器在每個周期中應執行的高級概述。該規范中的大部分信息由 ChatGPT 4 生成,并由人工復制/粘貼和輕微編輯。

        主題:每個線程一個主題對于處理器的早期設計階段效果很好(有一個例外,其中 ALU 是在與多周期處理器時鐘周期時序計劃相同的線程中設計的)。然而,一旦處理器進入仿真階段并在其上運行程序,我們就發現了規范和實現中的錯誤和缺陷。

        設計工程師選擇在適當的情況下繼續以前的對話線索,而不是開始新的對話線索和重建上下文。下面的流程圖中展示了這一點,其中的“Cont. T. ID”列指示是否“Continued”了以前的線索(如果是,則指示是哪個線索)。

        ChatGPT 設計了一款芯片

        重新開始:有時 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.

        這是一個困難的提示,因為它要求提供具有大量細節的特定類型的輸出,但最終產生了令人滿意的答案,如下所示:

        ChatGPT 設計了一款芯片

        Bug 修復:遇到錯誤后,我們會使用ChatGPT-4來修復它們。這里給出了一個例子。這是基于對話 15,并演示了如何解決移位寄存器原語中的錯誤。

        開發的指令集架構(ISA)

        下表列出了在對話 00 中與 ChatGPT-4 共同生成的 ISA(并在 10 中更新):

        ChatGPT 設計了一款芯片

        這是一種相對簡單的基于累加器的設計,具有一些顯著的特征:

        考慮到大小限制,內存訪問“帶有可變數據操作數的指令”僅使用 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 設計的。。這意味著我可以在實現后對設計進行編程,這也是我在模擬期間加載測試程序的方式。

        ChatGPT 設計了一款芯片

        我嘗試使用 OpenLane 進行合成,但糟糕的是該設計不適合 1000 個標準單元!最簡單的事情就是不斷調整內存,我一遍又一遍地這樣做,直到我最終達到了神奇的數字,并設法獲得了僅 17 字節的數據和指令內存組合。哎呀!

        經過 OpenLane 綜合后,GDS 如下所示:

        ChatGPT 設計了一款芯片

        我編寫了一些測試程序,很快意識到我需要一些重復出現的常量值。玩了之后我還發現,內存映射中的常量值并沒有寄存器占用那么多空間!因此,我設法將一些常量輔助值(包括“1”和“0”)放入內存映射中。

        這意味著我可以用該死的匯編語言為我下載到 FPGA (CMod-A7) 的處理器編寫這個小程序 - 盡管我還必須實現一個編程器,我使用的是 STM32。ú灰橐膺@個視頻是在椅子上拍攝的,我實際上是在參加演講時在會議劇院中制作的 - Tiny Tapeout 的截止日期很快就到了)。

        ChatGPT 設計了一款芯片

        它工作了!

        所以,我很高興,它在模擬和 FPGA 上都能工作,所以我很高興地將它發送到 Tiny Tapeout,然后我們將我們的論文發布到 arXiv 并將我們的設計作為開源 。

        參加 Efabless競賽和 QTcore-C1

        我們收到了很多關于提交的反潰Tiny Tapeout 的 Matt Venn 實際上在他的網絡研討會上采訪了我和 Jason 兩個人。

        該項目于 2023 年 6 月 2 日上線,受到了很多關注!EDA 領域的許多不同公司也與我們聯系,其中包括一些您肯定聽說過的公司。

        不過,最有趣的事情之一是我最終與Efabless(一個面向“智能”產品的開放式創新、硬件創建平臺)的工作人員通了電話,他們告訴我,他們一直在計劃一項人工智能生成的開源芯片設計挑戰賽,而且考慮到我們剛剛完成了這樣的壯舉,也許我們應該考慮參加比賽。

        唯一的問題是,他們是在短時間內舉辦比賽的,而我們只有幾周的時間來準備在這幾周里,我實際上在海外參加了一系列會議!

        最終,我還是決定參加,并做出一些妥協。他們的比賽基于 Efabless Caravel ChipIgnite 平臺,該平臺將 RISC-V 核心與用戶項目區域配對,這樣你就可以設計一個帶有 Wishbone 連接的硬件模塊,并將其放置在核心旁邊。這張圖片取自 Efabless 網站,最能說明這一點:

        ChatGPT 設計了一款芯片

        空間還有很多,但時間很短。我將遵循我之前提出的方法,從 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。

        具有可變數據操作數的指令

        ChatGPT 設計了一款芯片

        即時數據操作指令

        ChatGPT 設計了一款芯片

        控制/狀態寄存器操作指令

        ChatGPT 設計了一款芯片

        固定控制和分支指令

        ChatGPT 設計了一款芯片

        變量操作數分支指令

        數據操作指令

        ChatGPT 設計了一款芯片

        數據路徑

        ChatGPT 設計了一款芯片

        實則里面有很多變化!觀察現在有一個段寄存器,它與部分指令連接在一起,用于解碼具有可變數據操作數的指令的地址。

        以下是完整的詳細信息:

        控制單元:用于驅動處理器的 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,它后面跟著一個數字。如果使用的話,只需將該號碼放在該地址即可。

        程序不能超過內存的大。ㄔ赒TCore-C1中,這是256字節)。

        存儲器包含指令和數據。

        示例程序:

        在此程序中,觀察我們如何通過 SETSEG 讀寫 I/O、定時器和數據存儲器。我們還通過 CSW 將內存段設置為可執行,然后跳轉到不可執行的段以使處理器崩潰。

        對此感興趣的小伙伴可以在 QTcore-C1 GitHub 上查看所有有趣的細節:https://github.com/kiwih/qtcore-C1。

        接收芯片吧!

        我們參加了比賽(最終在截止日期前 2 小時完成了提交),然后 QTcore-C1 獲勝了!這意味著芯片將被流片出來。

        ChatGPT 設計了一款芯片

        就在兩周前,我收到了一個包裹……

        ChatGPT 設計了一款芯片

        它已經到了。蚀_地說,我在這些小載板上收到了十個芯片,還有五十個芯片需要我自己焊接。

        基本測試和圣誕節 LED 顯示屏!

        很難描述在我面前有一塊我參與設計的芯片是多么令人驚奇,特別是因為我以前從未真正設計過任何流片。如果沒有像 ChatGPT 這樣的 LLM 來激勵我去嘗試,我也許也不會這么做。

        我又做了一些實驗,發現芯片可能存在一些問題,包括在運行 HALT 命令后無法重新啟動的問題。

        最終,我創建了一個簡單的計數器程序,其中包含了與 Caravel 處理器握手,類似于之前的 LED 閃爍程序,然后節日的圣誕樹盛宴便開始了:

        下一步是什么?

        自 2020 年以來,我一直在研究LLM 在硬件領域的應用,我堅信它可以簡化、加速硬件開發,特別是與OpenLane 和 Caravel 等科技公司提供的開源設計流程結合使用時。

        我也不認為我是唯一持有這種觀點的人。近幾個月來,芯片公司 Rapid Silicon 宣布了 RapidGPT、英偉達推出了 ChipNeMo、Cadence 宣布了 JedAI,Synopsys.AI 也已推出。所有這些都是現實世界的商業企業,旨在將 LLM 帶入硬件領域。

        期待未來 LLM 在硬件領域大放異彩!

        贊助本站

        人工智能實驗室

        相關熱詞: ChatGPT 設計 一款 芯片

        相關內容
        AiLab云推薦
        展開

        熱門欄目HotCates

        Copyright © 2010-2024 AiLab Team. 人工智能實驗室 版權所有    關于我們 | 聯系我們 | 廣告服務 | 公司動態 | 免責聲明 | 隱私條款 | 工作機會 | 展會港
        aiai视频,aiai永久网站在线观看,AiGAO视频资源在线
        <noscript id="jwsho"><legend id="jwsho"></legend></noscript>
        <ins id="jwsho"><video id="jwsho"><var id="jwsho"></var></video></ins><tr id="jwsho"></tr><output id="jwsho"></output>
      2. <menuitem id="jwsho"></menuitem>

          <menuitem id="jwsho"></menuitem>