计算机组成-Verilog流水灯实验

综述

基本上计算机专业应该都玩过的实验。真的很有意思,不过当时划了水。不过当时是和一个伙伴一起做的,我们还额外添加了反转功能等。

原理

LED流水灯原理
让二极管形成流水灯,即先点亮一个LED灯,等待一小段时间后熄灭;再让第二个LED灯点亮,过一小段时间后再熄灭;以此类推,当最后一个LED灯点亮后,过一小段时间后熄灭,然后再点亮第一个LED灯,如此循环。
在本文中,我们在实现了流水灯的基础上,还拓展实现了可以实时反向,双向置位的双向流水灯。

实验任务

设计LED流水灯控制模块,模块有2输入clk和ret,8输出LED(1-8),其中clk为接入时钟,ret为复位,当ret为0时,无流水效果。8个LED灯依次顺序点亮,产生流水效果,相邻LED灯发光时间间隔大约为0.5s,人眼可以明显感知到这个间隔。我们这里的间隔可以通过脉冲直接控制。
计算机组成-Verilog流水灯实验

关于Verilog

计算机组成-Verilog流水灯实验
计算机组成-Verilog流水灯实验
计算机组成-Verilog流水灯实验
计算机组成-Verilog流水灯实验

编程实现

首先使用建立Verilog程序编写文件,然后写入代码:
注意项目名必须和我们第一个module一致。我们的项目名为led所以声明module为led;

module led (       
        input wire Clock,       
   	input wire RESET_N,   
   	input wire RESET_N2,   
   	input wire direction,
   	output reg [7:0]  LED    
   	);
   	reg [32:0]  cnt;
   	always @(posedge Clock )
   	begin    
   	if (RESET_N ==1)
   		begin
      	cnt <= 0 ;
   		LED <= 8'b00000001;
   		end
   	else if (RESET_N2==1)
   	   begin
   		cnt <= 0 ;
   		LED <= 8'b10000000;
   		end
   	else if (cnt == 25000000) 
   		begin 
   			if(direction==1) 
   			begin
   				if(LED==8'b00000001) LED <= 8'b10000000;
   				else LED <= LED>>1'b1;
   			end
   			else
   			begin
   				if(LED==8'b10000000) LED <= 8'b00000001;
   				else LED <= LED<<1'b1;
   			end
   			cnt <=0 ;
   		end   
   	else          
   		cnt <= cnt+1;
   	end
   endmodule

解析

计算机组成-Verilog流水灯实验
计算机组成-Verilog流水灯实验

最终效果

计算机组成-Verilog流水灯实验

引脚设置

计算机组成-Verilog流水灯实验

按键设置计算机组成-Verilog流水灯实验