步驟1:您需要的內(nèi)容
Nexys開發(fā)板FPGA
Xilinx ISE
某種揚(yáng)聲器
用于將板連接到揚(yáng)聲器的輔助電纜,或其他布線設(shè)置
步驟2:聚集項(xiàng)目項(xiàng)
收集項(xiàng)目的所有必需項(xiàng)(例如,電路板,Xilinx,揚(yáng)聲器和輔助電纜)。如果尚未購(gòu)買nexys板,請(qǐng)先開始。這些可以直接通過Digilent或通過外部賣家(如Amazon)購(gòu)買。之后,請(qǐng)?jiān)L問www.xilinx.com下載Xilinx。最后,獲取指定的揚(yáng)聲器系統(tǒng)和輔助電纜。然后,熟悉VHDL并熟練使用Xilinx。這將確保以下步驟不會(huì)造成混亂。
步驟3:在Xilinx中創(chuàng)建項(xiàng)目
打開Xilinx,然后單擊新項(xiàng)目。屏幕打開后,
為項(xiàng)目命名,指定保存位置,并將頂級(jí)源類型設(shè)置為HDL。然后單擊下一步。然后指定給定板的所有詳細(xì)信息。這取決于您擁有的nexys板的版本。我們使用了nexys 2,因?yàn)樗亲畋阋说摹?nexys-2開發(fā)板的詳細(xì)信息如下:
評(píng)估開發(fā)板:無規(guī)格
產(chǎn)品類別:全部(或通用)
家族: Spartan 3E
設(shè)備:Nexys-2:XC3S500E
速度:-4
頂級(jí)源類型:HDL
綜合工具:XST(VHDL/Verilog)
首選語言:VHDL
然后單擊下一步。下一頁將顯示指定輸入和輸出的屏幕。這將設(shè)置第一部分以簡(jiǎn)化工作。首先給信號(hào)起一個(gè)名稱,并對(duì)其進(jìn)行相應(yīng)的輸入或輸出。信號(hào)如下:
a:輸入
b:輸入
c:輸入
d:輸入
e:in
f:in
g:in
clk:in
音頻輸出:out
然后單擊下一步。在下一個(gè)屏幕上,確保所有詳細(xì)信息正確無誤,然后單擊“完成”。這將打開新項(xiàng)目。
步驟4:VHDL背景
此步驟將使您對(duì)所有這些內(nèi)容有一些了解。 VHDL的不同部分實(shí)際上可以做到。為了創(chuàng)建作曲家,我們將需要指定實(shí)體,項(xiàng)目架構(gòu)和兩個(gè)單獨(dú)的流程塊。實(shí)體是輸入和輸出的基礎(chǔ),體系結(jié)構(gòu)將指定每個(gè)信號(hào)和那里的值,而流程塊將處理實(shí)際功能。
源文件頂部的實(shí)體聲明給出每個(gè)輸入和輸出的規(guī)范。在作曲家的情況下,它們是a,b,c等,然后是STD_LOGIC或STD_LOGIC_VECTOR。字母代表值的名稱,STD_LOGIC給出類型。 STD_LOGIC允許像變量一樣一次為該值分配一個(gè)值。 STD_LOGIC_VECTOR允許以總線形式分配多個(gè)值??偩€只是一組捆綁在一起的信號(hào)。但是,對(duì)于作曲家而言,僅使用了STD_LOGIC信號(hào)。
僅在實(shí)體聲明下方指定了體系結(jié)構(gòu)。這給出了源文件的“架構(gòu)”。該體系結(jié)構(gòu)包含前面所述的過程塊以及將用于將信號(hào)值從一個(gè)過程傳輸?shù)搅硪粋€(gè)過程的所有臨時(shí)信號(hào)。結(jié)束架構(gòu)后,文件也將結(jié)束。
然后可以創(chuàng)建流程塊,以實(shí)際使作曲家工作。可以在源文件中找到過程塊的示例。這些段包含帶有信號(hào)的靈敏度列表。其背后的想法是,當(dāng)靈敏度列表中的信號(hào)之一發(fā)生更改時(shí),將運(yùn)行整個(gè)過程塊。在作曲家的情況下,這使我們可以在切換按鈕時(shí)更新發(fā)送到揚(yáng)聲器的信號(hào)。
以上內(nèi)容為VHDL提供了一些背景知識(shí)。但是,強(qiáng)烈建議您先閱讀一些教程,然后再繼續(xù)。以上所有示例均位于源文件中。
步驟5:讓我們開始
在至此,您已經(jīng)準(zhǔn)備好開始作曲家的實(shí)際構(gòu)建。作曲者將需要一個(gè)實(shí)體,體系結(jié)構(gòu)和兩個(gè)流程塊。步驟2中的設(shè)置將為您填寫實(shí)體聲明。它看起來應(yīng)該像第一張圖片。
現(xiàn)在,有趣的部分開始了。首先,指定要在架構(gòu)中各流程塊之間使用的信號(hào)。以下是將要使用的信號(hào)。計(jì)數(shù)器將幫助進(jìn)行分頻,temp_out給我們一個(gè)信號(hào),告知我們可以保留一個(gè)臨時(shí)值,并且音符用于分配要播放的音符。這應(yīng)該看起來像第二張圖片。
在開始之后,我們將放置我們的流程塊。上面給出了信號(hào)和架構(gòu)。
步驟6:設(shè)計(jì)
下一步我們需要開始作曲家的實(shí)際設(shè)計(jì)。第一個(gè)處理塊將用作分頻器。過程聲明的示例如圖3所示。
我們現(xiàn)在將使用時(shí)鐘的50MHz信號(hào)。想法是遞增計(jì)數(shù)器直到達(dá)到閾值,然后在每次達(dá)到該值時(shí)切換temp_out。這將使我們較低的較慢的頻率代表音符的頻率。例如,音符A為440Hz。通過從50MHz除以440Hz,我們可以從時(shí)鐘獲得該頻率。然后我們?nèi)∵@個(gè)值,當(dāng)計(jì)數(shù)器達(dá)到這個(gè)值時(shí),我們切換temp_out,否則我們就簡(jiǎn)單地增加計(jì)數(shù)器。
將頻率分為每個(gè)給定的音符后,我們必須檢查音符的對(duì)應(yīng)開關(guān)是否被按下。這是通過檢查note的值來完成的。如果音符為“ 000”,則按下音符A的開關(guān)。如果音符為“ 010”,則按音符C,依此類推。
最后,我們需要確保音符只能在時(shí)鐘的上升沿播放。這是通過將其包含在檢查上升沿的if語句中來完成的。它應(yīng)該看起來像圖片4。
第7步:頻分
現(xiàn)在實(shí)現(xiàn)了分頻器。由于我們已經(jīng)列出了所有規(guī)范,因此剩下的只是復(fù)制和粘貼并涵蓋所有可能的條件。圖5中提供了設(shè)置了所有音符的整個(gè)分頻器。
請(qǐng)注意,當(dāng)音符為“ 111”時(shí),我們只需將計(jì)數(shù)器復(fù)位并輸出為0。這是因?yàn)樵摪鍍H演奏七個(gè)注釋,我們不希望任何不受支持的開關(guān)的非法值?,F(xiàn)在,我們現(xiàn)在需要存儲(chǔ)temp_out的值以用于揚(yáng)聲器。如圖6所示,這是通過將temp_out分配給音頻輸出來完成的。
這將允許我們保存從上一過程中獲得的頻率并實(shí)際使用它。
步驟8:流程語句
現(xiàn)在,我們繼續(xù)設(shè)計(jì)和實(shí)現(xiàn)第二個(gè)流程塊。第二個(gè)處理塊將處理獲取下一個(gè)狀態(tài)。為了簡(jiǎn)化,我們使用狀態(tài)來表示每個(gè)音符。此狀態(tài)機(jī)將允許我們?cè)谇袚Q開關(guān)時(shí)將其狀態(tài)設(shè)置為所需的每個(gè)音符。例如,當(dāng)按下第一個(gè)開關(guān)時(shí),便會(huì)選擇音符A并將其設(shè)置為下一個(gè)狀態(tài),這會(huì)將值分配給信號(hào)(來自體系結(jié)構(gòu)聲明的音符)。這將使我們能夠在要彈奏音符的第一個(gè)處理塊中進(jìn)行檢查。圖7顯示了帶有靈敏度列表的第二個(gè)過程塊的示例聲明。
接下來,我們指定所有可能的條件,分別按下每個(gè)開關(guān)。我們首先需要檢查是否沒有按下任何開關(guān)。如果沒有一個(gè)開關(guān),則將音符設(shè)置為“ 111”,否則當(dāng)按下一個(gè)開關(guān)時(shí),我們將更改其對(duì)應(yīng)的字母值。例如,當(dāng)按下第一個(gè)開關(guān)時(shí),信號(hào)a將獲得該值。然后在getns內(nèi),我們給分頻器分配要檢查的值。該流程塊使用多個(gè)if和elsif來說明不同的可能性。完成的過程框在圖8中。
注意我們?nèi)绾螜z查是否沒有先按任何音符。這將確保我們僅獲取有效的note值。除此之外,第二個(gè)else內(nèi)部的if和elsif可以確保在沒有切換任何受支持的開關(guān)時(shí),我們不會(huì)意外地為note分配一個(gè)除“ 111”以外的值。
步驟9:將所有內(nèi)容放在一起
至此,我們基本完成了。我們需要做的就是組裝所有VHDL并對(duì)其進(jìn)行合成。合成時(shí)應(yīng)該沒有錯(cuò)誤。此后,預(yù)期的源在圖9、10和11中。
現(xiàn)在,作曲家已經(jīng)完成。下一步是測(cè)試使用刺激以確保其確實(shí)起作用。由于這對(duì)于作曲家的工作并不重要,因此我們?cè)谶@里不解釋測(cè)試。我們的測(cè)試代碼隨該項(xiàng)目的源代碼一起提供。
步驟10:設(shè)置端口映射
快到了!現(xiàn)在,我們需要做的就是分配端口值,以便使作曲家能夠在nexys板上工作。單擊“提前計(jì)劃”即可完成。打開此應(yīng)用程序后,將出現(xiàn)一個(gè)界面,上面有一個(gè)怪異的面板。從那里,我們看到底部的框,其中包含實(shí)體值的端口映射。從這里開始,我們?yōu)槊總€(gè)實(shí)體在板上分配一個(gè)與其正確的開關(guān)相對(duì)應(yīng)的端口。之后,我們需要為揚(yáng)聲器的電線分配端口。完成此操作后,保存并退出?,F(xiàn)在我們可以再次進(jìn)行合成,然后單擊生成編程文件。此后,您需要將啟動(dòng)選項(xiàng)切換為JTAG Clock。通過單擊頂部的“進(jìn)程”,然后單擊“屬性”來完成此操作。在出現(xiàn)的窗口中,在啟動(dòng)選項(xiàng)下選擇JTAG Clock(它最初是CCLK)?,F(xiàn)在,退出該窗口并再次生成編程文件。
步驟11:對(duì)開發(fā)板進(jìn)行編程
現(xiàn)在,打開Digilent的Adept并連接您的開發(fā)板,確保板子打開。熟練的人員應(yīng)自動(dòng)識(shí)別該設(shè)備?,F(xiàn)在,在瀏覽窗口中選擇位文件。一旦選擇,點(diǎn)擊程序。現(xiàn)在,該板已被編程。下一步是連接揚(yáng)聲器。這是通過將導(dǎo)線連接到在“預(yù)先計(jì)劃”中選擇的每個(gè)端口來完成的。然后您就完成了!
步驟12:玩得開心!
與作曲家見面,讓演講者演奏不同的音符。玩得開心!
-
FPGA
+關(guān)注
關(guān)注
1645文章
22040瀏覽量
618180
發(fā)布評(píng)論請(qǐng)先 登錄
【開源分享】:開源小巧的FPGA開發(fā)板——Icepi Zero
【國(guó)產(chǎn)FPGA入學(xué)必備】國(guó)產(chǎn)FPGA權(quán)威設(shè)計(jì)指南+配套FPGA圖像視頻教程
基于FPGA的圖像邊緣檢測(cè)設(shè)計(jì)

EE-218:為ADSP-TS201 TigerSHARC處理器編寫高效浮點(diǎn)FFT

大多數(shù)FPGA的程序存儲(chǔ)器(FLASH)為什么都放在外面呢?FPGA的主要應(yīng)用

Verilog 測(cè)試平臺(tái)設(shè)計(jì)方法 Verilog FPGA開發(fā)指南
FPGA 與微控制器優(yōu)缺點(diǎn)比較
Verilog vhdl fpga
FPGA基礎(chǔ)知識(shí)及設(shè)計(jì)和執(zhí)行FPGA應(yīng)用所需的工具

使用FPGA構(gòu)建ADAS系統(tǒng)簡(jiǎn)易過程
基于FPGA實(shí)現(xiàn)數(shù)碼管顯示

評(píng)論