資料介紹
描述
介紹
VHDL 一直讓我很感興趣,剛從 Digilent 收到我的新 Arty S7-25 FPGA 板,我有機(jī)會(huì)嘗試一下!我想為我的第一個(gè)項(xiàng)目使用 LED 做一些事情,所以我制作了一些不同的模式,并在代碼中將它們綁定在一起,以便它們一個(gè)接一個(gè)地顯示。
作為 VHDL 的新手,代碼可能達(dá)不到標(biāo)準(zhǔn),但我會(huì)盡力解釋,我希望你也能得到這些很酷的模式來(lái)點(diǎn)亮你的 FPGA 板!
我們將使用板上的四個(gè)標(biāo)準(zhǔn) LED(不是 RGB LED)

代碼
代碼的總體思路是讓不同的計(jì)數(shù)器控制具有使能信號(hào)的模式的長(zhǎng)度。這些使能信號(hào)由狀態(tài)機(jī)驅(qū)動(dòng)。另一個(gè)process模塊對(duì)啟用信號(hào)進(jìn)行解碼,并確定 LED 上應(yīng)顯示的模式。
可以在此處找到 github 存儲(chǔ)庫(kù)。查看“src”文件夾以找到主要實(shí)體。
首先,我有一些信號(hào)聲明
-- enables for different patterns/counters
signal r_patt1_en : std_logic := '1';
signal r_patt2_en : std_logic := '0';
signal r_patt3_en : std_logic := '0';
signal r_patt4_en : std_logic := '0';
-- pattern counters
signal r_patt1_cntr : integer range 0 to 1e6 := 0;
signal r_patt1_light_LED : integer range 0 to 4 := 0;
signal r_patt2_cntr : integer range 0 to 2e6 := 0;
signal r_patt3_cntr : integer range 0 to 2e6 := 0;
signal r_patt3_alt_cntr : integer range 0 to 5 := 0;
signal r_patt4_duty : integer range 0 to 1e5 := 0;
signal r_patt4_cntr : integer range 0 to 1e5 := 0;
signal r_patt4_incr_duty : std_logic := '0';
上述代碼的頂部包含每個(gè)模式的啟用信號(hào)。在任何給定時(shí)間,只有一個(gè)可以處于活動(dòng)狀態(tài)。這些信號(hào)有助于確定 LED 應(yīng)遵循的模式,以及啟用特定于該模式的計(jì)數(shù)器。
這些是其他一些信號(hào)
-- indicates if pattern should be changed
signal r_change_pattern : std_logic := '0';
signal r_clk_cntr : integer range 0 to 36e6 := 0;
-- FSM
type t_state is (PATT1, PATT2, PATT3, PATT4);
signal STATE : t_state;
實(shí)體需要知道何時(shí)改變模式(在這種情況下,每 3 秒一次,或何時(shí)r_clk_cntr翻轉(zhuǎn)),因此r_change_pattern被創(chuàng)建。此外,狀態(tài)機(jī)的狀態(tài)在此處聲明。
讓我們進(jìn)入其中一種模式。
模式 1 一個(gè)接一個(gè)地切換每個(gè) LED,就像一個(gè)帶有單個(gè) 1 的移位寄存器,其余的都是零(希望這是有道理的:p)。“on” LED 保持亮起 83.333 ms(1/12 秒很容易使用 12 MHz 系統(tǒng)時(shí)鐘實(shí)現(xiàn)),然后每 83.333 ms 打開(kāi)一個(gè)新 LED。我為這些計(jì)數(shù)器創(chuàng)建了兩個(gè)單獨(dú)的進(jìn)程。
-- pattern 1 counter keeps each LED on in pattern 1 for 83.333 ms
PATT1_CNTR_PROC : process(i_clk)
begin
if rising_edge(i_clk) then
if r_patt1_en = '0' then
r_patt1_cntr <= 0;
else
if r_patt1_cntr < 1e6 then
r_patt1_cntr <= r_patt1_cntr + 1;
else
r_patt1_cntr <= 0;
end if;
end if;
end if;
end process;
對(duì)于 12 MHz 系統(tǒng)時(shí)鐘,1/12 秒(或 100 萬(wàn)個(gè) clk 周期計(jì)數(shù))是使用時(shí)間的簡(jiǎn)單度量。r_patt1_cntr在翻轉(zhuǎn)到 0 之前計(jì)數(shù)到這個(gè)數(shù)字,導(dǎo)致 1/12 秒或 83.333 毫秒。
-- pattern 1 alt counter signals when to switch LEDs every 83.333 ms
PATT1_ALT_CNTR_PROC : process(i_clk)
begin
if rising_edge(i_clk) then
if r_patt1_en = '0' then
r_patt1_light_LED <= 0;
else
if r_patt1_cntr = 1e6 then
if r_patt1_light_LED < 4 then
r_patt1_light_LED <= r_patt1_light_LED + 1;
else
r_patt1_light_LED <= 0;
end if;
end if;
end if;
end if;
end process;
PATT1_ALT_CNTR_PROC監(jiān)視r_patt1_cntr并查找 1e6 的最大值。一旦完成,r_patt1_light_LED就會(huì)增加。這將確定哪個(gè) LED 亮起。
在代碼的更下方,我們看到PATT_DECODE_PROC.這個(gè)過(guò)程(如下)決定了在模式啟用時(shí)應(yīng)該發(fā)生什么。
PATT_DECODE_PROC : process(i_clk)
variable r_patt_en : std_logic_vector(3 downto 0);
begin
if rising_edge(i_clk) then
r_patt_en := r_patt1_en & r_patt2_en & r_patt3_en & r_patt4_en; -- cnct into vect
if r_patt_en = "1000" then -- blink LEDS in circle
case r_patt1_light_LED is
when 0 =>
r_LEDs <= "0001";
when 1 =>
r_LEDs <= "0010";
when 2 =>
r_LEDs <= "0100";
when 3 =>
r_LEDs <= "1000";
when 4 =>
r_LEDs <= "0000";
end case;
首先,所有不同的模式使能連接成一個(gè)向量 ( r_patt_en) 以便于閱讀。然后,對(duì)此進(jìn)行檢查。如果r_patt_en = "1000", 意思r_patt1_en是激活的,模式 1 將顯示在 LED 上。但是,在模式 1 期間會(huì)發(fā)生什么?
還記得PATT1_ALT_CNTR_PROC嗎?該過(guò)程增加了一個(gè)名為 的信號(hào)r_patt1_light_LED,該信號(hào)由PATT_DECODE_PROC(上面)使用 case 語(yǔ)句讀取,并點(diǎn)亮與 的值相對(duì)應(yīng)的每個(gè) LED r_patt1_light_LED。
其余模式以這種方式編碼,帶有計(jì)數(shù)器和使能,然后中的 case 語(yǔ)句PATT_DECODE_PROC點(diǎn)亮 LED。除了上面的示例模式之外,還有一個(gè)切換模式、一個(gè)心跳模式和一個(gè)使用 PWM 的調(diào)光模式。
模擬
github repo 上的“sim”文件中有一個(gè)測(cè)試臺(tái)。如果您選擇運(yùn)行 sim,只需知道它可能需要大約 8 分鐘(取決于您的機(jī)器)。每個(gè)模式顯示 3 秒,因此最短模擬時(shí)間應(yīng)該是 12 秒才能看到所有 4 個(gè)模式。
這是幾分鐘后我的 sim 卡的樣子:

