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

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

3天內不再提示

FPGA教程:通過(guò)Mojo開(kāi)發(fā)板介紹FPGA

李澤明 ? 來(lái)源:DevicePlus ? 作者:DevicePlus ? 2023-02-27 10:27 ? 次閱讀

這篇文章來(lái)源于DevicePlus.com英語(yǔ)網(wǎng)站的翻譯稿。

引言

迄今為止,我們的嵌入式系統教程和項目已經(jīng)使用了多塊微控制器開(kāi)發(fā)板,比如不同型號的Arduino微控制器板。使用微控制器時(shí),用戶(hù)將微控制器上的數字和模擬接口引腳連至受控外圍電子設備,然后,用戶(hù)上傳包含一系列指令的軟件,微控制器會(huì )循環(huán)執行這些指令。運行時(shí),微控制器的核心處理器按照微控制器模塊的時(shí)鐘速率讀取并執行這些指令。因此,我們可以看到,在某一時(shí)刻,微控制器通常只運行一條指令。

對于許多嵌入式系統項目來(lái)說(shuō),尤其是那些在入門(mén)微控制器模塊(比如Arduino開(kāi)發(fā)板)上實(shí)現的項目,這種單獨的指令執行并不影響性能。這是因為時(shí)鐘速度足夠快,以至于人類(lèi)感官無(wú)法區分后續運行。然而,許多大型應用可能需要不同的操作并行運行,這就使得微控制器實(shí)現變得非常復雜或完全不可能。現場(chǎng)可編程門(mén)陣列(簡(jiǎn)稱(chēng)FPGA)是一種不同的計算平臺,由于其固有的不同功能方式,能夠實(shí)現微控制器無(wú)法實(shí)現的功能。

poYBAGPzJdaAWRvoAAIi-L4Oud4850.jpg

圖1:一塊Arduino微控制器開(kāi)發(fā)板(左)和一塊Altera FPGA開(kāi)發(fā)板(右)/ ?RobotShop & ?Waveshare

FPGA和微控制器的主要區別在于配置方法。用戶(hù)不需要像處理微控制器那樣上載一系列指令讓板載芯片解釋執行,而是直接配置FPGA的硬件。這意味著(zhù)用戶(hù)為FPGA編寫(xiě)的程序不是重復執行的一系列指令,而是如何配置內部硬件以執行不同任務(wù)的規劃。硬件以?xún)炔窟壿嬮T(mén)和存儲單元的形式出現,最基本的級別就是多晶體管電路組合。

由于FPGA的項目實(shí)現實(shí)際上只是硬件連接,所以FPGA可以并行運行多個(gè)操作!想象一下,如果系統任務(wù)如下:讀取光敏電阻上的壓降;讀取霍爾效應傳感器的輸入;并通過(guò)UART連接與另一個(gè)設備進(jìn)行通信。微控制器方案的程序流程圖可能如下所示:

pYYBAGPzJdeADohgAAC13kNgfZI260.jpg

請注意不同任務(wù)是串行完成的。而FPGA則可以使用不同電路分別執行三個(gè)任務(wù),因此允許系統并行執行所有三個(gè)操作。因此,FPGA方案的項目實(shí)現原理將如下所示:

poYBAGPzJdmADCw_AAC7NHgQ8FQ539.jpg

上述例子只是很簡(jiǎn)單地解釋了微控制器方案與運行和FPGA方案與運行之間的區別,這一點(diǎn)很重要。實(shí)際上,FPGA的內部項目實(shí)現取決于項目本身,微控制器可能通過(guò)并行化執行指令來(lái)提高性能。關(guān)鍵的一點(diǎn)是這兩種架構實(shí)現相同任務(wù)的方式不同:微控制器串行執行指令,而FPGA則通過(guò)路由內部硬件實(shí)現功能行為。

許多FPGA開(kāi)發(fā)板都可以當作入門(mén)模塊使用,比如Digilent和Xilinx出售的Arty和Basys開(kāi)發(fā)板。在本教程中,我們將使用Embedded Micro的Mojo V3。這是一款低成本板卡,也可用作入門(mén)模塊。我個(gè)人比較喜歡Mojo開(kāi)發(fā)板,比如Basys 3,因為它帶有大量可與外部電路連接的插頭引腳!此外,Embedded Micro還提供許多很棒的教程,幫助開(kāi)發(fā)人員使用FPGA(請參考附錄中的鏈接)!

pYYBAGPzJduAOKvoAAPdniVfRSE135.jpg

