FPGA实验二基于HDL的十进制计数器.docx

上传人:b****3 文档编号:4310346 上传时间:2022-11-29 格式:DOCX 页数:9 大小:243.92KB
下载 相关 举报
FPGA实验二基于HDL的十进制计数器.docx_第1页
第1页 / 共9页
FPGA实验二基于HDL的十进制计数器.docx_第2页
第2页 / 共9页
FPGA实验二基于HDL的十进制计数器.docx_第3页
第3页 / 共9页
FPGA实验二基于HDL的十进制计数器.docx_第4页
第4页 / 共9页
FPGA实验二基于HDL的十进制计数器.docx_第5页
第5页 / 共9页
点击查看更多>>
下载资源
资源描述

FPGA实验二基于HDL的十进制计数器.docx

《FPGA实验二基于HDL的十进制计数器.docx》由会员分享,可在线阅读,更多相关《FPGA实验二基于HDL的十进制计数器.docx(9页珍藏版)》请在冰豆网上搜索。

FPGA实验二基于HDL的十进制计数器.docx

FPGA实验二基于HDL的十进制计数器

《FPGA》课程报告

设计题目:

基于HDL的十进制计数器

学生班级:

学生学号:

学生姓名:

指导教师:

时间:

成绩:

 

一、实验目的:

1.掌握基于语言的ISE设计全流程;

2.熟悉、应用VerilogHDL描述数字电路;

3.掌握基于Verilog的组合和时序逻辑电路的设计方法。

二、实验原理:

本次实验是使用VerilogHDL进行编写十进制计数器与显示器代码而进行的实验,实验原理图如下:

本次实验的内容包括十进制计数器模块,七段译码显示器模块,以及消抖模块。

十进制计数器:

对输入时钟进行计数

输入:

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;

LED显示驱动模块:

输入:

sum[3:

0]-------待显示的数值

out[6:

0]----------驱动数码管的七位数值

七段数码管的字符显示真值表如下:

消抖模块:

三、实验过程:

1.首先建立一个新的工程,添加一个新的VerilogModule,在其中编写十进制计数模块的代码,如下:

moduleliao1(CLR,CLK,ENA,SUM,COUT

);

inputCLR,CLK,ENA;

output[3:

0]SUM;

outputCOUT;

reg[3:

0]SUM;

regCOUT;

always@(posedgeCLKorposedgeCLR)

if(CLR)

begin

SUM<=4'b0000;

COUT<=1'b0;

end

else

if(ENA)

begin

if(SUM==9)

begin

SUM<=4'b0000;

COUT<=1'b1;

end

else

begin

SUM<=SUM+1'b1;

COUT<=1'b0;

end

end

endmodule

然后执行综合,确认无误后,新建一个TestBenchWaveForm文件,进行仿真,仿真图如下:

2.再新建一个VerilogModule,在其中编写七段数码显示模块的代码,如下:

moduleliao2(SUM,out

);

input[3:

0]SUM;

output[6:

0]out;

reg[6:

0]out;

always@(SUM)

begin

case(SUM)

4'b0000:

out<=7'b0000001;

4'b0001:

out<=7'b1001111;

4'b0010:

out<=7'b0010010;

4'b0011:

out<=7'b0000110;

4'b0100:

out<=7'b1001100;

4'b0101:

out<=7'b0100100;

4'b0110:

out<=7'b0100000;

4'b0111:

out<=7'b0001111;

4'b1000:

out<=7'b0000000;

4'b1001:

out<=7'b0000100;

default:

out<=7'b0000001;

endcase

end

endmodule

执行综合,确认无误后新建一个TestBenchWaveForm文件,进行仿真,仿真图如下:

3.添加消抖模块,然后再新建一个VerilogModule,编写例化文件,制成顶层文件,其例化文件代码如下:

moduleliao(CLK_50M,CLK,CLR,ENA,COUT,out

);

inputCLR,CLK,ENA;

inputCLK_50M;

output[6:

0]out;

outputCOUT;

wire[3:

0]SUM;

debounce_moduleu1(CLK_50M,CLR,CLK,clk_out);

liao1u2(CLR,clk_out,ENA,SUM,COUT);

liao2u3(SUM,out);

endmodule

保存之后形成顶层文件:

4.执行综合,确认无误后,根据实验指导书进行锁引脚操作:

锁引脚完成后,修改、编辑约束文件:

5.生成下载配置文件,下载到开发板进行经行验证。

四、实验思考题:

1.如何用两个或一个always实现十进制计数模块?

写出相应代码。

moduleliao1(CLR,CLK,ENA,SUM,COUT

);

inputCLR,CLK,ENA;

output[3:

0]SUM;

outputCOUT;

reg[3:

0]SUM;

regCOUT;

always@(posedgeCLKorposedgeCLR)

if(CLR)

begin

SUM<=4'b0000;

COUT<=1'b0;

end

else

if(ENA)

begin

if(SUM==9)

begin

SUM<=4'b0000;

COUT<=1'b1;

end

else

begin

SUM<=SUM+1'b1;

COUT<=1'b0;

end

end

endmodule

2.如何用always,或assign实现数码管的驱动设计?

写出相应代码。

moduleliao2(SUM,out

);

input[3:

0]SUM;

output[6:

0]out;

reg[6:

0]out;

always@(SUM)

begin

case(SUM)

4'b0000:

out<=7'b0000001;

4'b0001:

out<=7'b1001111;

4'b0010:

out<=7'b0010010;

4'b0011:

out<=7'b0000110;

4'b0100:

out<=7'b1001100;

4'b0101:

out<=7'b0100100;

4'b0110:

out<=7'b0100000;

4'b0111:

out<=7'b0001111;

4'b1000:

out<=7'b0000000;

4'b1001:

out<=7'b0000100;

default:

out<=7'b0000001;

endcase

end

endmodule

3.比较实验一与实验二的实验过程,说明原理图输入法与HDL输入法的不同的应用环境。

答:

通过做实验一与实验二,可以看出原理图输入法非常直观,而且便于理解,但是需要大量的时间来寻找元器件并进行布线;HDL输入法可以按功能分成多个模块,按需调用,有利于自顶向下的设计,但需要较强的逻辑理解能力。

五、实验体会:

通过本次实验,我基本上掌握了基于HDL语言的ISE设计流程,也熟悉了应用VerilogHDL来描述数字电路,而且也掌握了基于VerilogHDL的组合和时序逻辑电路的设计方法。

在本次实验中因为在写例化文件时出了一个小错误,结果使得我最后结果错误,真是让我意识到了在实验中不能忽视任何一个细节,必须面面俱到才能保证最后的成功,通过这次实验相信对我以后的学习生活都会有很大的帮助。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1