RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是數(shù)字邏輯設(shè)計(jì)

FPGA研究院 ? 來(lái)源:FPGA研究院 ? 作者:FPGA研究院 ? 2022-11-01 09:25 ? 次閱讀

我在數(shù)字邏輯設(shè)計(jì)方面并沒(méi)有經(jīng)驗(yàn)。也就是說(shuō),直到最近我才決定嘗試設(shè)計(jì)自己的 CPU,并在 FPGA 上運(yùn)行!如果你也是一名軟件工程師,并對(duì)硬件設(shè)計(jì)有興趣,那么我希望這一系列關(guān)于我所學(xué)到的知識(shí)的文章能夠?qū)δ阌兴鶐椭?,并讓你感到有趣。本系列文章的第一部分中,將回答以下?wèn)題:

什么是數(shù)字邏輯設(shè)計(jì)?

如何開(kāi)始,我應(yīng)該使用什么工具?

我將在以后的系列文章中詳細(xì)討論我的 CPU 設(shè)計(jì)和 RISC-V 架構(gòu),并將回答以下問(wèn)題:

數(shù)字邏輯設(shè)計(jì)與軟件設(shè)計(jì)有什么本質(zhì)區(qū)別?

數(shù)字邏輯設(shè)計(jì)和軟件設(shè)計(jì)有什么相似之處?

你可以在這里(https://github.com/lochsh/riscy-boi/tree/47e94dc6e9665f73c871add002c34d1516fd5106)看到我寫(xiě)這篇文章時(shí)的 CPU 的代碼,或者在這里(https://github.com/lochsh/riscy-boi)查看最新的版本。

什么是數(shù)字邏輯設(shè)計(jì)?

數(shù)字邏輯設(shè)計(jì)就是設(shè)計(jì)一個(gè)邏輯電路,對(duì)二進(jìn)制數(shù)值進(jìn)行運(yùn)算?;驹沁壿嬮T(mén):例如,與門(mén)一樣,有兩個(gè)輸入和一個(gè)輸出。它的輸出為 1 或 iff,兩個(gè)輸入均為 1。

我們所設(shè)計(jì)的同步電路,一般都是利用觸發(fā)器來(lái)儲(chǔ)存狀態(tài),使電路運(yùn)行與共時(shí)鐘同步。觸發(fā)器由邏輯門(mén)組成。

模擬電路設(shè)計(jì)包括構(gòu)成邏輯門(mén)的電子元件,例如晶體管二極管。這種抽象通常是用于直接處理來(lái)自模擬傳感器信號(hào)的應(yīng)用,例如無(wú)線電接收器。在設(shè)計(jì) CPU 時(shí),這種抽象水平是行不通的:現(xiàn)代的 CPU 有幾十億個(gè)晶體管!

相反,我們使用的工具可以將數(shù)字邏輯設(shè)計(jì)轉(zhuǎn)化為不同的有用格式:FPGA 的配置(見(jiàn)下文);模擬;晶片布局。

FPGA 是什么,為什么要用 FPGA?

上文中我們指出,不管我們是創(chuàng)建自定義 ASIC 芯片還是配置 FPGA,都可以使用相同的數(shù)字邏輯設(shè)計(jì)工具。現(xiàn)場(chǎng)可編程門(mén)陣列(Field-Programmable Gate Array,F(xiàn)PGA)是一種集成集成電路,其中包含了可編程邏輯塊陣列。你可以把它想象成一個(gè)大型的邏輯門(mén)陣列,可以通過(guò)多種方式連接起來(lái)。

定制一款芯片動(dòng)輒需要幾百萬(wàn)美元,當(dāng)然,一旦芯片被生產(chǎn)出來(lái),就無(wú)法對(duì)它進(jìn)行更改。所以 FPGA 通常用于下列情況:

由于缺乏資金,無(wú)法負(fù)擔(dān)制作定制 ASIC 的費(fèi)用(例如,如果你只是像我這樣的黑客,而不是 ARM英特爾)。

無(wú)法負(fù)擔(dān)制作定制 ASIC 的費(fèi)用,因?yàn)楫a(chǎn)量太低,不值得一次性支付高昂的費(fèi)用 (例如,如果你正在使用定制的數(shù)據(jù)采集硬件生產(chǎn)少量的 MRI 機(jī)器)。

