精华内容
下载资源
问答
  • 2022-01-03 16:49:46

    (38)FPGA数码管驱动设计(第8天)

    1 文章目录

    1)文章目录

    2)FPGA初级课程介绍

    3)FPGA初级课程架构

    4)FPGA数码管驱动设计(第8天)

    5)技术交流

    6)参考资料

    2 FPGA初级课程介绍

    1)FPGA初级就业课程共100篇文章,目的是为了让想学FPGA的小伙伴快速入门。

    2)FPGA初级就业课程包括FPGA简介、Verilog HDL基本语法、Verilog HDL 入门实例、FPGA入门实例、Xilinx FPGA IP core设计、Xilinx FPGA原语与UART通信实例设计、SPI通信实例设计、FPGA基础面试题、FPGA实践面试题。

    3)FPGA初级就业课程学习建议:

    第一,听说FPGA,每天学习2篇文章,50天学会FPGA。

    第二,了解FPGA,每天学习3篇文章,30天学会FPGA。

    第三,熟悉FPGA,每天学习5篇文章,20天学会FPGA,FPGA初级就业课程课采用该架构。

    第四,精通FPGA,每天学习10篇文章,10天学会FPGA。

    第五,精通FPGA,每天学习14篇文章,7天学会FPGA。

    3 FPGA初级课程架构

    FPGA初级就业课程共100篇文章,总共分为10个阶段,每个阶段10篇文章。

    第1阶段:FPGA简介。

    1)介绍FPGA芯片、FPGA开发流程、开发语言、开发工具

    更多相关内容
  • FPGA数码管

    2021-11-25 09:07:58
    文章目录前言一、工程介绍1.1 LED显示原理...  本工程使用FPGA驱动LED数码管。 1.1 LED显示原理   LED是一个发光二极管,当加正向电压,LED点亮,加反向电压,LED熄灭,在实际连接电路上,FPGA引脚通过一个电阻连接


    前言

      本系列文章来源于FPGA学习开源网站fpga4fun,网站由浅入深的介绍了26个FPGA工程,通过工程的学习,可以了解什么是FPGA以及它是如何工作的。本人仅用于学习和记录,如有侵权,速删。


    一、工程介绍

      本工程使用FPGA驱动LED数码管。

    1.1 LED显示原理

      LED是一个发光二极管,当加正向电压,LED点亮,加反向电压,LED熄灭,在实际连接电路上,FPGA引脚通过一个电阻连接LED,电阻值一般在100Ω-1KΩ之间,实际连接电路如下所示:
    在这里插入图片描述

    1.2 控制LED的发光强度

      首先,看一下如何通过verilog代码实现LED的开关,代码类似用verilog代码实现蜂鸣器,具体代码如下所示:

    module LEDBlink(
    	input clk_i,		//时钟一般在10MHz-50MHz
    	output LED_o
    );
    
    	reg [31:0] cnt;
    	
    	always@(posedge clk_i)begin
    		cnt <= cnt + 1;
    	end
    
    	assign LED_o = cnt[22];	//这里使用的是计数器23bit控制开关的频率,使用不同的计数器位数实现不同的开关频率
    
    endmodule 
    

      其次,看一下如何控制LED实现半亮这种状态,一般由两种解决方案:一是将与FPGA、LED串联的电阻的阻值提高一倍;二是让FPGA输出不停的翻转,使得LED点亮和熄灭的时间一样,这样可以看到半亮的状态,具体代码如下所示:

    module LEDhalflit(
    	input clk_i,
    	output LED_o
    );
    
    	reg toggle;
    
    	always@(posedge clk_i)begin
    		toggle <= ~toggle;			//在时钟的一半进行翻转
    	end
    
    	assign LED = toggle;
    
    endmodule
    

      然后,看一下如何控制LED的强度,一般可以使用pwm的思想。下面是一个使用4bit输入控制LED在16个亮度级别之间进行选择的例子,具体代码如下所示:

    module LED_PWM(
    	input 		clk_i,
    	input [3:0] pwm_i,		//16个亮度级别
    	output 		LED_o
    );
    
    	reg [4:0] pwm;
    
    	always@(posedge clk_i)begin
    		pwm <= pwm[3:0] + pwm_i;
    	end
    	
    	assign LED = pwm[4];
    
    endmodule
    

      最后,看一下如何使LED看起来会发光,一般是使用计数器结合pwm的思想,具体代码如下所示:

    module LEDglow(
    	input clk_i,
    	output LED_o
    );
    
    	reg [23:0] cnt;
    	reg [ 4:0] pwm;
    
    	wire [3:0] intensity = cnt[23] ? cnt[22:19] : ~cnt[22:19] //亮度在亮暗切换
    
    	always@(posedge clk_i)begin
    		cnt <= cnt + 1;
    	end
    
    	always@(posedge clk_i)begin
    		pwm <= pwm[3:0] + intensity;
    	end
    	
    	assign LED = PWM[4];
    	
    endmodule
    

    1.3 7段发光二极管显示

      数码管由8个发光二极管组成,8个二极管命名为‘A’到‘G’,还有一个DP(点)。这8个二极管并不是独立的,一般会将阴极或者阳极接到一起,实际物理器件最少有九个引脚,如下图所示:
    在这里插入图片描述
    在这里插入图片描述
      FPGA驱动数码管,最简单的方案是使用8个IO引脚,如下图所示,以显示数字2为例,具体代码如下:
    在这里插入图片描述

    module LED_7seg(
    	output segA_o,
    	output segB_o,
    	output segC_o,
    	output segD_o,
    	output segE_o,
    	output segF_o,
    	output segG_o,
    	output segDP_o
    );
    
    	assign {segA_o,segB_o,segC_o,segD_o,segE_o,segF_o,segG_o,segDP_o} = 8'b11011010;
    
    endmodule
    

      下面使用FPGA驱动数码管实现一个10进制计数器,具体代码如下所示:

    module LED_7seg(
    	input  clk_i,
    	output segA_o,
    	output segB_o,
    	output segC_o,
    	output segD_o,
    	output segE_o,
    	output segF_o,
    	output segG_o,
    	output segDP_o
    );
    
    	reg [23:0] cnt;		//使用24bit计数器
    	always@(posedge clk_i)begin
    		cnt <= cnt + 24'h1;
    	end
    
    	wire cntovf = &cnt;		//归约与,&cnt=cnt[0]&cnt[1]&....&cnt[23],每计满24位,cntovf值为1,如果时钟设置好,可以实现1s置1一次
    
    	reg [3:0] BCD;
    	always@(posedge clk_i)begin
    		if(cntovf)beign		//每一秒,计数器加1
    			BCD <= (BCD==4'h9 ? 4'h0 : BCD+4'h1);	//from 0 to 9
    		end
    	end
    
    	reg [7:0] SevenSeg;
    	always@(*)begin
    		case(BCD)
    			4'h0: SevenSeg = 8'b1111_1100;
    			4'h1: SevenSeg = 8'b0110_0000;
    			4'h2: SevenSeg = 8'b1101_1010;
    			4'h3: SevenSeg = 8'b1111_0010;
    			4'h4: SevenSeg = 8'b0110_0110;
    			4'h5: SevenSeg = 8'b1011_0110;
    			4'h6: SevenSeg = 8'b1011_1110;
    			4'h7: SevenSeg = 8'b1110_0000;
    			4'h8: SevenSeg = 8'b1111_1110;
    			4'h9: SevenSeg = 8'b1111_0110;
    			default: SevenSeg = 8'b0000_0000;
    		endcase
    	end
    	assign {segA_o,segB_o,segC_o,segD_o,segE_o,segF_o,segG_o,segDP_o} = SevenSeg;
    
    endmodule
    

      下面使用FPGA驱动数码管实现一个10进制平滑计数器,效果实现淡入淡出,具体代码如下所示:

    module LED_7seg(
    	input  clk_i,
    	output segA_o,
    	output segB_o,
    	output segC_o,
    	output segD_o,
    	output segE_o,
    	output segF_o,
    	output segG_o,
    	output segDP_o
    );
    
    	reg [23:0] cnt;		//使用24bit计数器
    	always@(posedge clk_i)begin
    		cnt <= cnt + 24'h1;
    	end
    
    	wire cntovf = &cnt;		//归约与,&cnt=cnt[0]&cnt[1]&....&cnt[23],每计满24位,cntovf值为1,如果时钟设置好,可以实现1s置1一次
    
    	reg [3:0] BCD_new;
    	reg [3:0] BCD_old;
    	always@(posedge clk_i)begin
    		if(cntovf)beign		//每一秒,计数器加1
    			BCD_new <= (BCD_new==4'h9 ? 4'h0 : BCD_new+4'h1);	//from 0 to 0
    		end
    	end
    	
    	always@(posedge clk_i)begin
    		if(cntovf)beign		
    			BCD_old <= BCD_new;			//将计数器打一拍
    		end
    	end
    
    	reg [4:0] pwm;
    	wire [3:0] pwm_input = cnt[22:19];
    	always@(posedge clk_i)begin
    		pwm <= pwm[3:0] + pwm_input;		//通过pwm控制实现淡入淡出效果
    	end
    	wire [3:0] BCD = (cnt[23] | pwm[4]) ? BCD_new : BCD_old;
    	
    	reg [7:0] SevenSeg;
    	always@(*)begin
    		case(BCD)
    			4'h0: SevenSeg = 8'b1111_1100;
    			4'h1: SevenSeg = 8'b0110_0000;
    			4'h2: SevenSeg = 8'b1101_1010;
    			4'h3: SevenSeg = 8'b1111_0010;
    			4'h4: SevenSeg = 8'b0110_0110;
    			4'h5: SevenSeg = 8'b1011_0110;
    			4'h6: SevenSeg = 8'b1011_1110;
    			4'h7: SevenSeg = 8'b1110_0000;
    			4'h8: SevenSeg = 8'b1111_1110;
    			4'h9: SevenSeg = 8'b1111_0110;
    			default: SevenSeg = 8'b0000_0000;
    		endcase
    	end
    	assign {segA_o,segB_o,segC_o,segD_o,segE_o,segF_o,segG_o,segDP_o} = SevenSeg;
    
    endmodule
    

    展开全文
  • FPGA 6个数码管计数显示程序,verilog编写。。。。。。。
  • FPGA 数码管滚动显示"HELLO"字符串,速度可调
  • FPGA数码管简单显示

    2022-05-04 22:57:37
    一、了解数码管的原理 数电的书中有介绍,如下图。具体按照接地还是接电源,分为共阴极与共阳极,本文讨论是共阳极,即低电平无效。简单的原理就是abcdefg七个管脚+dp(小数点),根据逻辑编写代码,控制亮灭,达到...

    一、了解数码管的原理
    数电的书中有介绍,如下图。具体按照接地还是接电源,分为共阴极与共阳极,本文讨论是共阳极,即低电平无效。简单的原理就是abcdefg七个管脚+dp(小数点),根据逻辑编写代码,控制亮灭,达到显示数字的效果。
    请添加图片描述
    如果想表示两位,三位或者四位甚至更多,就需要更多的数码器,数码器的数量根据需要配置,本文讨论是4位数码器。多位数码器编写,需要分两步控制:第一步控制哪一个数码器有效(即给哪一个数码器供电),第二步针对已供电的数码器显示数字。
    二、代码编写的思路
    为了是代码清晰,可移植能力强分为三个模块编写。
    第一个模块:静态模块,做位选,段选信号,本文简单,位选给所有数码器供电,段选按照0-9控制数码器的亮灭,达到显示效果。
    第二个模块:驱动模块,设计1ms计数器,从0开始1ms数字加1,到9置0循环。
    第三个模块:顶层模块,调用驱动,静态模块,达到显示0-9不断循环效果。
    三、代码编写
    1、静态模块编写
    请添加图片描述
    请添加图片描述
    2、驱动模块编写
    请添加图片描述
    3、顶层模块编写
    请添加图片描述
    四、测试代码编写
    请添加图片描述请添加图片描述
    五、总结
    1、主要是对于细节的把控,例化时,wire,reg的区分,input,output的定义原理是什么,结合着输入输出进一步的理解。
    2、为下一步继续实现多位数字的显示,打好基础。

    展开全文
  • FPGA数码管动态显示

    2015-12-17 17:00:32
    100进制可逆加法器的数码管动态显示,设计步骤和流畅,代码编写
  • FPGA数码管的显示总结

    2021-08-04 15:03:47
    2: 数码管位选和 段选,确定信号是高电平有效,还是低电平有效。 3: 知道0~f 数字用数码管怎么表示。 4: 仿真的情况: 应该是生成1k 时钟的时候,再输入显示的数据。 源代码: `timescale 1ns / 1ps ///////...

    1:由于视觉暂留效应,首先生成1k 的时钟。

    2: 数码管位选和 段选,确定信号是高电平有效,还是低电平有效。

    3: 知道0~f 数字用数码管怎么表示。

    4: 仿真的情况: 应该是生成1k 时钟的时候,再输入显示的数据。

    源代码:

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2021/08/04 10:10:22
    // Design Name: 
    // Module Name: HEX_TOP
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module HEX_TOP(
          input clk,
    	  input reset_n,
    	  input [31:0]  disp_data,
    	  output reg [7:0] seg,
    	  output reg [7:0] sel 
    	
        );
    	
    	reg [15:0] clk_cnt;// 25000;
    	//reg [17:0]  cnt_disp;//12500;
        reg clk_1k;
        reg [2:0]  sel_cnt;
    	reg [3:0]  num;
    	always@(posedge clk or negedge reset_n)begin
             if(!reset_n)begin
         		clk_cnt <=  16'd0; 
                clk_1k <= 1'b0;			
    		 end 
    		 else if(clk_cnt == 12500-1)begin
                 clk_cnt <= 16'd0;	
                 clk_1k <= ~clk_1k;			 
    		 end 
    		 else 
    		      clk_cnt <= clk_cnt+1'b1;
    	end 
    	   
    	always@(posedge clk_1k or negedge reset_n)begin 
    	      if(!reset_n)
                  sel_cnt<=3'd0;    		   		  
    		  else 
    		      sel_cnt <= sel_cnt+1'b1;
        end 		  
    	
        always@(posedge clk_1k)begin 
             case(sel_cnt) 
    		     0:num <= disp_data[3:0];
    			 1:num <= disp_data[7:4];
    			 2:num <= disp_data[11:8];
    			 3:num <= disp_data[15:12];
    			 4:num <= disp_data[19:16];
    			 5:num <= disp_data[23:20];
    			 6:num <= disp_data[27:24];
    			 7:num <= disp_data[31:28];   
    		    
    		 endcase  
        end 	
    	
         always@(posedge clk_1k)begin 
             case(sel_cnt)
    		     0:sel <= 8'b0000_0001;
    			 1:sel <= 8'b0000_0010;
    			 2:sel <= 8'b0000_0100;
    			 3:sel <= 8'b0000_1000;
    			 4:sel <= 8'b0001_0000;
    			 5:sel <= 8'b0010_0000;
    			 6:sel <= 8'b0100_0000;
    			 7:sel <= 8'b1000_0000;
    		     default: sel <= 8'b0000_0000;
    		
    		 endcase  
        end 	
                            		 
    	always@(posedge clk_1k)begin 
    	   case(num)
    	         0:  seg <= 8'hc0;
    			 1:  seg <= 8'hf9;
    			 2:  seg <= 8'ha4;
    			 3:  seg <= 8'hb0;
    			 4:  seg <= 8'h99;
    			 5:  seg <= 8'h92;
    			 6:  seg <= 8'h82;
    			 7:  seg <= 8'hf8;
    			 8:  seg <= 8'h80;
    			 9:  seg <= 8'h90;
    			 10: seg <= 8'h88;
    			 11: seg <= 8'h83;
    			 12: seg <= 8'hc6;
    			 13: seg <= 8'ha1;
    			 14: seg <= 8'h86;
    			 15: seg <= 8'h8e;
    		     default:seg <= 8'hff;
    	    endcase 
    	end 
        	  
    		  
    endmodule
    

    仿真代码:

    `timescale 1ns / 1ps
    //
    // Company: 
    // Engineer: 
    // 
    // Create Date: 2021/08/04 14:18:44
    // Design Name: 
    // Module Name: hex_tb
    // Project Name: 
    // Target Devices: 
    // Tool Versions: 
    // Description: 
    // 
    // Dependencies: 
    // 
    // Revision:
    // Revision 0.01 - File Created
    // Additional Comments:
    // 
    //
    
    
    module hex_tb();
    	
    	 
    	  reg  clk;
    	  reg reset_n;
    	  reg [31:0] disp_data;
    	  wire  [7:0] seg;
    	  wire  [7:0] sel ;
    	
    	 HEX_TOP  HEX_TOP_inst1(
         .clk(clk),
    	 .reset_n(reset_n),
    	 .disp_data(disp_data),
    	 .seg(seg),
    	 .sel(sel)
        );
    	
    	initial begin
    	   reset_n   =0;
    	   clk=0;
    	   disp_data = 32'd0;
    	   #201;
    	   reset_n=1;
    	   #2010_0000;
    	   disp_data = 32'h12345678;
    	   #2000_0000;
    	   disp_data = 32'ha19bcd4;
    	   #200;
    	   $stop;
    	end 
    	always #20 clk =~ clk;
    	
    endmodule
    

    仿真的波形显示:

     

    展开全文
  • FPGA 数码管显示

    2014-03-16 16:13:51
    对于初学FPGA 的 可以借鉴 VHDL
  • 运用FPGA平台的6个数码管流动显示7位学号
  • fpga数码管显示
  • FPGA当主控芯片来显示数码管数据,里面有三种设计方法,模块化设计程序,模块之间有详细讲解!
  • 实现FPGA的静态数码管显示,已经过试验验证,改进后可实现动态数码管显示
  • FPGA数码管显示

    2021-06-25 15:22:55
    数码管 数码管显示部分的电路如图所示。我们使用的是一个四位带小数点的七段共阳数码管,当我们相应的输出脚为低电平时,该段位的LED点亮。位选位也是低电平选通。 模块实现 //数码管显示 module digitalTube( ...
  • FPGA数码管循环显示0-9

    2021-06-01 20:07:56
    有没有大佬帮忙写一个电路模块和仿真程序,小弟属实比较笨,用verilog,谢谢了</p>
  • 主要功能:通过FPGA的6个数码管流动显示7位学号 工程放在下边 链接:https://pan.baidu.com/s/14ILTfXZ5AZa98r7p7w39UQ 提取码:3aho
  • fpga数码管的驱动

    2014-10-02 00:22:46
    fpga数码管的驱动,用这个驱动可以方便的操作fpga的数码管
  • top顶层文件 module seg_test( input clk, input rst_n, input key1, input key2, output buzzer, output [5:0] seg_sel, output [7:0] seg_data ); wire button_negedge; ax_debounce ax_debounce_... .clk .
  • FPGA 数码管 代码 VERILOG希望对大家有帮助
  • FPGA-数码管

    2022-05-11 19:47:56
    闪烁的数码管 在HEX0上连续循环地显示数字0~9,每秒刷新一次显示。使用计数器产生1 s的时间间隔,这个计数器的时钟由DE2-115平台上的50 MHz时钟提供。注意:这个设计中只允许使用DE2-115平台上的50 MHz时钟,而不...
  • fpga数码管计数+键控作业

    千次阅读 多人点赞 2020-10-24 21:58:33
    作业3: 利用LED、KEY和Segment LED,实现下面的功能; (1)在前三次作业的基础上,实现6位的10进制计数器计数,并在Segment LED显示计数器的次数; 即4盏LED一秒内循环点亮, 10进制计数器加1,同时在Segment LED...
  • FPGA数码管时钟

    2013-09-25 11:06:50
    FPGA驱动八个数码管动态扫描,数码管使用74hc573驱动
  • 这是两年前开始学习FPGA的时候做的实验,已经好久没有接触FPGA了,板卡也积灰不少了,是时候安排时间重新拾起曾经美好的回忆了。下面是曾经的实验笔记。
  • 在以单片机和ARM为主的电子系统中,液晶屏是理想的...数码管作为一种能够直观显示一定数据信息的输出设备,具有驱动简单,显示直观的特点,尤其适合作为FPGA系统的输出设备。本文就带大家一起进行数码管驱动的开发。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,605
精华内容 1,442
关键字:

fpga 数码管