基于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流下载到板子里看看效果吧!


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