基於BASYS2的VHDL跑馬燈程序

剛開始學習使用BASYS2板,自己的第一個VHDL程序就是一個跑馬燈,然後因爲這個程序是網上找的然後自己改的,測試完全可以運行,現寫上我對這個程序的理解,如果錯了還希望大家指正。

程序源代碼:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all; 

entity testdomo is
PORT(	clock : in std_logic;
	row:out std_logic_vector(0 to 7));
end testdomo;

architecture Behavioral of testdomo is
CONSTANT fp_clka:INTEGER:=6250000;   --時鐘頻率50MHz的1/8
SIGNAL a: INTEGER RANGE 0 TO 6250001;
signal saomiao :integer range 0 to 9;
SIGNAL clka: std_logic;

BEGIN
PROCESS (clock)                                      
BEGIN
 IF rising_edge(clock) THEN
  IF a<fp_clka then 
   a<=a+1;
   clka<=clka;
  ELSE 
   a<=0;
   clka<= NOT clka;  --clka產生一次跳變信號,
  end if;
 end if;
end process;

process(clka)        --clka作爲進程敏感信號
BEGIN  
IF rising_edge(clka) THEN
  saomiao<=saomiao+1;
  if saomiao=9 then 
   saomiao<=0;
  end if;
 case saomiao is 
     when 0 =>row<="10000000";
     when 1 =>row<="01000000";
  when 2 =>row<="00100000";
  when 3 =>row<="00010000";
  when 4 =>row<="00001000";
  when 5 =>row<="00000100";
  when 6 =>row<="00000010";
  when 7 =>row<="00000001";
  when 8 =>row<="00000000";
  when others =>row<="11111111";
 END CASE;
END IF;
end process;
end Behavioral;

此程序輸入端只有一個系統的時鐘信號,輸出端是8個LED。

process(clock)的功能是每1/4秒clka產生一次跳變信號,在a<fp_clka時,a不斷增大,但此時clka信號不變,只有在大於時,a置0,clka產生一次跳變信號。

process(clka)的功能就是處理clka跳變信號,產生跑馬燈效果,通過clka跳變信號激勵,信號saomiao數值不斷變化,然後根據不同的數值去點亮板子上的燈,其中1代表亮燈。

ucf文件:

NET "clock" LOC = "B8"; # Bank = 2, Signal name = UCLK
# Pin assignment for LEDs
NET "row<7>" LOC = "G1" ; # Bank = 3, Signal name = LD7
NET "row<6>" LOC = "P4" ; # Bank = 2, Signal name = LD6
NET "row<5>" LOC = "N4" ;  # Bank = 2, Signal name = LD5
NET "row<4>" LOC = "N5" ;  # Bank = 2, Signal name = LD4
NET "row<3>" LOC = "P6" ; # Bank = 2, Signal name = LD3
NET "row<2>" LOC = "P7" ; # Bank = 3, Signal name = LD2
NET "row<1>" LOC = "M11" ; # Bank = 2, Signal name = LD1
NET "row<0>" LOC = "M5" ;# Bank = 2, Signal name = LD0
Port聲明裏有時鐘CLK流水輸出LED,由於我們要把程序燒進板子裏,那麼我們就要通過ucf文件告訴板子,我這個CLK對應你板子上的哪個管腳。至於哪個管腳一般都是根據板子生產商所提供的手冊。


NET “row<0>"   LOC =“M5"  ;LOC = “M5”,說明我們的第一個LED燈對應的管腳是M5管腳。


至此,整個跑馬燈程序就完成了,試試通過ISE生成bit流下載到板子裏看看效果吧!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章