需要靈活性。

缺點(diǎn)是什么?那就是 FPGA 的單芯片成本要高得多,并且由于它能夠以非常靈活的方式將邏輯塊連接在一起,因此速度通常要慢得多。與此相反,定制的設(shè)計(jì)可以減少晶體管的數(shù)量,而無(wú)需考慮靈活性。

在我看來(lái),比較 ASIC 的定制設(shè)計(jì)過(guò)程和 FPGA 的設(shè)計(jì)過(guò)程是很有幫助的:

邏輯設(shè)計(jì):就像做 FPGA 一樣,ASIC 的邏輯設(shè)計(jì)也是用硬件描述語(yǔ)言來(lái)完成的。

驗(yàn)證:FPGA 設(shè)計(jì)可能會(huì)被驗(yàn)證,但是可以期待 ASIC!設(shè)計(jì)的過(guò)程更嚴(yán)格了。畢竟,設(shè)計(jì)一旦制造出來(lái)就不能更改!驗(yàn)證通常包括設(shè)計(jì)部分的正式驗(yàn)證。

合成:這將創(chuàng)建一個(gè)網(wǎng)表,一個(gè)邏輯塊及其連接的列表。連接被稱為網(wǎng),而塊被稱為單元。對(duì)于 FPGA 和 ASIC 來(lái)說(shuō),單元是特定于廠商的。

布局布線(Placement and routing,P&R):對(duì)于 FPGA 來(lái)說(shuō),它涉及到將網(wǎng)表中描述的邏輯塊映射到 FPGA 中的實(shí)際塊。由此產(chǎn)生的二進(jìn)制通常稱為比特流。對(duì)于 ASIC 來(lái)說(shuō),這涉及到?jīng)Q定在晶片上何處放置單元,以及如何將它們連接起來(lái)。這兩種應(yīng)用通常都要使用自動(dòng)優(yōu)化工具。

我需要什么工具? 硬件描述語(yǔ)言:我使用的是 nMigen

你可能聽(tīng)說(shuō)過(guò) Verilog 或 VHDL:這兩種流行的硬件描述語(yǔ)言(hardware description language,HDL)。這里我所說(shuō)的“流行”,是指廣泛使用,而非廣受歡迎。

我不會(huì)假裝對(duì)這些工具很了解。我只知道那些比我更聰明的人,有著豐富的邏輯設(shè)計(jì)經(jīng)驗(yàn),卻對(duì)這些工具恨之入骨。由于 Verilog 和其他類似工具存在的問(wèn)題,人們嘗試著開(kāi)發(fā)出更有用、更友好的替代方法。nMigen(https://github.com/nmigen/nmigen )就是在 Python 中創(chuàng)建一 門(mén)領(lǐng)域?qū)S谜Z(yǔ)言的項(xiàng)目。用它自己的話就是:

雖然用 Verilog 和 VHDL 進(jìn)行硬件設(shè)計(jì)比輸入原理圖的速度要快,但是由于一些原因,硬件設(shè)計(jì)還是很枯燥,而且效率也不高。對(duì)目前邏輯設(shè)計(jì)中占有重要地位的同步電路而言,事件驅(qū)動(dòng)模型引入了不必要的問(wèn)題,并引入了人工編碼。逆直覺(jué)的算術(shù)規(guī)則導(dǎo)致了更陡峭的學(xué)習(xí)曲線,并為設(shè)計(jì)上的微小缺陷提供了溫床。最后,通過(guò)“generate”語(yǔ)句來(lái)支持邏輯過(guò)程生成(元編程)非常有限,并且限制了代碼的通用、重用和組織方式。

針對(duì)這些問(wèn)題,我們開(kāi)發(fā)了 nMigen FHDL,該庫(kù)取代了事件驅(qū)動(dòng)范例,它采用了組合語(yǔ)句和同步語(yǔ)句的概念,并采用了算術(shù)規(guī)則,使整型始終像數(shù)學(xué)整型一樣,最重要的是允許 Python 程序構(gòu)建所設(shè)計(jì)的邏輯。這一點(diǎn)使硬件設(shè)計(jì)人員能夠充分利用 Python 語(yǔ)言的豐富內(nèi)容:面向?qū)ο缶幊?、函?shù)參數(shù)、生成器、操作符重載、庫(kù)等,構(gòu)建組織良好、可重用的優(yōu)雅設(shè)計(jì)。

