FPGA控制LED流水灯

FPGA实验二:LED流水灯

##一、实验目的1、学习LED闪烁原理;2、学习Nexys4-DDR处理器控制LED的闪烁;3、学习如何实现分频。 二、实验要求1、基本:编写单个LED闪烁的代码并下载至FPGA,观察实验现象(这里注意:由于引脚时钟是100Mhz,所以要实现1s闪烁需要计数器,否则频率太高肉眼无法观察)。2、扩展:在Vivado中编写verilog代码,通过控制两个拨码开关,实现16个LED的循环闪烁,其中闪烁方式至少有两种以上,闪烁的频率至少有两种。(LED端口为1亮,为0灭;拨码开关往下为0,往上为1)。 三、实验仪器PC 机一台, WinXP/Win7 操作系统;Nexy4-DDR处理器开发与应用实验平台;USB串口线。 四、实验原理1、LED灯与拨码开关的原理图

一、实验目的

1、学习LED闪烁原理;
2、学习Nexys4-DDR处理器控制LED的闪烁;
3、学习如何实现分频。

二、实验要求

1、基本:编写单个LED闪烁的代码并下载至FPGA,观察实验现象(这里注意:由于引脚时钟是100Mhz,所以要实现1s闪烁需要计数器,否则频率太高肉眼无法观察)。
2、扩展:在Vivado中编写verilog代码,通过控制两个拨码开关,实现16个LED的循环闪烁,其中闪烁方式至少有两种以上,闪烁的频率至少有两种。(LED端口为1亮,为0灭;拨码开关往下为0,往上为1)。

三、实验仪器

实验仪器PC 机一台, WinXP/Win7 操作系统;Nexy4-DDR处理器开发与应用实验平台;USB串口线。

四、实验原理

1、LED灯与拨码开关的原理图

FPGA控制LED流水灯_第1张图片
2、内容(示例):功能程序的编写
FPGA控制LED流水灯_第2张图片
3、内容(示例):约束文件的编写

FPGA控制LED流水灯_第3张图片

五、主要内容

基础实验:根据实验步骤逐步进行,基本:编写单个LED闪烁的代码并下载至FPGA,观察实验现象(这里注意:由于引脚时钟是100Mhz,所以要实现1s闪烁需要计数器,否则频率太高肉眼无法观察),结果见实验结果部分图片。
拓展实验:用到的代码见实验结果部分图,在Vivado中编写verilog代码,通过控制两个拨码开关,实现16个LED的循环闪烁,其中闪烁方式至少有两种以上,闪烁的频率至少有两种。(LED端口为1亮,为0灭;拨码开关往下为0,往上为1)。

六、代码

基础部分代码:

	module led1(clk,rst,ledout);    
	input clk;    
	input rst;    
	output ledout;    
	reg [26:0] count;    
	reg led;    
	assign ledout=led;    
	always@(posedge clk or negedge rst)    
	begin       
	 if(rst)        
	  begin        
	  count<=0;        
	  led<=0;       
	   end       
	   else       
	    begin       
	     count<=count+1;        
	     if(count==27'b101111101011110000100000000)       
	      begin        
	      led<=!led;        
	      count<=0;       
	       end        
	       end        
	       end
	       Endmodule

拓展部分代码:

module project_12(clk,rst,ledout,sw0,sw1);    
input clk;   
 input rst;    
 input sw0;    
 input sw1;    
 output [15:0] ledout;   
  reg [26:0] count;    
  reg [15:0] led;    
  assign ledout=led;    
  always@(posedge clk or negedge rst )    
  begin         
  if(rst)            
  begin             
  count<=0;            
   led<=1;              
   end        
    else            
     begin                
      if(sw0)                  
      begin                     
      count<=count+1;                  
        if(count==27'b101111101011110000100000000)                         
        begin                         
        led<=led<<1;                         
        count<=0;                         
        end                    
        if(led==16'b1000000000000000)                          
        begin                          
        count<=count+1;     
        if(count==27'b101111101011110000100000000)                              
        begin                             
         led<=16'b0000000000000001;                                 c
         ount<=0;                                
         end                             
         end                    
          end                     
          if(sw1)                     
          begin                     
          count<=count+1;                    
           if(count==27'b101111101011110000100000000)                          
           begin                    
            led<=(led<<1)+1;                     
            count<=0;                            
            end    
            if(led==16'b1111111111111111)     
             begin    count<=count+1;    
             if(count==27'b101111101011110000100000000)    
             begin    
             led=16'b0000000000000001;    
             count<=0;    
             end        
             end      
             end     
              end                          
              end  
              endmodule

你可能感兴趣的:(FPGA控制LED流水灯)