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