假如你和我一樣,從未使用過(guò) Verilog,那么這些對(duì)你來(lái)說(shuō)不僅僅是抽象的含義。但是聽(tīng)起來(lái)確實(shí)很有前景,而且我可以證明,在沒(méi)有 Verilog 障礙的情況下,從邏輯設(shè)計(jì)開(kāi)始就非常簡(jiǎn)單。如果你對(duì) Python 非常熟悉,我將推薦它!

我能想到的唯一缺點(diǎn)是,nMigen 仍然處于開(kāi)發(fā)階段,特別是文檔還不完整。但你可以通過(guò) chat.freenode.net 的 #nmigen 頻道找到有用的社區(qū)。

用于檢查模擬的波形顯示器:我使用的是 GTKWave

nMigen 提供了模擬工具。我將它用于用 pytest 編寫(xiě)的測(cè)試。為了幫助調(diào)試,我記錄了這些測(cè)試中的信號(hào),并在波形顯示器中觀察它們。

f8013d96-597b-11ed-a3b6-dac502259ad0.jpg

FPGA 開(kāi)發(fā)板:我使用的是 myStorm BlackIce II

你不必使用 FPGA 開(kāi)發(fā)板來(lái)創(chuàng)建自己的 CPU。在模擬中,你可以做任何事情。對(duì)于我來(lái)說(shuō),工作中使用板子的樂(lè)趣就是能閃爍 LED,看著自己的設(shè)計(jì)運(yùn)行。

當(dāng)然,如果你要?jiǎng)?chuàng)建的東西比我的最基本的 CPU 更有用,那么你可能需要一些硬件來(lái)運(yùn)行它,而這并非“可選”選項(xiàng)!

開(kāi)始使用 nMigen

在 nMigen 系統(tǒng)中,我并沒(méi)有立刻嘗試設(shè)計(jì)一個(gè) CPU,而是首先制作一個(gè)算術(shù)邏輯單元(Arithmetic Logic Unit ,ALU)。在我見(jiàn)過(guò)的所有 CPU 設(shè)計(jì)中, ALU 是一個(gè)關(guān)鍵部件:它執(zhí)行算術(shù)運(yùn)算。

為什么要從這里開(kāi)始呢?我知道我的 CPU 需要一個(gè) ALU;我知道我能做一個(gè)簡(jiǎn)單的 ALU;我知道當(dāng)開(kāi)始一個(gè)新的項(xiàng)目時(shí),做事情的感覺(jué)是一種重要的動(dòng)力!

我的設(shè)計(jì)看起來(lái)像這樣:

"""Arithmetic Logic Unit"""import enum

import nmigen as nm
class ALUOp(enum.IntEnum):

"""Operations for the ALU"""
 ADD = 0
 SUB = 1


class ALU(nm.Elaboratable):
"""
 Arithmetic Logic Unit

 * op (in): the opcode
 * a (in): the first operand
 * b (in): the second operand

 * o (out): the output
 """

