www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > > ZYNQ
	


在這個(gè)項(xiàng)目中,我們用 VHDL 語(yǔ)言創(chuàng)建一個(gè) 8 位算術(shù)邏輯單元 (ALU),并在連接到帶有輸入開(kāi)關(guān)和 LED 顯示屏的定制 PCB 的 Altera CPLD 開(kāi)發(fā)板上運(yùn)行。


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


ALU項(xiàng)目概述


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



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



在內(nèi)部,這些 CPLD 和 FPGA 組件包含可重新配置邏輯塊陣列,并封裝為獨(dú)立 IC,以便嵌入到您自己的設(shè)計(jì)中。制造商提供開(kāi)發(fā)板,用于使用其技術(shù)和軟件環(huán)境進(jìn)行學(xué)習(xí)、測(cè)試和實(shí)驗(yàn)。我的 CPLD 使用了開(kāi)發(fā)板。


什么是 ALU?


每個(gè)處理器的核心都有一個(gè)組合邏輯電路,它對(duì)整數(shù)二進(jìn)制數(shù)執(zhí)行算術(shù)和按位運(yùn)算,稱為算術(shù)邏輯單元。我們將在這個(gè)項(xiàng)目中構(gòu)建的電路是一個(gè) 8 位 ALU,它包含兩個(gè) 8 位操作數(shù)(輸入)、一個(gè) 8 位結(jié)果(輸出)和一個(gè) 4 位操作碼(輸入),該操作碼定義將執(zhí)行什么操作(圖3)



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


ALU 為學(xué)習(xí) VHDL 編碼和 CPLD 編程操作提供了一個(gè)極好的起點(diǎn)。完成此項(xiàng)目后,您可以輕松擴(kuò)展到更困難的應(yīng)用程序。


項(xiàng)目詳情和參考資料


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


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


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


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


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


當(dāng)我們運(yùn)行 Quartus 時(shí),我們需要做的第一件事是通過(guò)“New Project Wizard”建立一個(gè)新項(xiàng)目,該向?qū)Э梢栽凇癋ile -> New Project Wizard”下找到。然后,我們需要在名為“簡(jiǎn)介”的第一個(gè)屏幕上單擊“下一步”。


如圖 4 所示,在名為“目錄、名稱、頂級(jí)實(shí)體”的第二個(gè)屏幕上,我們需要選擇之前創(chuàng)建的文件夾作為工作目錄,并為當(dāng)前項(xiàng)目指定適當(dāng)?shù)拿Q。我將這個(gè)項(xiàng)目命名為“ALU”。



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



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



接下來(lái),我們需要在“EDA Tool Settings”屏幕上將“Verilog HDL”更改為“VHDL”,單擊“下一步”,并檢查“Summary”中的一切是否正確(圖7)。之后,我們可以單擊“完成”按鈕,我們的新項(xiàng)目將被創(chuàng)建。



該項(xiàng)目打開(kāi)后,我們需要在“項(xiàng)目導(dǎo)航器:層次結(jié)構(gòu)”窗口中單擊實(shí)體的名稱,然后按“CTRL+N”并選擇“VHDL 文件”來(lái)創(chuàng)建一個(gè)新的 VHDL 文件。


該文件打開(kāi)后,我們必須通過(guò)進(jìn)入“文件 -> 另存為”將其另存為實(shí)體的 VHDL 文件。當(dāng)所有這些完成后,我們就可以開(kāi)始為 ALU 編寫代碼了。


聲明 VHDL 庫(kù)


與所有編程語(yǔ)言一樣,我們需要在 VHDL 代碼頂部做的第一件事是聲明將在項(xiàng)目中使用的庫(kù)。


LIBRARY ieee;

USE ieee.std_logic_1164.ALL;

USE ieee.std_logic_unsigned.ALL;

USE ieee.std_logic_arith.ALL;


現(xiàn)在我們需要設(shè)計(jì)電路的架構(gòu)或行為。我們將使用三個(gè)輸入或端口A、B和Sel創(chuàng)建一個(gè)流程。


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


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


之后,我們可以結(jié)束“case”語(yǔ)句、流程和行為架構(gòu),并結(jié)束我們項(xiàng)目的代碼部分。


ARCHITECTURE behv OF alu IS

BEGIN

PROCESS (A, B, Sel)

BEGIN

CASE Sel IS

WHEN "0000" =>

RES <= "00000000"; -- no operation

WHEN "0001" =>

RES <= A + B; -- addition

WHEN "0010" =>

RES <= A + (NOT B) + 1; -- subtraction

WHEN "0011" =>

RES <= A + 1; -- add one to operand A

WHEN "0100" =>

RES <= A - 1; -- subtract one from operand A

WHEN "0101" =>

RES <= A(6 DOWNTO 0) & '0'; -- shift operand A to the left

WHEN "0110" =>

RES <= '0' & A(7 DOWNTO 1); -- shift operand A to the right

WHEN "0111" =>

RES <= NOT A; -- one's complement of operand A

WHEN "1000" =>

RES <= NOT A + 1; -- two's complement of operand A

WHEN "1001" =>

RES <= A AND B; -- logical and

WHEN "1010" =>

RES <= A OR B; -- logical or

WHEN "1011" =>

RES <= A NAND B; -- logical nand

WHEN "1100" =>

RES <= A NOR B; -- logical nor

WHEN "1101" =>

RES <= A XOR B; -- logical xor

WHEN "1110" =>

RES <= (NOT A) + (NOT B); -- random operation

WHEN "1111" =>

RES <= (A + B) AND (A OR B); -- another random operation

WHEN OTHERS =>

RES <= "00000000";

END CASE;

END PROCESS;

END behv;


在上面的代碼中,我包含了一些最常見(jiàn)的算術(shù)和邏輯運(yùn)算以及一些隨機(jī)運(yùn)算,并對(duì)它們各自的作用進(jìn)行了評(píng)論。在這里您可以替換并包含您想要的任意算術(shù)或邏輯運(yùn)算!


引腳映射


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


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


引腳規(guī)劃器工具包含:


  • 所用芯片(本例中為 EPM240)的直觀表示。

  • 描述每種引腳類型的引腳圖例。

  • 包含來(lái)自我們實(shí)體端口的每個(gè)單獨(dú)節(jié)點(diǎn)的表。在此表中,我們可以通過(guò)將每個(gè)節(jié)點(diǎn)寫到“位置”列的相應(yīng)行中,將其連接到專用引腳。

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



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


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


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



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



PCB電路圖


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



連接完所有內(nèi)容并為 Altera 板供電 5 V 后,我們可以通過(guò)在操作數(shù)端口上輸入數(shù)字并將操作模式切換到我們喜歡的任何操作來(lái)看到 ALU 開(kāi)始工作。LED 顯示結(jié)果,如上圖 1 所示。


ALU 項(xiàng)目的 BOM


表 2 包含該項(xiàng)目的材料清單。



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


如果您復(fù)制此項(xiàng)目,您可以輕松地將其他操作碼添加到 ALU 的 VHDL 操作中。您還可以修改電路設(shè)計(jì)以輸出和顯示狀態(tài)代碼。


本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