基于FPGA的4位通用十进制计数器VHDL代码ISE仿真

名称:基于FPGA的4位通用十进制计数器VHDL代码ISE仿真

软件:ISE

语言:VHDL

代码功能:

要求实现一个4位通用十进制计数器 (counter)counter的输入信号有:RSTAsynchronous Reset Input,表示异步复位,当RST为低电平时,此时不需要考虑时钟信号的状态,输出直接全0),时钟信号CLKCLK上升沿触发,LDSynchronous Parallel Load ,当为高电平时控制同步输入数据),D3~D0(Parallel Data Inputs ,同步输入的数值)U/DCount direction,用于控制计数器是向上计数还是向下计数,高电平表示上计数,低电平表示下计数)输出信号为Q3~Q0Data Outputs ,表示最终输出的计数值) 。

 设计思路

首先根据框图的输入输出端口的要求,可以要求定义好代码的entity,即输入输出端口,输入信号有CLKRSTU_DD(3 DOWNTO 0)LD,输出端口为Q(3 DOWNTO 0)。然后根据真值表可知,RST需要实现异步清零功能,即只要RST为低电平,此时不需要考虑其他任何输入的状态,输出均为0,故RST信号的优先级最高,故使用IF语句,并将RST是否为0作为最先的判断条件,然后由于LDU_D信号均为同步触发信号,故需要在时钟的边沿才有效,因此有第二个if条件判断CLK信号的上升沿,当满足上升沿条件时,再判断LDU_D;根据真值表可知,当LD高电平时,此时无论U_D是什么状态,均为Synchronous Parallel Load

功能,故LD的优先级高于U_D,因此需要先判断LD是否为高电平,若为高,则将输入D(3 DOWNTO 0)赋值给Q(3 DOWNTO 0),此处定义一个中间变量cnt(3 DOWNTO 0),作为Q信号的缓存器,因为Q信号为端口输出信号,不能在进程中作为赋值语句的右侧。最后判断U_D信号的电平,当为高电平时,将cnt(3 DOWNTO 0)信号加1,若加到9,再返回0。当U_D为低电平时,将cnt(3 DOWNTO 0)信号减1,若减到0,再返回9。最后将cnt(3 DOWNTO 0)信号赋值给Q(3 DOWNTO 0)即完成设计的全部功能。


FPGA代码Verilog/VHDL代码资源下载:www.hdlcode.com


演示视频:

设计文档:

设计文档.doc

1. 工程文件

2. 程序文件

3. 程序编译

4. Testbench

5. 仿真图


部分代码展示:


LIBRARY ieee;
   USE ieee.std_logic_1164.all;
   USE ieee.std_logic_unsigned.all;
--a 4-bit universal decimal counter
ENTITY count IS
   PORT (
      CLK  : IN STD_LOGIC;--clock
      RST  : IN STD_LOGIC;--Asynchronous Reset Input
      U_D  : IN STD_LOGIC;--Count direction (up/down)
      D    : IN STD_LOGIC_VECTOR(3 DOWNTO 0);-- Parallel Data Inputs
      LD   : IN STD_LOGIC;--Synchronous Parallel Load
      Q    : OUT STD_LOGIC_VECTOR(3 DOWNTO 0)--Data Outputs
   );
END count;
ARCHITECTURE behave OF count IS
   SIGNAL cnt : STD_LOGIC_VECTOR(3 DOWNTO 0) := "0000";
BEGIN
   
   PROCESS (CLK, RST)
   BEGIN
      IF (RST = '0') THEN--Asynchronous Reset
         cnt <= "0000";
      ELSIF (CLK'EVENT AND CLK = '1') THEN
         IF (LD = '1') THEN--Synchronous Parallel Load
            cnt <= D;
         ELSIF (U_D = '1') THEN--Count Up
            IF (cnt = "1001") THEN--9
               cnt <= "0000";--0
            ELSE
               cnt <= cnt + "0001";--Count Up
            END IF;



代码文件(付费下载):



1、代码文件需要付费后才可见。
2、支付问题请联系微信公众号客服。
3、优质Verilog/VHDL代码资源,所见即所得。
Verilog/VHDL资源下载 » 基于FPGA的4位通用十进制计数器VHDL代码ISE仿真

注册为本站会员,充值100得150,详情咨询客服

目前为止共有 *** 位优秀的会员加入! 立刻加入会员