<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 從VHDL代碼到真實(shí)硬件:設計一個(gè)8位算術(shù)邏輯單元

從VHDL代碼到真實(shí)硬件:設計一個(gè)8位算術(shù)邏輯單元

作者: 時(shí)間:2024-09-03 來(lái)源:EEPW編譯 收藏

在這個(gè)項目中,我們使用VHDL語(yǔ)言創(chuàng )建了一個(gè)(ALU),并在連接到帶有輸入開(kāi)關(guān)和LED顯示器的自定義PCB的Altera CPLD開(kāi)發(fā)板上運行它。

本文引用地址:http://dyxdggzs.com/article/202409/462593.htm

使用基于硬件的方法開(kāi)發(fā)電子系統并不總是需要將各種晶體管和邏輯門(mén)物理連接到面包板或PCB上??梢允褂秒x散邏輯構建算術(shù)邏輯單元(ALU),但隨著(zhù)邏輯復雜性的增加,還有更好的選擇。通過(guò)可編程邏輯設備和硬件描述語(yǔ)言(HDL),可以在單個(gè)芯片中實(shí)現從簡(jiǎn)單電路到高度專(zhuān)業(yè)化的處理單元的任何內容。

ALU項目概述

在這個(gè)項目中,我將介紹(ALU)電路的創(chuàng )建過(guò)程,該電路具有輸入DIP開(kāi)關(guān)和輸出LED,如圖1所示。我使用VHDL語(yǔ)言對ALU進(jìn)行編碼,并在復雜可編程邏輯器件(CPLD)開(kāi)發(fā)板上運行。我的目標是介紹可編程邏輯,并為使用真實(shí)硬件而不是圖表和計算機模擬打開(kāi)大門(mén)。

定制PCB開(kāi)關(guān)和LED顯示ALU操作

1.png

圖1. 項目運行過(guò)程。圖片由Kristijan Nelkovski友情提供

對于這個(gè)項目,我構建了一個(gè)帶有All About Circuits品牌的定制印刷電路板(PCB),如圖2所示。與更知名的現場(chǎng)可編程門(mén)陣列(FPGA)相比,CPLD是一種更實(shí)惠但功能較弱的可編程邏輯器件。這兩種設備都可以用于創(chuàng )建具有專(zhuān)用輸入和輸出的定制電子設計。

已完成的ALU項目包括一個(gè)定制的PCB

2.png

圖2:已完成的ALU項目包括一個(gè)定制的PCB。圖片由Kristijan Nelkovski提供

從內部來(lái)看,這些CPLD和FPGA組件包含可重構邏輯塊陣列,并作為獨立的IC封裝,以便嵌入到您自己的設計中。制造商提供開(kāi)發(fā)板,用于學(xué)習、測試和實(shí)驗使用他們的技術(shù)和軟件環(huán)境。我使用CPLD的開(kāi)發(fā)板。

什么是ALU?

每個(gè)處理器的核心都是一個(gè)組合邏輯電路,該電路對稱(chēng)為算術(shù)邏輯單元的整數二進(jìn)制數執行算術(shù)和位操作。我們將在本項目中構建的電路是一個(gè)8位算術(shù)邏輯單元,它包含兩個(gè)8位操作數(輸入),一個(gè)8位結果(輸出)和一個(gè)4位操作碼(輸入),該操作碼定義了將要執行的操作(圖3)

ALU的符號表示

3.png 

圖3. ALU的符號表示。圖片由Jim Lamberson提供,維基共享資源

ALU 通常包含狀態(tài)位(既是輸入也是輸出),這些狀態(tài)位向處理器提供有關(guān)最后執行的操作的重要信息。這些狀態(tài)信息可以包括結果是否為零,或者結果是否溢出到最高有效位(MSB)之外。但是,我們的電路不需要它們,因此不會(huì )包含任何狀態(tài)位。

ALU為學(xué)習VHDL編碼和CPLD編程操作提供了極好的起點(diǎn)。一旦你完成這個(gè)項目,你就可以輕松地擴展到更困難的應用。

項目詳情和參考

在這個(gè)項目中,我們將使用VHDL語(yǔ)言創(chuàng )建一個(gè)8位算術(shù)邏輯單元(ALU),并使用英特爾的Quartus Prime Lite Edition軟件(Altera現在是英特爾的一部分)在A(yíng)ltera Max II EPM240 CPLD開(kāi)發(fā)板上運行它。該電路的代碼基于加州大學(xué)河濱分校發(fā)布的實(shí)驗室練習設計。

對于這個(gè)項目,你需要對編程和離散邏輯有基本的理解。查看AAC的VHDL和4位離散邏輯ALU項目介紹也會(huì )有所幫助。