圖2:Mojo V3開(kāi)發(fā)板/ ?Embedded Micro

在本教程中,我們從一個(gè)基本的輸入/輸出示例開(kāi)始,向您介紹Mojo開(kāi)發(fā)板的編程過(guò)程。在第2部分中,我們會(huì )為您準備一個(gè)更復雜的項目:硬件PWM實(shí)現!

本教程演示了如何使用Verilog硬件描述語(yǔ)言(稍后我們將詳細討論該語(yǔ)言)來(lái)配置Mojo!Verilog及其變體已經(jīng)成為行業(yè)常用軟件,所以您通過(guò) Mojo項目學(xué)到的知識也能應用到其他更高級的開(kāi)發(fā)板上!

所需軟硬件如下:

硬件:

Mojo V3開(kāi)發(fā)板

Micro USB電纜

Windows或Linux電腦(不幸的是,目前不支持Mac操作系統

紅色LED

1 x 150?或類(lèi)似電阻(用于LED限流)

2 x 10k?電阻(用于按鈕下拉)

面包板和跳線(xiàn)

軟件:

Mojo Loader(將設計實(shí)現上傳至FPGA)

ISE Design Suite(編寫(xiě)和綜合Verilog代碼的IDE)

下載頁(yè)面上向下滾動(dòng),直到看到標有“ISE Design Suite”的部分

Mojo 基本項目(所有項目都將以Mojo提供的該項目骨架為基礎)

比如說(shuō),我們想只有當兩個(gè)外部按鈕都按下時(shí),才能點(diǎn)亮一個(gè)外部LED。首先,我們注意到這是一個(gè)數字系統,因為按鈕輸入電壓和LED輸出電壓只能取兩個(gè)值中的一個(gè):0伏或3.3伏。我們可以用邏輯0表示0伏,用邏輯1表示3.3伏,從而對輸入端和輸出端的所有可能電壓值進(jìn)行二進(jìn)制編碼。實(shí)際上,1和0是“高”和“低”數字電壓信號的另一種表達方式。

下表總結了按鈕輸入的所有值和對應的LED輸出值:

輸入1(按鈕1) 輸入2(按鈕2) 輸出(LED
0 0 0
0 1 0
1 0 0
1 1 1

熟悉布爾代數(研究二進(jìn)制值和二進(jìn)制值的不同運算)的人會(huì )把這個(gè)雙輸入單輸出系統看作與(AND )門(mén)。與門(mén)的工作原理是只有當兩個(gè)輸入都是1時(shí)輸出才是1,這正是我們想要的按鈕和LED配置!許多邏輯門(mén)將輸出值定義為輸入值的函數。要查看所有邏輯門(mén)的信息,請點(diǎn)擊附件中的鏈接!

我們首先按下圖所示將按鈕和LED連至Mojo開(kāi)發(fā)板:

poYBAGPzJd2AeSw1AAWYokL-f_8740.jpg

圖3:Mojo開(kāi) 發(fā)板連接一個(gè)LED和兩個(gè)按鈕的接線(xiàn)圖(通過(guò)Fritzing創(chuàng )建;Mojo Fritzing文件由Michael Earls制作)

我們現在可以對Mojo進(jìn)行編程。啟動(dòng)ISE并打開(kāi)您下載的基礎項目。屏幕應該如下所示:

poYBAGPzJd-Ae4e1AAJcdeyvq6c985.jpg

在窗口左側,您應該看到一個(gè)含有不同文件的層次結構。雙擊文件mojo_top.v。該文件中的Verilog代碼應該在屏幕右側彈出。

pYYBAGPzJeGAIvmXAAGbqiSDEb0265.jpg

現在,我們簡(jiǎn)單介紹一下Verilog語(yǔ)言及其文件結構。首先需要注意的是,Verilog不是傳統意義上的編程語(yǔ)言。如前所述,FPGA的內部硬件是可配置的。而Verilog語(yǔ)言則是設計人員和FPGA實(shí)現軟件(本文為ISE Design Suite)之間的接口。更具體地說(shuō),實(shí)現軟件讀取Verilog代碼并通過(guò)內部算法將其轉換成一系列邏輯門(mén),從而實(shí)現代碼指定的功能。因此,Verilog被稱(chēng)為硬件描述語(yǔ)言,簡(jiǎn)稱(chēng)HDL。

Verilog代碼分為相互作用的多個(gè)不同模塊——這些模塊類(lèi)似于其他編程語(yǔ)言的函數。這些模塊可以有多個(gè)輸入和輸出,模塊內部的代碼會(huì )指定如何根據不同的輸入值驅動(dòng)輸出。您可能會(huì )注意到,不同模塊可以分布在多個(gè)Verilog .v文件中。Mojo基礎項目包含幾個(gè).v文件:AVR、SPI和串行功能。mojo_top.v文件是中心Verilog模塊,該模塊指定FPGA的主要行為。ISE足夠智能,能識別這是程序的中心(“主”)模塊。在屏幕左側的文件層次結構中,您會(huì )看到mojo_top.v文件位于列表頂部。

poYBAGPzJeKAHWuWAAEaSFL-OJM868.jpg

除Verilog .v文件外,您還會(huì )看到一個(gè)擴展名為.ucf的文件,該文件代表用戶(hù)約束文件(User Constraints File)。在這個(gè)文件中,用戶(hù)在他或她的項目中為輸入和輸出(I / O)連接指定名稱(chēng),并確定與這些信號相關(guān)的引腳和I/O標準。我們開(kāi)始編輯這個(gè)文件。在左側瀏覽器中雙擊文件名,該文件會(huì )在右側的新選項卡中打開(kāi)。

pYYBAGPzJeSANWmSAAG3KclEFN4259.jpg

您會(huì )看到這個(gè)文件中已經(jīng)存在幾條指令。這些指令指定了板上連接的名稱(chēng),比如板載LED和不同通信總線(xiàn)的連接。向下滾動(dòng)至文件末尾,按鍵盤(pán)上的“Enter”鍵創(chuàng )建一個(gè)新行。我們要添加三條指令,分別對應兩個(gè)按鈕輸入引腳和一個(gè)LED輸出引腳。 我們要做的就是按照文件中其他指令的格式編寫(xiě)新指令即可!

您可以復制文件中以“NET”開(kāi)頭的任何一條指令,然后在文件底部粘貼三次,修改行首引號內的字符串以及“P”后面的數字。在本教程中,我們將使用14和21腳作為按鈕輸入,26腳作為L(cháng)ED輸出,因此我們應在文件底部添加以下指令:

NET “button_a” LOC = P14 | IOSTANDARD = LVTTL;

NET “button_b” LOC = P21 | IOSTANDARD = LVTTL;

NET “l(fā)ed_external” LOC = P26 | IOSTANDARD = LVTTL;

請確保您選擇的引腳不與UCF文件指定的引腳沖突。

現在您的UCF文件應該是這樣的:

pYYBAGPzJeaAVyc2AAZLbc43EAA198.jpg

現在我們已經(jīng)指定項目的具體信號名稱(chēng)及其關(guān)聯(lián)連接,我們可以編寫(xiě)代碼,將LED輸出描述為按鈕輸入信號的函數。您可能已經(jīng)猜到了,這需要修改mojo_top模塊。

模塊聲明部分的頂部是單詞“module”(模塊),然后是模塊名稱(chēng)(本例中模塊名稱(chēng)為mojo_top)以及模塊將要使用的輸入和輸出信號列表。我們需要將兩個(gè)按鈕信號名稱(chēng)和LED信號名稱(chēng)添加到該連接列表中,使得信號能夠成為輸入和輸出。要做到這一點(diǎn),我們可以在信號列表末尾添加以下程序:

input button_a,

input button_b,

output led_external

現在,模塊頭應該是這樣的:

poYBAGPzJeiAYEuLAAKyr3ihC6U329.jpg

至此,我們已經(jīng)為按鈕和外部LED聲明了信號名稱(chēng),并為這些信號分配了Mojo開(kāi)發(fā)板I/O引腳,并且在Verilog中指定這些信號分別是輸入和輸出?,F在,我們所要做的就是定義LED點(diǎn)亮的條件!更具體地說(shuō),我們需要指定發(fā)光二極管開(kāi)啟(二進(jìn)制1)和關(guān)閉(二進(jìn)制0)的情況。

回想之前的討論,我提到LED的操作行為與布爾與(AND)函數完全相同。在Verilog中,我們用符號&&表示布爾與(AND)運算。我們想要將按鈕輸入的與函數結果分配給LED。實(shí)現此功能的Verilog代碼如下:

assign led_external = button_a && button_b;

將這行指令添加到模塊末尾就可以實(shí)現我們所需的行為。打開(kāi)基礎項目時(shí),我們會(huì )看到這行程序上方本來(lái)就存在許多程序行,這些程序設置了其他不同信號,比如板上SPI和板載LED信號,在本項目中我們不會(huì )使用這些信號。

現在,完整模塊應該是這樣的:

pYYBAGPzJemAY0uOAAGsvDxF0l8515.jpg

要對FPGA進(jìn)行編程以實(shí)現我們指定的行為,我們必須生成一個(gè)編程文件,其格式為.bin文件。發(fā)出命令之后,ISE會(huì )綜合我們的設計(檢查錯誤并運行測試),然后實(shí)現設計(定義實(shí)現指定行為所需的內部門(mén)結構),并生成這個(gè)編程文件。要運行此過(guò)程,請雙擊左下窗口中的“Generate Programming File”(生成編程文件)按鈕。

pYYBAGPzJeyAQTJlAAEZfgAfXrk989.jpg

在編程文件生成的過(guò)程中,ISE會(huì )發(fā)出幾條丟失網(wǎng)絡(luò )和/或未路由網(wǎng)絡(luò )的警告。這些警告對于此實(shí)現并不重要,不會(huì )影響我們對FPGA的編程。我們沒(méi)有使用UCF中指定的所有信號,所以ISE才會(huì )發(fā)出這些警告。

編程文件生成完成后,ISE會(huì )在我們剛才雙擊的按鈕旁邊添加一個(gè)綠色對號。

pYYBAGPzJe2AViT7AAECX_9lzm8435.jpg

現在,我們所要做的就是將編程文件上傳到Mojo開(kāi)發(fā)板上。首先,請確保按上圖所示將按鈕和LED連至Mojo的引腳。

其次,打開(kāi)Mojo Loader軟件并選擇與Mojo相對應的USB端口。然后,選擇ISE生成的.bin文件。您必須導航至項目目錄下的/syn/文件夾。在Mojo Loader內打開(kāi).bin文件后,請點(diǎn)擊窗口右下方的“Load”(加載)按鈕。編程文件就開(kāi)始向Mojo開(kāi)發(fā)板上傳。

pYYBAGPzJe-ALlcOAAC0npNghMk193.jpg

該過(guò)程完成后,您就可以測試您的設計了!只有按下兩個(gè)按鈕時(shí),LED燈才會(huì )點(diǎn)亮。恭喜,您已經(jīng)完成了您的第一個(gè)FPGA項目!我們還為您準備了一個(gè)更復雜的硬件PWM項目,敬請查看本教程的第2部分!

審核編輯:湯梓紅

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

    關(guān)注

    48

    文章

    6879

    瀏覽量

    148466
  • FPGA
    +關(guān)注

    關(guān)注

    1610

    文章

    21374

    瀏覽量

    595061
  • Embedded
    +關(guān)注

    關(guān)注

    0

    文章

    42

    瀏覽量

    22137
  • 開(kāi)發(fā)板
    +關(guān)注

    關(guān)注

    25

    文章

    4579

    瀏覽量

    94984
  • Arduino
    +關(guān)注

    關(guān)注

    185

    文章

    6434

    瀏覽量

    185337
收藏 人收藏

    評論

    相關(guān)推薦

    #fpga開(kāi)發(fā)板 Lattic-mipi開(kāi)發(fā)板

    FPGA開(kāi)發(fā)板
    明德?lián)P科技
    發(fā)布于 :2023年10月25日 18:01:23

    FPGA開(kāi)發(fā)板FPGA核心的分別

    簡(jiǎn)單點(diǎn)說(shuō)就是:開(kāi)發(fā)板是主芯片也就是FPGA主芯片 和外圍電路一起。而核心就是主芯片也就是FPGA。 核心可以用其它類(lèi)似接口的核心
    發(fā)表于 09-03 09:21

    介紹FPGA開(kāi)發(fā)板么?

    想學(xué)習FPGA,有沒(méi)有資料和例程比較全的開(kāi)發(fā)板,介紹一下。謝謝。
    發(fā)表于 09-12 13:46

    USB 3.0開(kāi)發(fā)板 USB3.0+fpga開(kāi)發(fā)板 FPGA開(kāi)發(fā)板

    置 IO(支持LVDS傳輸)●U***3.0芯片IO均已引到FPGA,使用更方便;USB3.0開(kāi)發(fā)板主要軟件資源●完整的固件下載方案,通過(guò)應用程序下載固件程序到CYUSB3014中運行;●完整的在線(xiàn)編程方案
    發(fā)表于 09-20 15:22

    USB 3.0開(kāi)發(fā)板 USB+FPGA開(kāi)發(fā)板 FPGA開(kāi)發(fā)板

    置 IO(支持LVDS傳輸)●U***3.0芯片IO均已引到FPGA,使用更方便;USB3.0開(kāi)發(fā)板主要軟件資源●完整的固件下載方案,通過(guò)應用程序下載固件程序到CYUSB3014中運行;●完整的在線(xiàn)編程方案
    發(fā)表于 10-18 14:46

    USB 3.0開(kāi)發(fā)板 USB3.0+FPGA開(kāi)發(fā)板 FPGA開(kāi)發(fā)板 USB開(kāi)發(fā)板

    置 IO(支持LVDS傳輸)●U***3.0芯片IO均已引到FPGA,使用更方便;USB3.0開(kāi)發(fā)板主要軟件資源●完整的固件下載方案,通過(guò)應用程序下載固件程序到CYUSB3014中運行;●完整的在線(xiàn)編程方案
    發(fā)表于 01-08 14:30

    USB 3.0開(kāi)發(fā)板 USB3.0+FPGA開(kāi)發(fā)板 FPGA開(kāi)發(fā)板

    2.5V或3.3V可配置 IO(支持LVDS傳輸)●U***3.0芯片IO均已引到FPGA,使用更方便;USB3.0開(kāi)發(fā)板主要軟件資源●完整的固件下載方案,通過(guò)應用程序下載固件程序到CYUSB3014中
    發(fā)表于 01-15 10:50

    【Runber FPGA開(kāi)發(fā)板】配套視頻教程合集(視頻+資料)

    是Runber FPGA開(kāi)發(fā)板的配套視頻課程,主要通過(guò)PLL的工程實(shí)例講解高云IP core的使用,課程主要介紹什么是IP core、常用的高云IP core有哪些、如何配置和調用IP
    發(fā)表于 04-13 14:01

    【Combat FPGA開(kāi)發(fā)板】基于FPGA的網(wǎng)口設計——MAC協(xié)議的開(kāi)發(fā)

    `本視頻是Combat FPGA開(kāi)發(fā)板的配套視頻課程,本章節課程主要介紹如何利用Gowin FPGA實(shí)現MAC協(xié)議開(kāi)發(fā)。內容包括MAC協(xié)議概
    發(fā)表于 05-06 15:08

    【MiniStar FPGA開(kāi)發(fā)板】配套視頻教程——FPGA硬件基礎

    本視頻是MiniStar FPGA開(kāi)發(fā)板的配套視頻課程,本章節課程主要介紹Gowin的FPGA硬件基礎,包括FPGA的IO、IO Bank,
    發(fā)表于 05-06 15:37

    fpga開(kāi)發(fā)板電路圖

    最全面的fpga開(kāi)發(fā)板電路圖,一共有10多份fpga開(kāi)發(fā)板電路圖。
    發(fā)表于 04-19 12:50 ?133次下載
    <b class='flag-5'>fpga</b><b class='flag-5'>開(kāi)發(fā)板</b>電路圖

    Mojo EPGAs簡(jiǎn)介—第2部分

    在本教程的第1部分中,我們介紹FPGA,并在嵌入式 Micro的Mojo FPGA上完成了一個(gè)簡(jiǎn)單的入門(mén)項目。
    的頭像 發(fā)表于 03-01 18:24 ?636次閱讀
    <b class='flag-5'>Mojo</b> EPGAs簡(jiǎn)介—第2部分

    fpga開(kāi)發(fā)板與linux開(kāi)發(fā)板區別

    FPGA開(kāi)發(fā)板與Linux開(kāi)發(fā)板是兩種不同的硬件開(kāi)發(fā)平臺,各自具有不同的特點(diǎn)和應用場(chǎng)景。在以下的文章中,我將詳細介紹
    的頭像 發(fā)表于 02-01 17:09 ?945次閱讀

    fpga開(kāi)發(fā)板使用教程

    FPGA開(kāi)發(fā)板的使用教程主要包括以下幾個(gè)關(guān)鍵步驟。
    的頭像 發(fā)表于 03-14 15:50 ?480次閱讀

    fpga開(kāi)發(fā)板是什么?fpga開(kāi)發(fā)板有哪些?

    FPGA開(kāi)發(fā)板是一種基于FPGA(現場(chǎng)可編程門(mén)陣列)技術(shù)的開(kāi)發(fā)平臺,它允許工程師通過(guò)編程來(lái)定義和配置FP
    的頭像 發(fā)表于 03-14 18:20 ?1050次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看