TA的每日心情 | 郁闷 2017-12-4 18:33 |
---|
签到天数: 94 天 连续签到: 1 天 [LV.6]常住居民II
|
折腾了这么久,从今天开始好好玩玩FPGA。
不管是单片机,DSP,还是高大上的FPGA,大多数实验都是从点灯开始。那么今天先从按键点灯开始讲。
功能实现:
按下板卡上的KEY1,KEY2,点亮或者熄灭对应的LD1,LD2。
功能分析:
首先分析一下板卡上按键与LED的电路:
可见,均为上拉操作。在按键未按下时,KEY1/KEY2输出高电平,当按键按下时,KEY1/KEY2输出低电平。同理,在LED1/LED2电平为高时,LED熄灭,当LED1/LED2电平为低电平时,LED点亮。
既然需要利用按键控制LED灯,那么按键的动作必须作为一个触发事件。当按键按下或者弹起时,事件触发。(本文选择按下作为触发条件,即信号的下降沿。)当下降沿产生是,对应的LED灯反转状态。
代码实现如下:
module btn_led_module( input clk, input wire [1:0]btn, output wire [1:0]led); //defination of the register reg [1:0]btn_reg0; reg [1:0]btn_reg1; wire [1:0]btn_neg; reg [1:0]led_reg; //get the negedge of btn[1:0] always@(posedge clk)begin btn_reg0 <= btn; btn_reg1 <= btn_reg0; end assign btn_neg = btn_reg1 & (~btn_reg0); //light the led[1:0] always@(posedge clk)begin if(btn_neg[0]) led_reg[0] <= ~led_reg[0]; else led_reg[0] <= led_reg[0]; end always@(posedge clk)begin if(btn_neg[1]) led_reg[1] <= ~led_reg[1]; else led_reg[1] <= led_reg[1]; end assign led = led_reg;endmodule此处需要提醒的是,上电复位后,芯片输出引脚默认为低电平。所以上电后,LED灯就已经点亮。按下KEY后,对应的LED熄灭,再次按下同一个KEY后,LED又被点亮。
管脚分配如下:(个人制作,还望笑纳)
本实验暂未考虑按键消抖,将在下一节讲解。 |
|