注意:雖然我為這個(gè)項目創(chuàng )建了一個(gè)“屏蔽”類(lèi)型的板子,但這里介紹的所有內容都是完全適合面包板和穿孔板的。

使用Quartus Prime為Altera MAX II開(kāi)發(fā)板設置新項目

為了開(kāi)始我們的項目,我們需要下載并安裝Quartus Prime Lite Edition,并創(chuàng )建一個(gè)文件夾來(lái)存儲我們所有的項目。我從英特爾的網(wǎng)站下載了該軟件,并在“Windows Documents”目錄中創(chuàng )建了一個(gè)名為“quartus”的文件夾。

當我們運行Quartus時(shí),我們需要做的第一件事就是通過(guò)“新建項目向導”設置一個(gè)新項目,該向導可以在“文件->新建項目向導”下找到。然后,我們需要在名為“介紹”的第一個(gè)屏幕上點(diǎn)擊“下一步”。

如圖4所示,在名為“Directory, Name, Top-Level Entity”的第二個(gè)屏幕上,我們需要選擇之前創(chuàng )建的文件夾作為工作目錄,并為當前項目提供一個(gè)合適的名稱(chēng)。我將此項目命名為“ALU”。

Quartus“目錄、名稱(chēng)、頂層實(shí)體”屏幕

 4.png

圖4. Quartus“目錄、名稱(chēng)、頂層實(shí)體”屏幕。圖片由Kristijan Nelkovski提供

對于“項目類(lèi)型”屏幕,我們需要選擇“空項目”,并將下一個(gè)名為“添加文件”的屏幕留空(圖5)。

Quartus“項目類(lèi)型”屏幕

 5.png

圖5. Quartus“項目類(lèi)型”屏幕。圖片由Kristijan Nelkovski提供

在“Family, Device & Board Settings”屏幕上,我們需要從“Device family”部分的下拉菜單中選擇“MAX II”(圖6)。然后,從“Available devices”部分選擇“EPM240T100C5”,因為這是Altera MAX II EPM240上的芯片。

Quartus 填滿(mǎn)族群屏幕

 6.png

圖6. Quartus填充的“系列、設備和板設置”屏幕。圖片由Kristijan Nelkovski提供

接下來(lái),我們需要在“EDA工具設置”屏幕上將“Verilog HDL”更改為“VHDL”,點(diǎn)擊下一步,并在“摘要”(圖7)中檢查是否一切正常。在此之后,我們可以點(diǎn)擊“完成”按鈕,然后我們的新項目將被創(chuàng )建。

Quartus EDA工具設置屏幕

 7.png

圖7. Quartus“EDA工具設置”屏幕。圖片由Kristijan Nelkovski提供

一旦此項目打開(kāi),我們需要在“項目導航器:層次結構”窗口中單擊我們實(shí)體的名稱(chēng),然后通過(guò)按“CTRL+N”并選擇“VHDL文件”來(lái)創(chuàng )建一個(gè)新的VHDL文件

打開(kāi)此文件后,我們必須通過(guò)“文件 -> 另存為”將其保存為實(shí)體的VHDL文件。完成所有這些后,我們可以開(kāi)始為ALU編寫(xiě)代碼。

聲明VHDL庫

因此,與所有編程語(yǔ)言一樣,我們需要在的頂部首先聲明將在項目中使用的庫。

 8.png

創(chuàng )建 ALU 電路實(shí)體

接下來(lái),我們將創(chuàng )建一個(gè)ALU實(shí)體,定義其所有輸入和輸出端口。在這里,我們定義端口A(yíng)和B為“IN STD_LOGIC_VECTOR(7 DOWNTO 0)”,這意味著(zhù)每個(gè)輸入實(shí)際上都是一個(gè)8位總線(xiàn),其位編號從7到0,其中第七位是MSB。同樣,SEL端口被定義為4位輸入,RES端口被定義為8位輸出。

 9.png

創(chuàng )建算術(shù)邏輯單元電路的VHDL行為架構

現在我們需要設計電路的結構或行為。我們將使用三個(gè)輸入或端口A(yíng)、B和Sel創(chuàng )建一個(gè)過(guò)程。

在此過(guò)程中,我們可以調用“case-when”語(yǔ)句(類(lèi)似于其他編程語(yǔ)言中的“switch-case”),其中我們檢查端口SEL的狀態(tài)。SEL值是ALU的操作碼,它決定了需要在端口A(yíng)和B上接收的兩個(gè)8位數字之間執行的操作。

