FPGA开发(三) 按键功能的实现

        该工程主要是实现按键的控制,结合上一次我们的流水灯,我打算实现以下功能:利用开发板上的四个按键,依次控制四个LED灯,即按下第一个按键,第一个LED点亮,依次类推。

        首先我们打开Quartus,新建一个工程名为 key_test,建立工程参见上一篇文章,这里不一一叙述。我们新建一个VHDL文件。我们分析一下,本次程序输入为按键的状态,输出为LED的状态,由于在代码中只能付给寄存器类型,只需要在每一个时钟的上升沿,保存按键的状态到一个寄存器,之后把该寄存器的值输出即可。因此,我们声明一个寄存器类型的变量,在下降沿改变该值,之后输出即可,我们写出的代码如下。

`timescale 1ns/1ps//仿真时间单位1ns 时间精度1ps
module key_test
(
		input 		clk,
		input [3:0] key,
		output [3:0] led
);

reg[3:0]  led_r;
always@(posedge clk)
begin
	led_r<=~key;
end


assign led = led_r;

endmodule

         目前的代码不具有可视性,我们在软件中选择Tools->Netlist Viewers->RTL Viewer可以看到目前的状态如下所示,此时输入按键信号先取反,之后输入到D触发器,之后输出led状态输出。如下图所示。

       

         我们还可以在内部多加一级寄存器,在第一个寄存器输出之后,进入第二个寄存器,之后将结果输出,对应该思路,我们写出的代码如下。

`timescale 1ns/1ps//仿真时间单位1ns 时间精度1ps
module key_test
(
		input 		clk,
		input [3:0] key,
		output [3:0] led
);

reg[3:0]  led_r;
reg[3:0]  led_r1;
always@(posedge clk)
begin
	led_r<=~key;
end

always@(posedge clk)
begin
	led_r1<=led_r;
end

assign led = led_r1;

endmodule

        此时我们打开上述的RTL Viewer可以看到,上述输出的信号会再次经过一个D触发器之后驱动LED,如下图所示。

 本实验的工程文件下载链接:https://download.csdn.net/download/qq_34020487/12244561

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页