FPGA实验报告要点

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

西南科技大学

实验报告

课程名称: 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拉高,并随后拉低,给出按键的操作信息。

延时模块:对输入的信号变化时刻进行计时并观察信号的变换情况,对输出端口进行恰当地赋值。

二、实验步骤

(一)新建一个工程,为工程命名、指定存储路径和目标芯片等。(在 E 盘或者 DATA 盘的根目录下,以自己的学号为文件名建立工程)。建议工程名、路径名中不要使用中文,fil e->New Project。

(二)选择 Top-level 的类型是 HDL。

(三)做好器件、EDA工具的正确选择,才能使得正常完成锁定引脚、下载的操作。本次实验中仍采用ISE自带的综合和仿真工具。

图2.5器件和 EDA 工具选择界面

(四)建立新Verilog HDL模块编辑窗口,分别按照十进制计数器(cnt10.v),数码管驱动模块(led.v)的目标要求进行设计,各模块在综合后,采用波形的方式编辑测试激励波形,对相关模块进行功能仿真,实现模块的验证、修正。

注:在编辑测试激励文件时,应考虑测试的完备性。

1)、十进制计数器(cnt10.v)程序代码如下:

module cnt10(CLK,CLR,ENA,COUT,SUM);

input CLK,CLR,ENA;

output [3:0] SUM;

output COUT;

reg [3:0] SUM;

reg COU;

always @(posedge CLK or posedge CLR) begin

if(CLR)

SUM<=4'b0000;

else if(ENA&&SUM==4'd10)

SUM<=4'b0000;

else if(ENA&&SUM<4'd10)

SUM<=SUM+1'b1;

end

always @(posedge CLK or posedge CLR) begin

if(CLR)

COUT<=1'b0;

else if(ENA&&SUM==4'd10)

COUT<=1'b1;

else

COUT<=1'b0;

end

Endmodule

2)、数码管驱动模块(led.v)的程序代码:

module led(IN,OUT);

input[3:0]IN;

output[6:0]OUT;

reg [6:0]OUT;

always @(IN)

begin

case(IN)

相关文档
最新文档