這是在語(yǔ)句的“當XXXX =>”部分完成的,其中XXXX表示SEL的二進(jìn)制狀態(tài)(介于0000和1111之間的位置)。每個(gè)狀態(tài)都分配給一個(gè)相應的ALU操作,該操作使用端口A(yíng)和B上接收到的值執行。輸出在端口RES上寫(xiě)出。

在此之后,我們可以結束“case”語(yǔ)句、流程和行為架構,并以此結束我們項目的代碼部分。

10.png

在上面的代碼中,我包含了一些最常見(jiàn)的算術(shù)和邏輯操作,以及一些隨機的操作,并注釋了每個(gè)操作的作用。在這里,你可以替換和包含任何你想要的任意算術(shù)或邏輯操作!

引腳映射

代碼完成后,我們需要做的第一件事就是編譯它。這可以通過(guò)進(jìn)入“處理 -> 開(kāi)始編譯”來(lái)完成。如果一切編譯正確,我們不應該收到任何錯誤消息,盡管我們可能會(huì )收到一些可以忽略的警告。

接下來(lái),我們需要將之前為實(shí)體定義的端口連接到Altera開(kāi)發(fā)板上的物理引腳。我們將通過(guò)Quartus的Pin Planner工具來(lái)完成此操作,該工具可通過(guò)“Assignments -> Pin Planner”訪(fǎng)問(wèn)

引腳規劃工具包含:

使用中的芯片(本例中為EPM240)的視覺(jué)表示。

描述每種引腳類(lèi)型的引腳圖例。

一個(gè)包含我們實(shí)體端口中每個(gè)單獨節點(diǎn)的表格。在這個(gè)表格中,我們可以通過(guò)在“位置”列的相應行中寫(xiě)出每個(gè)節點(diǎn),將其連接到專(zhuān)用引腳。

表1包含我生成的引腳分配表。

11.png

表1. ALU的Quartus引腳映射表

將代碼上傳到Altera開(kāi)發(fā)板

一旦我們將每個(gè)輸入和輸出分配給一個(gè)引腳,就需要再次編譯代碼。如果沒(méi)有彈出錯誤消息,我們就可以繼續將其上傳到Altera MAX II。

為此,我們首先必須通過(guò)板上的桶形插孔將板子本身連接到5 V電源。接下來(lái),我們必須通過(guò)JTAG端口將其連接到USB Blaster,然后使用迷你USB插孔將USB Blaster連接到我們的計算機(圖8)。

Altera板和USB Blaster連接。

 12.png

?圖8。更改板和USB噴砂機連接。圖片由KristijanNelkovski提供

然后,我們可以通過(guò)進(jìn)入“工具->編程器”并檢查“編程/配置”來(lái)運行編程器,如圖9所示。然后我們需要打開(kāi)“硬件設置”,選擇“USB Blaster”作為我們的“可用硬件項”(我們的程序員),然后點(diǎn)擊“開(kāi)始”,我們的代碼將被上傳到Altera MAX II。

Quartus編程器屏幕

13.png

?圖9。Quartus編程器屏幕。圖片由KristijanNelkovski提供

印刷電路板電路圖

圖10所示為我們的電路圖。每個(gè)LED都通過(guò)一個(gè)限流電阻連接到一個(gè)輸出針腳。連接到輸入引腳的DIP開(kāi)關(guān)的每個(gè)觸點(diǎn)也通過(guò)電阻網(wǎng)絡(luò )被下拉到地(在定制PCB上,這些電阻網(wǎng)絡(luò )隱藏在DIP開(kāi)關(guān)的下面)。

帶開(kāi)關(guān)輸入和LED輸出的定制PCB電路圖

14.png

?圖10。帶開(kāi)關(guān)輸入和LED輸出的定制PCB電路圖。圖片由KristijanNelkovski提供

在把所有的東西都接好并用5V給Altera板供電之后,我們可以通過(guò)在我們的操作端口上輸入數字并將操作模式切換到我們喜歡的任何操作來(lái)看到ALU的動(dòng)作。發(fā)光二極管顯示結果,如圖1所示。

ALU項目物料清單

表2為本工程的材料清單。

15.png

?表2。材料清單

輪到你了!

在這個(gè)項目中,我們用VHDL語(yǔ)言創(chuàng )建了一個(gè)8位ALU電路,并在CPLD開(kāi)發(fā)板上運行。這里,我的目標是介紹可編程邏輯,并為使用真正的硬件組件而不是圖表和計算機模擬的FPGA組件打開(kāi)大門(mén)。

如果重復此項目,則可以很容易地向ALU的VHDL操作中添加額外的操作碼。還可以修改電路設計以輸出和顯示狀態(tài)代碼。在以下評論中分享您的想法或項目!




評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>