def __init__(self, width):
"""
 Initialiser

 Args:
 width (int): data width
 """
 self.op = nm.Signal()
 self.a = nm.Signal(width)
 self.b = nm.Signal(width)
 self.o = nm.Signal(width)

def elaborate(self, _):
 m = nm.Module()

with m.Switch(self.op):
with m.Case(ALUOp.ADD):
 m.d.comb += self.o.eq(self.a + self.b)
with m.Case(ALUOp.SUB):
 m.d.comb += self.o.eq(self.a - self.b)
return m

正如你所看到的,我們已經(jīng)創(chuàng)建了大量的 nMigen Signal 實(shí)例,以很好地表示定義 ALU 接口的信號(hào)!但這個(gè)復(fù)雜的方法是什么呢?這個(gè) elaborate 方法又是什么呢?我的理解是,“elaboration”是合成網(wǎng)表的第一步的名稱(見(jiàn)上文)。在上面的 nMigen 代碼中,我們的想法是,已經(jīng)創(chuàng)建了一些可闡述的結(jié)構(gòu)(通過(guò)繼承 nm.Elaboratable),也就是用來(lái)描述想要合成的數(shù)字邏輯的東西。這個(gè) elaborate 方法描述了數(shù)字邏輯。它必須返回一個(gè) nMigen 模塊。

下面讓我們進(jìn)一步了解一下 elaborate 的方法的內(nèi)容。Switch 將創(chuàng)造某種形式的合成設(shè)計(jì)決策邏輯。但什么是 m.d.comb 呢?nMigen 提出了同步(m.d.sync)和組合(m.d.comb)控制域的概念。來(lái)自 nMigen 文檔(https://nmigen.info/nmigen/latest/lang.html#lang-domains ):

控制域是指在相同條件下改變其值的一組命名信號(hào)。

所有的設(shè)計(jì)都有一個(gè)預(yù)定義的組合域,其中包含所有的信號(hào),當(dāng)用來(lái)計(jì)算這些信號(hào)的任何值發(fā)生變化時(shí),這些信號(hào)也隨之發(fā)生變化。名稱 comb 是為組合域保留的。

一種設(shè)計(jì)還可以有任意數(shù)量的用戶定義的同步域,也稱為時(shí)鐘域,其中包含的信號(hào)在域的時(shí)鐘信號(hào)出現(xiàn)特定邊緣時(shí)會(huì)發(fā)生變化,或者,對(duì)于具有異步復(fù)位功能的域,域的復(fù)位信號(hào)會(huì)發(fā)生變化。大多數(shù)模塊只使用一個(gè)同步域。

在組合域和同步域中,信號(hào)的賦值的行為各不相同。總的來(lái)說(shuō),同步域中的信號(hào)包含了設(shè)計(jì)的狀態(tài),而組合域中的信號(hào)并不能形成反饋回路或維持狀態(tài)。

下面以移位寄存器為例,說(shuō)明要設(shè)計(jì)的邏輯。假定移位寄存器有 8 位,每個(gè)時(shí)鐘周期,該位值都會(huì)有一個(gè)移位(最左邊的值來(lái)自輸入信號(hào))。這必然是同步的:不能通過(guò)簡(jiǎn)單地將位連接在一起來(lái)創(chuàng)建這個(gè)功能,而在 nMigen 中,將位分配到組合域中將代表此功能。

我將在這個(gè)系列博客的下一部分詳細(xì)討論我的 CPU 設(shè)計(jì)?,F(xiàn)在的情況是,我試圖在每個(gè)周期中只停用一個(gè)指令,而不使用流水線——這很不尋常,但是我希望這樣做可以簡(jiǎn)化 CPU 的各個(gè)方面。其結(jié)果是,大多數(shù)邏輯是組合的,而非同步的,因?yàn)槲規(guī)缀鯖](méi)有在時(shí)鐘周期之間維持這種狀態(tài)?,F(xiàn)在,我的寄存器文件設(shè)計(jì)有問(wèn)題,為了解決這個(gè)問(wèn)題,我可能需要重新考慮我的“無(wú)流水線”想法。