您可以清楚地看到第一個(gè)模式的類似移位寄存器的行為,以及心跳模式。最后的PWM調(diào)光模式只能放大查看。
構(gòu)建項(xiàng)目
打開(kāi) Vivado 并創(chuàng)建一個(gè)項(xiàng)目。出現(xiàn)提示時(shí),從“Boards”菜單中選擇“Arty S7-25”。

如果您沒(méi)有看到這個(gè),請(qǐng)使用此處找到的 Digilent 更新您的電路板文件。
從 github repo 添加源文件、sim 文件和約束文件,并生成比特流。
對(duì)您的電路板進(jìn)行編程,您應(yīng)該會(huì)在 4 個(gè) LED 上看到一些整齊的圖案:)
結(jié)論
感謝您關(guān)注我的第一個(gè) VHDL/Arty S7 項(xiàng)目!請(qǐng)修改代碼以創(chuàng)建您自己的模式!在評(píng)論中發(fā)布任何新模式或問(wèn)題。我想看看你創(chuàng)造了什么:)
?
- 高通 S7 和S7 Pro 音頻芯片
- 基于Digilent Arty S7加速計(jì)的Windows鼠標(biāo)
- SIMATIC NET OPC服務(wù)器與PLC的S7連接簡(jiǎn)介 1次下載
- 西門子S7程序軟件下載 24次下載
- 通過(guò)MPI建立OPC服務(wù)器與S7-200 PLC集成口的S7連接 5次下載
- 西門子的SIMATIC S7 STEP7 V5.0使用手冊(cè) 37次下載
- S7系列PLC上位機(jī)通信及PRODAVE軟件包在上位機(jī)中的使用資料說(shuō)明 31次下載
- 西門子s7-300和s7-400集成PN口的s7通信 14次下載
- 比亞迪S7電路圖 121次下載
- S7通訊的功能及特點(diǎn) 19次下載
- S7 路由功能說(shuō)明介紹 9次下載
- 基于S7-1500的S7通信編程 39次下載
- 西門子S7-400 工業(yè)軟件 S7 F FH Systems組態(tài) 17次下載
- Arty Board Artix-7 FPGA開(kāi)源創(chuàng)客開(kāi)發(fā)板用戶手冊(cè) 207次下載
- SIMATIC S7系統(tǒng)概述
- 西門子S7協(xié)議與TCP協(xié)議的區(qū)別 8.7k次閱讀
- S7-1500之間S7通信實(shí)例 4.2k次閱讀
- 西門子S7-1500 之間 S7 通信 7.3k次閱讀
- 西門子支持S7子網(wǎng)路由功能的模塊有哪些? 2k次閱讀
- S7-1200 CPU與S7-200 SMART S7通信教程 9k次閱讀
- S7-1200 CPU與S7-200 SMART S7通信指南 4.5k次閱讀
- 如何在WinCC上顯示S7 CPU的運(yùn)行模式 1.6k次閱讀
- S7-400基于PROFIBUS總線的S7單邊通信 2.7k次閱讀
- S7-1500和S7-1500之間S7通信 4.5k次閱讀
- S7-400基于PROFIBUS總線的S7單邊通信的組態(tài)步驟 4.7k次閱讀
- digilentSpartan-7開(kāi)源創(chuàng)客開(kāi)發(fā)板介紹 4.2k次閱讀
- digilent Arty A7-100 FPGA開(kāi)源創(chuàng)客開(kāi)發(fā)板介紹 7.4k次閱讀
- digilent Cmod S7: Spartan-7 FPGA 介紹 3.8k次閱讀
- S7-1200和S7-1200進(jìn)行S7通信的詳細(xì)資料說(shuō)明 3.1w次閱讀
- 三星S7和三星S6的區(qū)別對(duì)比 1.7w次閱讀
下載排行
本周
- 1矽力杰 Silergy SY7215A 同步升壓調(diào)節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費(fèi)
- 2HT81696H 內(nèi)置升壓的30W立體聲D類音頻功放數(shù)據(jù)手冊(cè)
- 1.21 MB | 1次下載 | 免費(fèi)
- 3HTA6863 3W超低噪聲超低功耗單聲道D類音頻功率放大器數(shù)據(jù)手冊(cè)
- 0.87 MB | 次下載 | 免費(fèi)
- 4南芯 Southchip SC8802C 充電控制器 規(guī)格書 Datasheet 佰祥電子
- 88.16 KB | 次下載 | 免費(fèi)
- 5矽力杰 Silergy SY7065 同步升壓轉(zhuǎn)換器 規(guī)格書 Datasheet 佰祥電子
- 910.67 KB | 次下載 | 免費(fèi)
- 6矽力杰 Silergy SY7066 同步升壓轉(zhuǎn)換器 規(guī)格書 Datasheet 佰祥電子
- 989.14 KB | 次下載 | 免費(fèi)
- 7WD6208A產(chǎn)品規(guī)格書
- 631.24 KB | 次下載 | 免費(fèi)
- 8NB685 26 V,12 A,低靜態(tài)電流,大電流 同步降壓變換器數(shù)據(jù)手冊(cè)
- 1.64 MB | 次下載 | 2 積分
本月
- 1EMC PCB設(shè)計(jì)總結(jié)
- 0.33 MB | 12次下載 | 免費(fèi)
- 2PD取電芯片 ECP5702規(guī)格書
- 0.88 MB | 5次下載 | 免費(fèi)
- 3矽力杰 Silergy SY7215A 同步升壓調(diào)節(jié)器 規(guī)格書 Datasheet 佰祥電子
- 1.12 MB | 5次下載 | 免費(fèi)
- 4氮化鎵GaN FET/GaN HEMT 功率驅(qū)動(dòng)電路選型表
- 0.10 MB | 3次下載 | 免費(fèi)
- 5PD取電芯片,可取5/9/12/15/20V電壓ECP5702數(shù)據(jù)手冊(cè)
- 0.88 MB | 3次下載 | 免費(fèi)
- 6SY50655 用于高輸入電壓應(yīng)用的偽固定頻率SSR反激式穩(wěn)壓器英文資料
- 1.01 MB | 3次下載 | 免費(fèi)
- 7怎么為半導(dǎo)體測(cè)試儀選擇精密放大器
- 0.65 MB | 2次下載 | 免費(fèi)
- 8SY52341 次級(jí)側(cè)同步整流英文手冊(cè)
- 0.94 MB | 2次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開(kāi)源硬件-PMP21529.1-4 開(kāi)關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233095次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191469次下載 | 10 積分
- 5十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183360次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81606次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73832次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問(wèn)
發(fā)資料
發(fā)視頻
上傳資料賺積分
評(píng)論