FPGA实验+代码
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;