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

EE-218:為ADSP-TS201 TigerSHARC處理器編寫高效浮點FFT

大多數FPGA的程序存儲器(FLASH)為什么都放在外面呢?FPGA的主要應用

評論