VHDL设计----十进制计数器

一、异步复位加法计数器

代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity CNT10 is
    port(
        CLK,RST,EN: in std_logic;
        DOUT : out std_logic_vector (3 downto 0);
        COUT : OUT std_logic
    );
end CNT10;
architecture behav of CNT10 is
begin
    process(CLK,RST,EN)
        variable Q : std_logic_vector (3 downto 0);
    begin
    if RST = ‘1‘ then Q := (others => ‘0‘);
    elsif CLK ‘event and CLK = ‘1‘ then
            if EN = ‘1‘ then
                if Q < 9 then Q := Q + 1;
                else Q := (others => ‘0‘);
                end if;
            end if;
    end if;
    if Q = "1001" then COUT <= ‘1‘;
    else COUT <= ‘0‘;
    end if;
    DOUT <= Q;
    end process;
end behav;

仿真:

RST信号与CLK信号无关,随时可以置零

二、同步复位加法计数器

代码:

library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity CNT10 is
    port(
        CLK,RST,EN: in std_logic;
        DOUT : out std_logic_vector (3 downto 0);
        COUT : OUT std_logic
    );
end CNT10;
architecture behav of CNT10 is
begin
    process(CLK,RST,EN)
        variable Q : std_logic_vector (3 downto 0);
    begin
    if CLK ‘event and CLK = ‘1‘ then
        if RST = ‘1‘ then Q := (others => ‘0‘);
        else
            if EN = ‘1‘ then
                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 behav;

仿真:

RST信号只有等到CLK信号的下一个上升沿到时才能清零

三、总结

所谓“同步”是指与系统时钟同步。同步复位是指当复位信号有效时,并不立刻生效,而是要等到复位信号有效之后系统时钟的有效边沿到达时才会生效;
而异步复位则是立刻生效的,只要复位信号有效,无论系统时钟是怎样的,系统都会立即被复位。
在用VHDL描述复位信号时,在系统时钟有效边沿到达之后才判断同步复位是否有效;而对异步复位的判断则与系统时钟无关。

同步复位:
IF clock‘event AND clock=‘1‘ THEN
    IF reset=‘1‘ THEN
        -- 复位系统
    ELSE
        -- 正常运作
    END IF;
END IF;
异步复位:
IF reset=‘1‘ THEN
    -- 复位系统
ELSIF clock‘event AND clock=‘1‘ THEN
    -- 正常运作
END IF;

原文地址:https://www.cnblogs.com/PythonFCG/p/8710898.html

时间: 2024-11-09 04:51:53

VHDL设计----十进制计数器的相关文章

verilog设计十进制计数器(含进位位)

十进制计数器: 设计要求: 1.每当计数器值为4'b001时,自动回到4'b0000 2.每个时钟沿计数器值加1 3.进位输出carry应该与4'b1001同周期输出 4.异步复位 module cnt10 ( clk, rst_n, carry, cnt ); input clk, rst_n; output carry; output [3:0] cnt; reg carry; reg [3:0] cnt; always @( posedge clk or negedge rst_n ) b

FPGA学习记录_设计一个计数器

此处设计一个数器,使 学习板上 的 LED 状态每 500ms翻转一次. 学习板上晶振为50MHz,也就是说时钟周期为 20ns , 这样可以计算得出 500ms = 500_000_000ns/20,即需要计数器 计数 25_000_000 次,也就是需要一个至少 25 位的计数器( 位的计数器( 225>25_000_000>224 ).且每当计数次达到需要清零并重新计数. 1.计数器原理        计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是

用VHDL设计正弦信号发生器

正弦信号发生器的结构由3部分组成: 1.计数器或地址信号发生器,要根据ROM大小来确定地址发生器宽度.(其实验选择6位地址信号发生器给ROM) 2.正弦信号数据存储ROM(地址宽度6位,数据宽度8位),包含64个字的完整正弦波数据(1个完整周期) 3.8位D/A模块(采用TLC5602超高频数模转换器),实现数模转换,输出模拟正弦波信号. 结构图 在正弦信号发生器结构图中,地址信号发生器的时钟信号有clk提供,假设其频率为f0,正弦波数据ROM中存放每周期64个字节的波形数据,则8位 D/A转换

VHDL设计时参数定义的方法 例子

-- SPtb LIBRARY ieee; USE ieee.std_logic_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; use std.textio.all; use ieee.std_logic_textio.all;   -- Uncomment the following library declaration if using -- arithmetic functions wit

用VHDL设计信号发生器

信号发生器要求: 信号发生器程序: library ieee;use ieee.std_logic_1164.all;entity signal_gen1 isport(clk:in bit;wave:out bit);end signal_gen1;architecture bhv of signal_gen1 isbeginprocessvariable count: integer range 0 to 7;beginwait until clk'event and clk='1';cas

利用IP核设计高性能的计数器

利用Quartus II的LPM_counter IP核进行设计(利用IP核设计可以迅速高效的完成产品的设计) 新建工程 调用IP核 创建一个新的IP核 选择LMP_COUNTER,语言类型,输出路径. 选择希望输出的寄存器是多少位的,计数类型, 选择计数器类型(直接计数还是以模的形式计数),是否需要时钟使能和计数使能信号.进位链的输入和进位链的输出. 清零加载等信号 之后一直next直到finish 创建成功后的IP核的文件信息 将counter.v文件加载到软件中 打开可以看到其中的接口文件

微架构设计:微博计数器的设计

作者:@cydu 来源: http://qing.weibo.com/1639780001/61bd0ea133002460.html http://qing.weibo.com/1639780001/61bd0ea1330025sq.html 背景:  每一条微博的转发和评论背后都是一串串说不完的故事,但是今天主要讲的是 计数服务,计数服务详尽地记录着每条微博 被评论的次数 和 被转发的次数,当然也还有更多的喜怒哀乐都记录于此. 数据量:   微博总数量:  千亿级 而且每秒都在飞速增长中.每

[转]消除FPGA设计中的毛刺问题

一.FPGA(Field Programmable Gate Array)以其容量大.功能强以及可靠性高等特点,在现代数字通信系统中得到广泛的应用.采用FPGA设计数字电路已经成为数字电路系统领域的主要设计方式之一.在FPGA的设计中,毛刺现象是长期困扰电子设计工程师的设计问题之一,是影响工程师设计效率和数字系统设计有效性和可靠性的主要因素.由于信号在FPGA的内部走线和通过逻辑单元时造成的延迟,在多路信号变化的瞬间,组合逻辑的输出常常产生一些小的尖峰,即毛刺信号,这是由FPGA内部结构特性决定

数字逻辑与EDA设计

目录 第一章 数字逻辑基础 1.1数制与码制★★★ 数制 码制 1.2基本及常用的逻辑运算★★ 1.2逻辑函数表示方法★★ 1.3逻辑函数的化简★★★ 1.4常用74HC系列门电路芯片★ 第二章 组合逻辑电路 2.1组合逻辑电路的分析方法★★★ 2.2常用的组合逻辑电路(多考察各种器的输入输出端设计) 2.3组合逻辑电路的设计方法★★★ 2.4组合逻辑电路的时序分析★★★ 第三章 时序逻辑电路 3.1时序电路逻辑功能的表示方法★★ 3.2锁存器与触发器 3.3时序电路的分析方法★★★ 3.4常用