編寫(xiě)測(cè)試

對(duì)于 Python 測(cè)試,我喜歡使用 pytest,當(dāng)然你也可以使用任何能吸引你的框架。以下是我在上面測(cè)試的 ALU 代碼:

"""ALU tests"""
import nmigen.sim
import pytest

from riscy_boi import alu

@pytest.mark.parametrize( 
"op, a, b, o", [ 
(alu.ALUOp.ADD, 1, 1, 2), 
(alu.ALUOp.ADD, 1, 2, 3), 
(alu.ALUOp.ADD, 2, 1, 3),
(alu.ALUOp.ADD, 258, 203, 461), 
(alu.ALUOp.ADD, 5, 0, 5), 
(alu.ALUOp.ADD, 0, 5, 5), 
(alu.ALUOp.ADD, 2**32 - 1, 1, 0), 
(alu.ALUOp.SUB, 1, 1, 0), 
(alu.ALUOp.SUB, 4942, 0, 4942), 
(alu.ALUOp.SUB, 1, 2, 2**32 - 1)])
def test_alu(comb_sim, op, a, b, o): 
alu_inst = alu.ALU(32)

def testbench():
yield alu_inst.op.eq(op)
yield alu_inst.a.eq(a)
yield alu_inst.b.eq(b)
yield nmigen.sim.Settle()
assert (yield alu_inst.o) == o

 comb_sim(alu_inst, testbench)

以及我的 conftest.py:

"""Test configuration"""
import os
import shutil

import nmigen.sim
import pytest

VCD_TOP_DIR = os.path.join(
 os.path.dirname(os.path.realpath(__file__)),
"tests",
"vcd")

def vcd_path(node):
 directory = os.path.join(VCD_TOP_DIR, node.fspath.basename.split(".")[0])
 os.makedirs(directory, exist_ok=True)
return os.path.join(directory, node.name + ".vcd")

@pytest.fixture(scope="session", autouse=True)
def clear_vcd_directory():
 shutil.rmtree(VCD_TOP_DIR, ignore_errors=True)

@pytest.fixture
def comb_sim(request):

def run(fragment, process):
 sim = nmigen.sim.Simulator(fragment)
 sim.add_process(process)
with sim.write_vcd(vcd_path(request.node)):
 sim.run_until(100e-6)

return run

@pytest.fixture
def sync_sim(request):

def run(fragment, process):
 sim = nmigen.sim.Simulator(fragment)
 sim.add_sync_process(process)
 sim.add_clock(1 / 10e6)
with sim.write_vcd(vcd_path(request.node)):
 sim.run()

return run

每次測(cè)試都會(huì)生成一個(gè) vcd 文件,我可以通過(guò) GTKWave 等波形顯示器來(lái)查看,以便調(diào)試。你會(huì)注意到,組合模擬固定運(yùn)行的時(shí)間段是任意小的,而同步模擬功能運(yùn)行的時(shí)間段是確定的時(shí)鐘周期數(shù)。

一個(gè)信號(hào)產(chǎn)生于一個(gè)測(cè)試函數(shù),它將從模擬器請(qǐng)求它的當(dāng)前值。對(duì)于組合邏輯,我們生成 nnmigen.sim.Settle() ,要求完成模擬。

對(duì)于同步邏輯,還可以開(kāi)始新的時(shí)鐘周期,而不需要參數(shù)。

設(shè)計(jì)一個(gè) CPU

在熟悉了 nMigen 之后,我開(kāi)始嘗試?yán)L制一個(gè)框圖來(lái)顯示我的 CPU。在本系列博客的下一部分中,我將對(duì)這個(gè)問(wèn)題進(jìn)行更詳細(xì)的討論,但我將簡(jiǎn)單地說(shuō),我先繪制出一個(gè)指令所需要的邏輯,然后繪制出另一個(gè)指令的邏輯,然后找到如何將它們結(jié)合起來(lái)的方法。這里有第一個(gè)混亂的草圖:

