FPGA 两位数码管实现任意进制计数器

开发环境:Quartus Prime 18.0

设备:小脚丫开发板,搭载AlteraMAX10 10M02SCM153C8G

语言:verilog HDL

程序效果:实现两位数码管以十进制显示数字,并且可以2-100进制进行加法计数,带清零rst和保持hold的功能

主代码

module inc_counter#(
parameter CNT_SIZE=8,
parameter BASE_HIGH=4, 
parameter BASE_LOW=6//进制2-100,进制100时此值取10
)
(
input clk,rst,hold,
output wire [17:0] seg
);

reg [CNT_SIZE/2-1:0]cnt_high;
reg [CNT_SIZE/2-1:0]cnt_low;
reg VDD;
initial VDD=1;
divider #(.N(6000000),.WIDTH(24))divider1(
	.clk(clk),
	.rst(VDD),
	.clk_out(clk1)
);

segment7 high(.A(cnt_high[CNT_SIZE/2-1:0]),.g_to_a(seg[17:9]));
segment7 low(.A(cnt_low[CNT_SIZE/2-1:0]),.g_to_a(seg[8:0]));

always @(posedge clk1, negedge rst, negedge hold)
	if(!rst)
		begin
			cnt_high<=0;
			cnt_low<=0;
		end
	else if(!hold)
		begin
			cnt_high<=cnt_high;
			cnt_low<=cnt_low;
		end
	else
		if(cnt_high == BASE_HIGH)
			if(cnt_low == BASE_LOW-1)
				begin
					cnt_high<=0;
					cnt_low<=0;
				end
			else cnt_low<=cnt_low+1'b1;
		else
			if(cnt_low == 10-1)
				begin
					cnt_high<=cnt_high+1'b1;
					cnt_low<=0;
				end	
			else cnt_low<=cnt_low+1'b1;
		
endmodule

分配管脚:

调用的子模块:

1.数码管segment7

module segment7(
	input wire [3:0] A,
	output wire [8:0] g_to_a
);
	reg [8:0] seg[15:0];
initial 
		begin
		seg[4'b0000]=9'h3f;
		seg[4'b0001]=9'h06;
		seg[4'b0010]=9'h5b;
		seg[4'b0011]=9'h4f;
		seg[4'b0100]=9'h66;
		seg[4'b0101]=9'h6d;
		seg[4'b0110]=9'h7d;
		seg[4'b0111]=9'h07;
		seg[4'b1000]=9'h7f;
		seg[4'b1001]=9'h6f;
		seg[4'b1010]=9'h77;
		seg[4'b1011]=9'h7c;
		seg[4'b1100]=9'h39;
		seg[4'b1101]=9'h5e;
		seg[4'b1110]=9'h79;
		seg[4'b1111]=9'h71;
		end
		assign g_to_a = seg[A];
endmodule

2.分频器divider

module divider(
	inout clk,
	input rst,
	output reg clk_out
);
parameter N=6000000,WIDTH=24;

reg [WIDTH-1:0] cnt;
always @(posedge(clk),posedge(rst)) 
	begin
		if(rst==1'b1)
		cnt<=24'b0;
		else if(cnt==N-1)
		cnt<=24'b0;
		else
		cnt<=cnt+1;
	end
	
always @(posedge(clk),posedge(rst))
	begin
		if(rst==1'b1)
		clk_out<=1'b0;
		else if(cnt==N-1)
		clk_out<=~clk_out;
		else
		clk_out<=clk_out;
	end
endmodule

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA数码管计数器是一种基于现场可编程门阵列(Field Programmable Gate Array, FPGA)技术构建的数字电路系统,主要用于实现具有显示功能的计数功能。它结合了FPGA的强大灵活性、高速处理能力以及低功耗特性,使得设计者能够定制化地创建满足特定需求的数字系统。 ### FPGA数码管计数器的工作原理 1. **硬件配置**:首先,设计人员需要在FPGA芯片上配置相应的硬件资源,包括触发器、加法器、锁存器等逻辑单元,用于处理输入信号并控制LED数码管的显示内容。 2. **逻辑设计**:通过Verilog HDL或其他FPGA设计语言,将计数功能、显示控制逻辑等设计进FPGA内部。这通常包括状态机的设计,用于管理计数的增减过程及对应的显示位更新。 3. **计数操作**:当接收到计数指令后,内部状态机根据当前状态执行计数操作,例如递增或递减,并更新显示的数值。每次计数变化时,会通过数据总线将新的数值送入到数码管驱动部分。 4. **显示控制**:FPGA芯片通过控制LED数码管的段选线和公共端来实现数字的显示。每一段对应显示数字的一个笔画,通过组合不同段的状态可以显示出0到9的各种数字以及其它字符。 5. **刷新与同步**:为了保证显示的稳定性和准确性,系统需要有严格的时序控制机制,如定时器或外部时钟源,确保每次计数更新时都能准确无误地刷新显示屏。 ### 实现与应用 - **设计流程**:设计阶段包括逻辑设计、仿真验证、下载编程到FPGA芯片、调试和测试等多个步骤。设计完成后,通过专用的编程工具将设计代码下载到目标FPGA芯片中运行。 - **应用场景**:FPGA数码管计数器广泛应用于各种电子设备中,如教学实验板、工业控制设备、智能家居产品、实验仪器等,特别适合需要高可定制化、实时性强、体积小、成本可控的应用场景。 通过FPGA数码管计数器的设计,不仅能够实现精确而快速的数据处理和显示功能,还具备高度的灵活性和适应性,可以根据实际需求调整其功能和性能指标,适用于多种复杂环境下的计算和信息展示任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值