【FPGA实验】基于DE2-115平台的数码管实验1

本文档详细介绍了基于DE2-115平台的两个FPGA实验:1. 闪烁数码管,通过1s计时器模块和数码管模块设计,实现HEX0上每秒循环显示0~9。2. 循环显示的“HELLO”,在HEX7~HEX0上以每秒一次的速度从右向左移动。每个实验包含了设计计数器模块、数码管显示模块、顶层模块,以及硬件测试和RTL门级电路的查看。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

    • 一.实验任务
    • 二.闪烁数码管
      • ①设计1s计时器模块
      • ②设计数码管模块
      • ③设计顶层模块
      • ④查看RTL门级电路
      • ⑤硬件测试
    • 三.循环显示的“HELLO”
      • ①设计计数器模块
      • ②设计数码管显示模块
      • ③设计顶层模块
      • ④查看RTL门级电路
      • ⑤硬件测试

一.实验任务

1.闪烁数码管

在HEX0上连续循环地显示数字0~9,每秒刷新一次显 示。使用计数器产生1 s的时间间隔,这个计数器的时钟由 DE2-115平台上的50
MHz时钟提供。注意:这个设计中只允 许使用DE2-115平台上的50 MHz时钟,而不允许使用其他时
钟,并保证所有的触发器都直接使用这个50 MHz时钟。

2.循环显示的“HELLO”

设计一个电路实现在HEX7~HEX0上循环显示 “HELLO”,使所有字母从右向左移动,每秒移动一次, 移动模式如表6.5所示。
在这里插入图片描述

二.闪烁数码管

该实验使用了1个数码管HEX0,每一秒更换数字显示0~9,采用平台的50MHZ时钟。

①设计1s计时器模块

time_count.v

module time_count(
	input wire clk,   //时钟,50MHZ                        
	input wire rst_n, //复位信号,下降沿有效,negative
	
	output wire sec_1//1s输出一个脉冲信号             
);


parameter MAX_NUM = 26'd49_999_999;//记最大数1s,50_000_000次
reg [25:0] cnt_1;//计数寄存器
reg sec_1_r;


//1s计时器
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		cnt_1 <= 26'd0;
	end
	else if(cnt_1 == MAX_NUM)begin
		cnt_1 <= 26'd0;	
	end
	else begin
		cnt_1 <= cnt_1 + 1'd1;
	end
end


//1s脉冲信号
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		sec_1_r <= 1'b0;
	end
	else if(cnt_1 == MAX_NUM)begin
		sec_1_r <= 1'b1;
	end
	else begin
		sec_1_r <= 1'b0;
	end
end

assign sec_1 = sec_1_r;//当右边改变,立马赋值给左边 assign和always并行

endmodule

②设计数码管模块

查看平台手册:
在这里插入图片描述
在这里插入图片描述
该平台不同于前面使用的EP4CE6F17C8芯片,这里不涉及位选信号,每个段选信号都有一个单独的引脚。
设计代码如下:
seg_led_static.v

module seg_led_static(
	input wire clk,//时钟
	input wire rst_n,//复位
	input wire sec_1,//1s脉冲信号
	
	output wire [6:0] seg//7位数码管段选信号
);
reg [3:0] value;
reg [6:0] seg_r;

