FPGA(6)--7段显示译码器的加法计数器

简介: FPGA(6)--7段显示译码器的加法计数器

文章目录


一、实验目的

二、实验内容

三、实验设计与结果

四、实验思考与小结


一、实验目的


在上次加法计数器仿真实验的基础上,掌握端口的引脚配置、实验箱的接线及程序的下载、调试等。


二、实验内容



1.在上次实验的基础上,编译、仿真可以进行0-99加法计数功能的计数器,其中输入端口包括时钟、清零、使能,输出端口包括个位、十位的七段译码输出,以及输出进位信号。

2. 在Quartus II上进行输入、输出端口的引脚配置。并根据引脚配置完成接线,下载至FPGA芯片中,在实验箱上完成验证。


三、实验设计与结果


1.修改上一次实验实现的“进行0-99加法计数功能的计数器“的VHDL描述,其中输入端口包括时钟、清零、使能,输出端口包括个位、十位的七段译码输出,以及输出进位信号。并将其封装成一个元件。其代码及封装后的元件如下:


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL ;
USE IEEE.STD_LOGIC_UNSIGNED.ALL ;
ENTITY cnt10 IS
   PORT ( clk, rst, en, load :     IN  STD_LOGIC ;
      data :   IN STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ;
      dout :  OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0 )  ;
     cout :   OUT STD_LOGIC   )  ;
END ENTITY cnt10  ;
ARCHITECTURE bhv OF cnt10 IS
BEGIN 
      PROCESS (clk,rst,en,load)
           VARIABLE q : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ); 
           BEGIN 
                IF rst = '0' THEN q := ( OTHERS => '0') ;
                     ELSIF   clk 'EVENT AND clk = '1'  THEN 
                         IF  en = '1' THEN
                             IF  ( load = '0') THEN q := data ;  ELSE
                                 IF q < 9 THEN q := q+1;
                                      ELSE q := ( OTHERS => '0') ;
                                 END IF ;
                             END IF ;
                        END IF ;
                END IF ;
           IF q = "1001" THEN  cout <= '1' ; 
                  ELSE  cout <= '0' ;
           END IF ;
            dout <= q;
       END PROCESS ;
END ARCHITECTURE bhv ;


2.其中的“输出端口包括个位、十位的七段译码输出”,需要修改上一次实验的七段译码的VHDL描述,并将其封装成一个元件。代码如下:


LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL ;
use Ieee.std_logic_unsigned.all;
entity led7s is
  port (a: in std_logic_vector(3 downto 0);
    d: out std_logic_vector(6 downto 0)
    );
end entity led7s;
architecture bhv of led7s is
  begin
  process (a)
  begin
  case (a) is
    when "0000" => d<= "0111111" ;
    when "0001" => d<= "0000110" ;
    when "0010" => d<= "1011011" ;
    when "0011" => d<= "1001111" ;
    when "0100" => d<= "1100110" ;
    when "0101" => d<= "1101101" ;
    when "0110" => d<= "1111101" ;
    when "0111" => d<= "0000111" ;
    when "1000" => d<= "1111111" ;
    when "1001" => d<= "1101111" ;
    when others => null;
  end case;
  end process;
end architecture bhv;


3.如下图将以上封装好的元件连接成可以实现功能的原理图,让其可以实现0-99加法计数功能,其中输入端口包括时钟、清零、使能,输出端口包括个位、十位的七段译码输出,以及输出进位信号。


20210714204629540.png


4.进行输入、输出端口的引脚配置。注意配置引脚位置的合理性。如下图为相关的配置信息。


20210714204644330.png


clk外接一个频率合适的时钟信号,使能端信号则由外接的上下推动的开关决定,而进位信号的输出则用一个外接的发光二极管指示灯表示。两个七段数码管则根据相关引脚信息给出。


20210714204701477.png

20210714204710875.png


5.根据引脚配置完成接线,下载至FPGA芯片中,在实验箱上完成验证。如下图为相关的实验验证。


20210714204733394.png20210714204741409.png


四、实验思考与小结



七段数码管有直流驱动和动态显示驱动两种。直流驱动:是指每个数码管的每一个段码都由一个单片机的I/O端口进行驱动,或者使用如BCD码二-十进制译码器译码进行驱动。优点是编程简单,显示亮度高,缺点是占用I/O端口多。动态显示驱动:是将所有数码管通过分时轮流控制各个数码管的的COM端,就使各个数码管轮流受控显示。将所有数码管的8个显示笔划"a,b,c,d,e,f,g,dp"的同名端连在一起,另外为每个数码管的公共极COM增加位选通控制电路,位选通由各自独立的I/O线控制,当单片机输出字形码时,所有数码管都接收到相同的字形码,但究竟是那个数码管会显示出字形,取决于单片机对位选通COM端电路的控制,所以我们只要将需要显示的数码管的选通控制打开,该位就显示出字形,没有选通的数码管就不会亮。


相关文章
|
7月前
|
算法 异构计算 Python
m基于FPGA的217卷积编码维特比译码verilog实现,包含testbench不使用IP核
该内容展示了使用Vivado 2019.2进行卷积编码和维特比译码的模拟。提供了编码、译码输出和RTL图的图片,以及Verilog实现的核心代码。卷积编码是一种前向纠错技术,基于生成多项式产生冗余数据;维特比译码利用动态规划恢复原始信息,最小化错误。Verilog程序包含了编码和译码模块,以及输入输出信号的时序操作。
113 0
|
算法 异构计算
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
通过状态机方法实现基于FPGA的维特比译码器,包含testbench测试文件
166 0
|
编解码 算法 异构计算
m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
m基于FPGA的LDPC最小和译码算法verilog实现,包括testbench和matlab辅助验证程序
257 0
|
算法 异构计算
m基于FPGA的viterbi译码verilog实现,包含testbench和MATLAB配套验证仿真程序
m基于FPGA的viterbi译码verilog实现,包含testbench和MATLAB配套验证仿真程序
173 0
|
异构计算
FPGA 8-3译码器(二)
FPGA 8-3译码器(二)
357 0
FPGA 8-3译码器(二)
|
异构计算
FPGA 8-3译码器(一)
FPGA 8-3译码器(一)
104 0
FPGA 8-3译码器(一)
|
异构计算
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
785 0
FPGA(5)--VHDL--10十进制计数器及7段显示译码器
|
芯片 异构计算
数电FPGA实验:实验一 基于FPGA的计数器设计 (基本任务:采用原理图法设计一个十进制计数器,完成波形功能仿真和时序仿真。拓展任务1:采用原理图法设计一个六进制计数器,完成波形功能仿真和时序仿真)
数电FPGA实验:实验一 基于FPGA的计数器设计 (基本任务:采用原理图法设计一个十进制计数器,完成波形功能仿真和时序仿真。拓展任务1:采用原理图法设计一个六进制计数器,完成波形功能仿真和时序仿真)
666 0
数电FPGA实验:实验一 基于FPGA的计数器设计 (基本任务:采用原理图法设计一个十进制计数器,完成波形功能仿真和时序仿真。拓展任务1:采用原理图法设计一个六进制计数器,完成波形功能仿真和时序仿真)
FPGA-(任务01)设计一个三位二进制减法计数器
FPGA-(任务01)设计一个三位二进制减法计数器
175 0
FPGA-(任务01)设计一个三位二进制减法计数器
FPGA-实例化的通俗理解(3-8译码器为例)
FPGA-实例化的通俗理解(3-8译码器为例)
541 0
FPGA-实例化的通俗理解(3-8译码器为例)