f82f0da2-597b-11ed-a3b6-dac502259ad0.jpg

在弄清楚不同元件的接口要求是什么時(shí),這個(gè)框圖步驟非常有價(jià)值,但是在開(kāi)始使用 nMigen 和在這個(gè)過(guò)程中學(xué)習(xí)數(shù)字邏輯設(shè)計(jì)之前,我不想這么做。修改后的框圖如下所示:

f86865a2-597b-11ed-a3b6-dac502259ad0.png

請(qǐng)關(guān)注本系列博客的下一部分,我將深入研究 RISC-V 和 CPU 設(shè)計(jì)。我想用第三部分來(lái)重新設(shè)計(jì)我的設(shè)計(jì),使其適用于我要實(shí)現(xiàn)的全部指令集(RV32I)上工作

審核編輯:彭靜
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10854

    瀏覽量

    211570
  • 觸發(fā)器
    +關(guān)注

    關(guān)注

    14

    文章

    2000

    瀏覽量

    61130
  • 數(shù)字邏輯
    +關(guān)注

    關(guān)注

    0

    文章

    73

    瀏覽量

    16645
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):2.1基本邏輯運(yùn)算

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 12:41:06

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):24.1邏輯代數(shù)_定理及規(guī)則

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 12:43:59

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):24.2邏輯代數(shù)_常用公式

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 12:44:34

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):代數(shù)化簡(jiǎn)法

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 12:45:21

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):6.3組合邏輯電路的測(cè)試

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 13:44:21

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):96.2節(jié)拍發(fā)生器2

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 14:02:57

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):131.3ROM的應(yīng)用

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 16:17:44

    #硬聲創(chuàng)作季 數(shù)字邏輯設(shè)計(jì):132.1PROM及應(yīng)用_1

    邏輯設(shè)計(jì)數(shù)字邏輯
    Mr_haohao
    發(fā)布于 :2022年11月04日 16:19:07

    夏宇聞數(shù)字邏輯設(shè)計(jì),學(xué)習(xí)FPGA的前提經(jīng)典功課教程

    夏宇聞數(shù)字邏輯設(shè)計(jì),學(xué)習(xí)FPGA的前提經(jīng)典功課教程。
    發(fā)表于 02-06 21:45

    fpga verilog語(yǔ)法 數(shù)字邏輯設(shè)計(jì) 夏宇聞

    本書(shū)主要講解verilog語(yǔ)法知識(shí),只需看前7章,后面是例子。
    發(fā)表于 10-10 09:38

    夏宇聞數(shù)字邏輯設(shè)計(jì)

    很不錯(cuò)的一本書(shū)
    發(fā)表于 04-06 19:40

    學(xué)數(shù)字邏輯設(shè)計(jì)遇到的問(wèn)題,求大佬幫忙看看

    (1)如何用二輸入與非門(mén)組成四輸入與非門(mén)(2)如何用四輸入與非門(mén)組成二輸入與非門(mén)求原理圖和轉(zhuǎn)換公式
    發(fā)表于 10-19 14:48

    FPGA------夏宇聞數(shù)字邏輯設(shè)計(jì) PDF

    發(fā)表于 09-28 11:15

    數(shù)字原理與邏輯設(shè)計(jì)(英)

    發(fā)表于 08-17 17:07 ?0次下載

    什么是數(shù)字邏輯設(shè)計(jì)?我應(yīng)該使用什么工具?

    上文中我們指出,不管我們是創(chuàng)建自定義 ASIC 芯片還是配置 FPGA,都可以使用相同的數(shù)字邏輯設(shè)計(jì)工具。
    的頭像 發(fā)表于 11-01 09:23 ?2173次閱讀
    RM新时代网站-首页