//0~9计数功能
always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		value <= 4'd0;
	end
	else if(sec_1)begin
		if(value < 4'd9)begin
			value <= value + 1'd1;
		end
		else begin
			value <= 4'd0;
		end
	end
	else begin
		value <= value;
	end
end

//数码管译码功能,组合逻辑
always@(*)begin
	case(value)
		4'd0   : seg_r = 7'b100_0000;
		4'd1   : seg_r = 7'b111_1001;
		4'd2   : seg_r = 7'b010_0100;
		4'd3   : seg_r = 7'b011_0000;
		4'd4   : seg_r = 7'b001_1001;
		4'd5   : seg_r = 7'b001_0010;
		4'd6   : seg_r = 7'b000_0010;
		4'd7   : seg_r = 7'b111_1000;
		4'd8   : seg_r = 7'b000_0000;
		4'd9   : seg_r = 7'b001_0000;
		default: seg_r = 7'b100_0000;
	endcase
end
assign seg = seg_r;
endmodule

③设计顶层模块

top_seg_led.v

module top_seg_led(
	input wire clk,
	input wire rst_n,
	
	output wire [6:0] seg
);

wire sec_1;//将两个模块的信号连接起来


//推荐变量名传值,还有位置传值
time_count inst_time_count(
.clk    (clk   ),//时钟,50MHZ                  
.rst_n  (rst_n ),//复位信号,下降沿有效,negative
                     
.sec_1  (sec_1 ) //1s输出一个脉冲信号          
);

seg_led_static inst_seg_led_static(
.clk     (clk   ),//时钟
.rst_n   (rst_n ),//复位
.sec_1   (sec_1 ),//1s脉冲信号
                
.seg     (seg   ) //7位数码管段选信号
);

endmodule

④查看RTL门级电路

在这里插入图片描述

⑤硬件测试

引脚绑定:
在这里插入图片描述
下载测试:
在这里插入图片描述

三.循环显示的“HELLO”

思路,定义一个56位的寄存器,将8个数码管按照1~5显示OLLEH,6到8不显示保存在寄存器中,利用移位实现HELLO的移动

①设计计数器模块

同上

②设计数码管显示模块

seg_led_static.v

module seg_led_static(
	input wire clk,//时钟
	input wire rst_n,//复位
	input wire sec_1,//1s脉冲信号
	
	output wire [55:0] seg//56位数码管段选信号
);

reg [55:0] seg_r;

always@(posedge clk or negedge rst_n)begin
	if(!rst_n)begin
		seg_r <= 56'd72057562107864000;
	end
	else if(sec_1)begin
		seg_r <= {seg_r[48:0],seg_r[55:49]};
	end
	else begin
		seg_r <= seg_r;
	end
end

assign seg = seg_r;

endmodule

③设计顶层模块

top_seg_led.v

module top_seg_led(
	input wire clk,
	input wire rst_n,
	
	output wire [55:0] seg
);

wire sec_1;//将两个模块的信号连接起来


//推荐变量名传值,还有位置传值
time_count inst_time_count(
.clk    (clk   ),//时钟,50MHZ                  
.rst_n  (rst_n ),//复位信号,下降沿有效,negative
                     
.sec_1  (sec_1 ) //1s输出一个脉冲信号          
);

seg_led_static inst_seg_led_static(
.clk     (clk   ),//时钟
.rst_n   (rst_n ),//复位
.sec_1   (sec_1 ),//1s脉冲信号
                
.seg     (seg   ) //7位数码管段选信号
);

endmodule

④查看RTL门级电路

在这里插入图片描述

⑤硬件测试

查看硬件文档绑定引脚如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下载测试:
在这里插入图片描述

基于FPGA的数字频率计介绍: 数字频率计是一种基本的测量仪器,是用数字显示被测信号频率的仪器,被测信号可以是正弦波,方波或其它周期性变化的信号。如配以适当的传感器,可以对多种物理量进行测试,比如机械振动的频率,转速,声音的频率以及产品的计件等等。因此,它被广泛应用与航天、电子、测控等领域。 它的基本测量原理是,首先让被测信号与标准信号一起通过一个闸门,然后用计数器计数信号脉冲的个数,把标准时间内的计数的结果,用锁存器锁存起来,最后用显示译码器,把锁存的结果用液晶显示器显示出来。根据数字频率计的基本原理,本文设计方案的基本思想是分为四个模块来实现其功能,即整个数字频率计系统分为分频模块、计数模块、锁存器模块和显示模块等几个单元,并且分别用VHDL对其进行编程,实现了闸门控制信号、计数电路、锁存电路、显示电路等。 而且,本设计方案还要求,被测输入信号的频率范围自动切换量程,控制小数点显示位置,并以十进制形式显示。本文详细论述了利用VHDL硬件描述语言设计,并在EDA(电子设计自动化)工具的帮助下,用大规模可编程器件(CPLD)实现数字频率计的设计原理及相关程序。特点是:无论底层还是顶层文件均用VerilogHDL语言编写,避免了用电路图设计时所引起的毛刺现象;改变了以往数字电路小规模多器件组合的设计方法。 整个频率计设计在一块CPLD芯片上,与用其他方法做成的频率计相比,体积更小,性能更可靠。该设计方案对其中部分元件进行编程,实现了闸门控制信号、多路选择电路、计数电路、位选电路、段选电路等。 附件内容截图:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值