FPGA实验报告.docx
- 文档编号:1631690
- 上传时间:2022-10-23
- 格式:DOCX
- 页数:16
- 大小:198.86KB
FPGA实验报告.docx
《FPGA实验报告.docx》由会员分享,可在线阅读,更多相关《FPGA实验报告.docx(16页珍藏版)》请在冰豆网上搜索。
FPGA实验报告
西南科技大学
实验报告
课程名称:
FPGA技术
实验名称基于HDL十进制计数、显示系统设计
姓名:
学号:
班级:
指导教师:
实验题目
一、实验原理
1、实验内容:
设计具有异步复位、同步使能的十进制计数器,其计数结果可以通过七段数码管、发光二极管等进行显示。
图2.1系统原理图
2、模块端口信号说明
设计任务表述:
输入信号:
clk_50m---系统采样时钟
clk-------待计数的时钟
clr---------异步清零信号,当clr=1,输出复位为0,当clr=0,正常计数
ena---------使能控制信号,当ena=1,电路正常累加计数,否则电路不工作
输出信号:
q[6:
0]---------驱动数码管,显示计数值的个位
COM---------共阳级数码管公共端(接地,电路板原理图)
3、以自顶向下的设计思路进行模块划分
整个系统主要设计的模块是:
十进制计数模块和数码管驱动模块,由于实验板的按键为实现硬件防抖,则需要将按键输入的时钟clk,先通过消抖模块消抖后,再输出至后续使用。
图2.2系统模块划分和引脚连线图
由以上分析可知本设计总共包括3个模块:
1)十进制计数器(cnt10.v)模块。
2)驱动七段数码管的模块(led.v)。
3)由于实验板上按键需要进行消抖,所以需要一个消抖模块(debounce_module),待计数的时钟clk输入至计数器前,先通过消抖模块。
1)十进制计数器模块(cnt10.v)实验原理
输入:
CLK-------待计数的时钟
CLR---------异步清零信号,当CLR=1,输出复位为0,当CLR=0,正常计数
ENA---------使能控制信号,当ENA=1,电路正常累加计数,否则电路不工作
输出:
SUM[3:
0]----------计数值的个位。
即,在CLK上升沿检测到SUM=9时,SUM将被置0,开始新一轮的计数。
COUT------------计数值的十位进位,即:
只有在时钟CLK上升沿检测到SUM=9时,COUT将被置1,其余情况下COUT=0。
2)数码管显示驱动模块(led.v)实验原理
输入:
sum[3:
0]-------待显示的数值。
输出:
out[6:
0]----------驱动数码管的七位数值(注意下表中out的对应位)。
表2-1共阳极数码管驱动模块输入与输出关系表
注:
这是一个组合逻辑电路,可以考虑用always,或者assign语句设计。
3)消抖模块设计原理
(1)按键抖动产生的原因:
通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。
因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而作的措施就是按键消抖。
图2.3按键抖动波形图
(2)消抖模块原理框图简介
图2.4消抖模块框图
电平检查模块:
检测输入的按键是否被按下或者释放,并分别将H2L_Sig,L2H_Sig拉高,
并随后拉低,给出按键的操作信息。
延时模块:
对输入的信号变化时刻进行计时并观察信号的变换情况,对输出端口进行恰
当地赋值。
二、实验步骤
(1)新建一个工程,为工程命名、指定存储路径和目标芯片等。
(在E盘或者DATA盘的根目录下,以自己的学号为文件名建立工程)。
建议工程名、路径名中不要使用中文,file->NewProject。
(2)选择Top-level的类型是HDL。
(3)做好器件、EDA工具的正确选择,才能使得正常完成锁定引脚、下载的操作。
本次实验中仍采用ISE自带的综合和仿真工具。
图2.5器件和EDA工具选择界面
(4)建立新VerilogHDL模块编辑窗口,分别按照十进制计数器(cnt10.v),数码管驱动模块(led.v)的目标要求进行设计,各模块在综合后,采用波形的方式编辑测试激励波形,对相关模块进行功能仿真,实现模块的验证、修正。
注:
在编辑测试激励文件时,应考虑测试的完备性。
1)、十进制计数器(cnt10.v)程序代码如下:
modulecnt10(CLK,CLR,ENA,COUT,SUM);
inputCLK,CLR,ENA;
output[3:
0]SUM;
outputCOUT;
reg[3:
0]SUM;
regCOU;
always@(posedgeCLKorposedgeCLR)begin
if(CLR)
SUM<=4'b0000;
elseif(ENA&&SUM==4'd10)
SUM<=4'b0000;
elseif(ENA&&SUM<4'd10)
SUM<=SUM+1'b1;
end
always@(posedgeCLKorposedgeCLR)begin
if(CLR)
COUT<=1'b0;
elseif(ENA&&SUM==4'd10)
COUT<=1'b1;
else
COUT<=1'b0;
end
Endmodule
2)、数码管驱动模块(led.v)的程序代码:
moduleled(IN,OUT);
input[3:
0]IN;
output[6:
0]OUT;
reg[6:
0]OUT;
always@(IN)
begin
case(IN)
4'b0000:
OUT<=7'b1000000;
4'b0001:
OUT<=7'b1111001;
4'b0010:
OUT<=7'b0100100;
4'b0011:
OUT<=7'b0110000;
4'b0100:
OUT<=7'b0011001;
4'b0101:
OUT<=7'b0010010;
4'b0110:
OUT<=7'b0000010;
4'b0111:
OUT<=7'b1111000;
4'b1000:
OUT<=7'b0000000;
4'b1001:
OUT<=7'b0010000;
4'b1010:
OUT<=7'b0001000;
4'b1011:
OUT<=7'b0000011;
4'b1100:
OUT<=7'b1000110;
4'b1101:
OUT<=7'b0100001;
4'b1110:
OUT<=7'b0000110;
4'b1111:
OUT<=7'b0001110;
endcase
end
endmodule
(5)用VerilogHDL将cnt10.v和led.v组合为一个模块,完成综合、功能仿真,分形,修正设计。
1)、顶层模块程序代码(cnt10led.v):
`timescale1ns/1ps
modulecnt10led(CLK_50M,CLK,CLR,ENA,COUT,DATA_OUT);
inputCLK_50M,CLK,CLR,ENA;
outputCOUT;
output[6:
0]DATA_OUT;
wirePin_Out;
wire[3:
0]DATA_IN;
//regCOUT;
debounce_moduleu0(CLK_50M,CLR,CLK,Pin_Out);
cnt10u1(Pin_Out,CLR,ENA,COUT,DATA_IN);
ledu2(DATA_IN,DATA_OUT);
endmodule
注:
由于本次设计的时钟周期可以较长,系统对时序没有要求,可以省略个子模块的时序仿真。
(6)拷贝消抖模块代码:
debounce_module.v,delay_module.v,detect_module.v,组合完成消抖模块。
1)、detect_module.v程序代码如下:
moduledetect_module(CLK,RSTn,Pin_In,H2L_Sig,L2H_Sig);
inputCLK;
inputRSTn;
inputPin_In;
outputH2L_Sig;
outputL2H_Sig;
parameterT100US=16'd1999;
reg[10:
0]Count1;
regisEn;
always@(posedgeCLKorposedgeRSTn)
if(RSTn)
begin
Count1<=11'd0;
isEn<=1'b0;
end
elseif(Count1==T100US)
isEn<=1'b1;
else
Count1<=Count1+1'b1;
regH2L_F1;
regH2L_F2;
regL2H_F1;
regL2H_F2;
always@(posedgeCLKorposedgeRSTn)
if(RSTn)
begin
H2L_F1<=1'b1;
H2L_F2<=1'b1;
L2H_F1<=1'b0;
L2H_F2<=1'b0;
end
else
begin
H2L_F1<=Pin_In;
H2L_F2<=H2L_F1;
L2H_F1<=Pin_In;
L2H_F2<=L2H_F1;
end
assignH2L_Sig=isEn?
(H2L_F2&!
H2L_F1):
1'b0;
assignL2H_Sig=isEn?
(!
L2H_F2&L2H_F1):
1'b0;
Endmodule;
2)、delay_module.v程序代码如下:
moduledelay_module(CLK,RSTn,H2L_Sig,L2H_Sig,Pin_Out);
inputCLK;
inputRSTn;
inputH2L_Sig;
inputL2H_Sig;
outputPin_Out;
parameterT1MS=25'd19_999;
reg[15:
0]Count1;
regisCount;
regrPin_Out;
reg[1:
0]i;
always@(posedgeCLKorposedgeRSTn)
if(RSTn)
Count1<=16'd0;
elseif(isCount&&Count1==T1MS)
Count1<=16'd0;
elseif(isCount)
Count1<=Count1+1'b1;
elseif(!
isCount)
Count1<=16'd0;
reg[3:
0]Count_MS;
always@(posedgeCLKorposedgeRSTn)
if(RSTn)
Count_MS<=4'd0;
elseif(isCount&&Count1==T1MS)
Count_MS<=Count_MS+1'b1;
elseif(!
isCount)
Count_MS<=4'd0;
always@(posedgeCLKorposedgeRSTn)
if(RSTn)
begin
isCount<=1'b0;
rPin_Out<=1'b0;
i<=2'd0;
end
else
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- FPGA 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)