FPGA实验+代码

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2014年EDA实验

第一次实验:

实验1:QII软件及实验板的使用;用图形输入法和语言输入法完成点灯实验(用两个按键控制两个灯的亮灭:灯的状态随按键状态改变而改变)。完成软件仿真。

module simple_lightcon(input wire [1:0] key, output wire [1:0] led);

assign led= key;

endmodule

实验2:联控点灯实验:

用两个按键独立控制同一个灯亮灭,第三个按键同时控制该灯和另一个灯亮灭。

module com_lightcon(input wire [2:0] key, output wire [1:0] led);

assign led[0]= key[0];

assign led[1]= key[0]&( key[2]^ key[1]);

endmodule

实验3:流水灯实验:

完成一个8路流水灯控制实验,要求有以下3种花型:

1)8路灯同时亮灭;

2)从左至右再从右至左逐个亮(每次只有1路亮);

3)8路灯每次4路灯亮,4路灯灭,且亮灭相间,交替亮灭。

用3个按键控制3种花型。按下花型按键就一直显示相应花型,再按该键可暂停。可设置1个复位键关闭显示。

/*-------------------------------------------------------------------------------------------------

Filename :waterlight.v

Author :Basson

Data : 2014-11-21

Version : V1.0

Description : This file has the module of HDL top.

Modification History:

Data by Version Change Description

=========================================================

14/11/21 Basson V1.0 Original

---------------------------------------------------------------------------------------------------*/

module water_light(

input wire sys_sclk, //时钟信号(输入信号)

input wire srst_n, //复位信号(输入信号)

input wire[2:0] key, //按键信号(输入信号)

output reg [3:0] ledlight //输出接8个led灯(输出信号)

);

//消抖动------------------------------------------------------------------

reg [2:0] key_reg; //用于存储现有按键

always @(posedge sys_sclk,negedge srst_n)

begin

if(srst_n==1'b0) key_reg<=3'b111;

else key_reg<=key;

end

reg [2:0] key_reg_r; //用于存储前一按键

always @(posedge sys_sclk,negedge srst_n)

begin

if(srst_n==1'b0) key_reg_r<=3'b111;

else key_reg_r<=key_reg; //用于存储前一按键

end

wire[2:0] key_an=key_reg_r&(~key_reg); //用于存储按键下降沿

//消抖时间设定为20ms左右-------------------------------------------------------------------

parameter CCNTWITHD=20;

reg [CCNTWITHD-1:0] ccnt;

reg[2:0] keyout;

always @(posedge sys_sclk,negedge srst_n)

begin

if(srst_n==1'b0)ccnt<=20'b0;

else if(key_an)ccnt<=20'b0; //按键有抖动就清零--消除抖动的计数器

else ccnt<=ccnt+1'b1; //没有抖动,消除抖动的计数器开始加1,延时20ms。

end

reg [2:0] low_key; //用于记录消除抖动后的现有按键状态always @(posedge sys_sclk,negedge srst_n)

begin

if(srst_n==1'b0) low_key<=3'b111;

else if(ccnt==20'hfffff)

low_key<=key;

end

/*消抖动结束*/

/*流水灯控制部分程序--------------------------------------------------------------------------*/

//可按键标志位------------------------------------------------------------------

reg [2:0] low_key_r; //用于记录消除抖动后的下一按键状态

always @(posedge sys_sclk,negedge srst_n)

begin

if(srst_n==1'b0) low_key_r<=3'b111;

else

low_key_r<=low_key;

end

wire [2:0] key_flag11=low_key_r&(~low_key); //消逗后按键下降沿个数,作为标志位//标志位------------------------------------------------------------------

reg[2:0] key_flag1;

always @(posedge sys_sclk ,negedge srst_n)

begin

if(srst_n==1'b0)

begin

key_flag1<=3'b000;

相关文档
最新文档