資料介紹
描述
介紹
VHDL 一直讓我很感興趣,剛從 Digilent 收到我的新 Arty S7-25 FPGA 板,我有機(jī)會嘗試一下!我想為我的第一個項(xiàng)目使用 LED 做一些事情,所以我制作了一些不同的模式,并在代碼中將它們綁定在一起,以便它們一個接一個地顯示。
作為 VHDL 的新手,代碼可能達(dá)不到標(biāo)準(zhǔn),但我會盡力解釋,我希望你也能得到這些很酷的模式來點(diǎn)亮你的 FPGA 板!
我們將使用板上的四個標(biāo)準(zhǔn) LED(不是 RGB LED)
代碼
代碼的總體思路是讓不同的計(jì)數(shù)器控制具有使能信號的模式的長度。這些使能信號由狀態(tài)機(jī)驅(qū)動。另一個process
模塊對啟用信號進(jìn)行解碼,并確定 LED 上應(yīng)顯示的模式。
可以在此處找到 github 存儲庫。查看“src”文件夾以找到主要實(shí)體。
首先,我有一些信號聲明
-- 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';
上述代碼的頂部包含每個模式的啟用信號。在任何給定時間,只有一個可以處于活動狀態(tài)。這些信號有助于確定 LED 應(yīng)遵循的模式,以及啟用特定于該模式的計(jì)數(shù)器。
這些是其他一些信號
-- 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í)體需要知道何時改變模式(在這種情況下,每 3 秒一次,或何時r_clk_cntr
翻轉(zhuǎn)),因此r_change_pattern
被創(chuàng)建。此外,狀態(tài)機(jī)的狀態(tài)在此處聲明。
讓我們進(jìn)入其中一種模式。
模式 1 一個接一個地切換每個 LED,就像一個帶有單個 1 的移位寄存器,其余的都是零(希望這是有道理的:p)。“on” LED 保持亮起 83.333 ms(1/12 秒很容易使用 12 MHz 系統(tǒng)時鐘實(shí)現(xiàn)),然后每 83.333 ms 打開一個新 LED。我為這些計(jì)數(shù)器創(chuàng)建了兩個單獨(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;
對于 12 MHz 系統(tǒng)時鐘,1/12 秒(或 100 萬個 clk 周期計(jì)數(shù))是使用時間的簡單度量。r_patt1_cntr
在翻轉(zhuǎn)到 0 之前計(jì)數(shù)到這個數(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
就會增加。這將確定哪個 LED 亮起。
在代碼的更下方,我們看到PATT_DECODE_PROC.
這個過程(如下)決定了在模式啟用時應(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;
首先,所有不同的模式使能連接成一個向量 ( r_patt_en
) 以便于閱讀。然后,對此進(jìn)行檢查。如果r_patt_en = "1000"
, 意思r_patt1_en
是激活的,模式 1 將顯示在 LED 上。但是,在模式 1 期間會發(fā)生什么?
還記得PATT1_ALT_CNTR_PROC
嗎?該過程增加了一個名為 的信號r_patt1_light_LED
,該信號由PATT_DECODE_PROC
(上面)使用 case 語句讀取,并點(diǎn)亮與 的值相對應(yīng)的每個 LED r_patt1_light_LED
。
其余模式以這種方式編碼,帶有計(jì)數(shù)器和使能,然后中的 case 語句PATT_DECODE_PROC
點(diǎn)亮 LED。除了上面的示例模式之外,還有一個切換模式、一個心跳模式和一個使用 PWM 的調(diào)光模式。
模擬
github repo 上的“sim”文件中有一個測試臺。如果您選擇運(yùn)行 sim,只需知道它可能需要大約 8 分鐘(取決于您的機(jī)器)。每個模式顯示 3 秒,因此最短模擬時間應(yīng)該是 12 秒才能看到所有 4 個模式。
這是幾分鐘后我的 sim 卡的樣子:
您可以清楚地看到第一個模式的類似移位寄存器的行為,以及心跳模式。最后的PWM調(diào)光模式只能放大查看。
構(gòu)建項(xiàng)目
打開 Vivado 并創(chuàng)建一個項(xiàng)目。出現(xiàn)提示時,從“Boards”菜單中選擇“Arty S7-25”。
如果您沒有看到這個,請使用此處找到的 Digilent 更新您的電路板文件。
從 github repo 添加源文件、sim 文件和約束文件,并生成比特流。
對您的電路板進(jìn)行編程,您應(yīng)該會在 4 個 LED 上看到一些整齊的圖案:)
結(jié)論
感謝您關(guān)注我的第一個 VHDL/Arty S7 項(xiàng)目!請修改代碼以創(chuàng)建您自己的模式!在評論中發(fā)布任何新模式或問題。我想看看你創(chuàng)造了什么:)
?
- 高通 S7 和S7 Pro 音頻芯片
- 基于Digilent Arty S7加速計(jì)的Windows鼠標(biāo)
- SIMATIC NET OPC服務(wù)器與PLC的S7連接簡介 1次下載
- 西門子S7程序軟件下載 23次下載
- 通過MPI建立OPC服務(wù)器與S7-200 PLC集成口的S7連接 5次下載
- 西門子的SIMATIC S7 STEP7 V5.0使用手冊 37次下載
- S7系列PLC上位機(jī)通信及PRODAVE軟件包在上位機(jī)中的使用資料說明 31次下載
- 西門子s7-300和s7-400集成PN口的s7通信 14次下載
- 比亞迪S7電路圖 120次下載
- S7通訊的功能及特點(diǎn) 19次下載
- S7 路由功能說明介紹 9次下載
- 基于S7-1500的S7通信編程 39次下載
- 西門子S7-400 工業(yè)軟件 S7 F FH Systems組態(tài) 17次下載
- Arty Board Artix-7 FPGA開源創(chuàng)客開發(fā)板用戶手冊 205次下載
- SIMATIC S7系統(tǒng)概述
- 西門子S7協(xié)議與TCP協(xié)議的區(qū)別 1851次閱讀
- S7-1500之間S7通信實(shí)例 2883次閱讀
- 西門子S7-1500 之間 S7 通信 5342次閱讀
- 西門子支持S7子網(wǎng)路由功能的模塊有哪些? 1046次閱讀
- S7-1200 CPU與S7-200 SMART S7通信教程 5608次閱讀
- S7-1200 CPU與S7-200 SMART S7通信指南 2816次閱讀
- 如何在WinCC上顯示S7 CPU的運(yùn)行模式 917次閱讀
- S7-400基于PROFIBUS總線的S7單邊通信 1425次閱讀
- S7-1500和S7-1500之間S7通信 2629次閱讀
- S7-400基于PROFIBUS總線的S7單邊通信的組態(tài)步驟 3289次閱讀
- digilentSpartan-7開源創(chuàng)客開發(fā)板介紹 3125次閱讀
- digilent Arty A7-100 FPGA開源創(chuàng)客開發(fā)板介紹 6335次閱讀
- digilent Cmod S7: Spartan-7 FPGA 介紹 2991次閱讀
- S7-1200和S7-1200進(jìn)行S7通信的詳細(xì)資料說明 2.8w次閱讀
- 三星S7和三星S6的區(qū)別對比 1.5w次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊免費(fèi)下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動電路設(shè)計(jì)》 溫德爾著
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評論
查看更多