原创 FPGA实验二 LED灯闪烁

2010-2-9 00:38 3553 3 3 分类: FPGA/CPLD

 实验原理


对时钟进行分频,使占空比为50%,则只要使用一个计数器,在计数的前一半时间里,使输出电平为高电平,在计数的后一半时间里使输出的电平为低电平,这样分频出来的时钟信号即是占空比为50%的时钟信号。将分频后的时钟信号输出到接着LED灯的FPGA引脚上, LED灯就会闪烁起来。

 实验内容

       设计程序,使LED灯按一定频率闪烁。

实验中的管脚分配如表2.2所示。

2.2     管脚分配



实验符号

对应标号

管脚

LEDn[7]

D37

PIN_75

LEDn[6]

D36

PIN_74

LEDn[5]

D35

PIN_73

LEDn[4]

D34

PIN_72

LEDn[3]

D33

PIN_71

LEDn[2]

D32

PIN_70

LEDn[1]

D31

PIN_69

LEDn[0]

D30

PIN_65

clk

CLKIN

PIN_17

 实验电路

       LED灯电路原理图如图2.2所示。

 实验步骤

完成LED灯闪烁的步骤如下:

1步骤1~9参考实验2.1步骤的1~9

2编译通过后,选择File>New,在弹出的对话框中点击Other Files,选择Vector Waveform File,并点击OK,建立一个波形文件。如图2.2.1

 



3.点击File>Save,在弹出的对话框中点击OK即可。如图<?XML:NAMESPACE PREFIX = ST1 />2.2.2


点击看大图


点击看大图


点击看大图



4在波形文件中点击鼠标右键,选择Insert Node or Bus,在弹出的对话框中点击Node Finder,在新弹出的对话框中的Filter中选择Pinsall,然后点击List,这样在Nodes Founder区域就会出现先前VHDL文件中定义的输入、输出端口,然后再点击>>,选择OK即可,然后在Insert Node or Bus对话框中也选择OK。如图2.2.3<?XML:NAMESPACE PREFIX = O />


5对加入到波形文件中的输入端点,进行初始值设置(为了便于观察仿真结果,本实验在波形仿真时将VHDL程序中的时钟分频倍数改为了50,并取时钟信号的周期为1ns),然后点击Processing>Start Simulation,在弹出对话框中点击Yes,系统开始仿真。


6.仿真结束后,查看仿真结果是否符合实验要求。仿真结果如图2.2.4.


 



点击看大图



 


7仿真无误后,根据表2.2-1的引脚对照表,对试验中用到的LED及时钟进行管脚绑定。选择Assignments>Assign Pins,会出现管脚分配对话框,如图2.2.5所示。


8.首先选择对应的引脚,然后在location中输入VHDL设计中对应的端口名称引脚号(参照表2.2-1),回车即可。如图2.2.6所示。


9.重复步骤8,对所有的端口进行分配。


10.编译无误后,用下载电缆通过JTAG接口将对应的LED_shining.sof文件下载到FPGA中。


11.下载结束后,观察实验结果是否与自己的仿真结果相吻合。


2.2-1引脚对照表




实验符号


对应标号


管脚


clk


CLKIN


PIN_17


LEDn


D30


PIN_65


LED_off[6]


D37


PIN_75


LED_off[5]


D36


PIN_74


LED_off[4]


D35


PIN_73


LED_off[3]


D34


PIN_72


LED_off[2]


D33


PIN_71


LED_off[1]


D32


PIN_70


LED_off[0]


D31


PIN_69



点击看大图
 


  参考程序


------------------------------库说明----------------------------------


library ieee;                                                      --IEEE标准库


use ieee.std_logic_1164.all;               --调用库中的程序包


use ieee.std_logic_unsigned.all;


use ieee.std_logic_arith.all;


-----------------------------实体说明---------------------------------


entity LED_shining is                          --LED_shining 是实体名


port(


clk : in std_logic;


LEDn : out std_logic;


LED_off : out std_logic_vector(6 downto 0)


);                                                             --定义输入输出端口


 


end LED_shining;


-----------------------------结构体说明-------------------------------


architecture shining of LED_shining is       --shining 是结构体名


signal clk_div : std_logic;                                  --分频后的时钟信号


                                                                --周期为5000000/50000000=0.1s


begin


process(clk)


variable count : integer range 0 to 4999999;


begin


        if(clkevent and clk = 1) then


               if(count = 4999999) then


                      count := 0 ;


                      else count := count + 1 ;


                      if(count < 250000) then


                             clk_div <= 0 ;


                             else clk_div <= 1 ;


                      end if ;


               end if ;


        end if ;


end process ;


                            


LEDn <= clk_div ;                            --1LED灯闪烁周期为分频后


LED_off <= "1111111" ;           --的时钟信号的周期,同时关闭其他7LED   


end shining;

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
3
关闭 站长推荐上一条 /3 下一条