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 )
     begin
        if ( ~rst_n )
         begin
           cnt <= 4‘b0000;
         end
       else if ( cnt == 4‘b1001 )
         begin
           cnt <= 4‘b0000;
         end
      else
         begin
           cnt <= cnt + 4‘b0001;
         end
    end

  always @(posedge clk or negedge rst_n)
  begin
     if(!rst_n)
     begin
        carry <= 1‘b0;
     end
     else if(cnt == 4‘b1000)
     begin
        carry <= 1‘b1;
     end
     else
     carry<= 1‘b0;
  end
  endmodule

测试程序:

  `timescale 1ns/1ps
  module cnt10_tb();

  reg clk, rst_n;
  wire carry;
  wire [3:0] cnt;

  always #10 clk = ~clk;

  cnt10 cnt10_tb(
   .clk(clk),
  .rst_n(rst_n),
  .carry(carry),
  .cnt(cnt)
   );
  initial
  begin
     clk = 1‘b0;
     rst_n = 1‘b1;
     #10 rst_n = 1‘b0;
     #10 rst_n = 1‘b1;
  end
  endmodule

波形图:

在这个十进制计数器中,唯一要注意的一点就是进位位carry变化的时刻,如果是为了使下一级能正确接收到前一级的进位位标识,要在计数到九时使进位位有效;如上图波形所示。

时间: 2024-11-19 00:22:10

verilog设计十进制计数器(含进位位)的相关文章

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 be

分频器的verilog设计

笔者最近由于实验室老师的任务安排重新又看了一下分频器的verilog实现,现总结如下,待以后查看之用(重点是查看计数器计到哪个值clk_out进行状态翻转) 1.偶数分频占空比为50% 其实质还是一个N计数器模块来实现,首先要有复位信号,这个复位信号的作用就是使计数器和分频输出clk_out刚开始有一个复位值,其次就是计数翻转了,注意这里是计到哪个值翻转,首先刚开始时reset复位时计数器赋初值为0,然后计数器计到N/2-1时进行clk-out状态翻转,即clk_out<=~clk_out,此时

windows7所有版本迅雷地址下载集合(含32位和64位) - imsoft.cnblogs

Windows7 SP1旗舰版 32位官方原版下载: ed2k://|file|/cn_windows_7_ultimate_with_sp1_x86_dvd_618763.iso|2651877376|D6A0D9FDB8C67A65B92B4C1AC197109C|/ Windows7 SP1旗舰版 64位官方原版下载: ed2k://|file|cn_windows_7_ultimate_with_sp1_x64_dvd_618537.iso|3419052032|56E90251E665

【CPU微架构设计】利用Verilog设计基于饱和计数器和BTB的分支预测器

在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的参数和执行结果,当处理新的分支/跳转指令时,BPU将根据已有的统计结果和当前分支跳转指令的参数,预测其执行结果,为流水线取指提供决策依据,进而提高流水线效率. 下面讨论提出分支预测机制的主要原因和实际意义: 在流水线处理分支跳转指令时,目标地址往往需要推迟到指令的执行阶段才能运算得出,在此之前处理器无法及时得知下一条指令的取指地址,因此无法

全数字锁相环(PLL)的原理简介以及verilog设计代码

随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁相环的直流零点漂移.器件饱和及易受电源和环境温度变化等缺点,此外还具有对离散样值的实时处理能力,已成为锁相技术发展的方向. 所谓数字PLL,就是指应用于数字系统的PLL,也就是说数字PLL中的各个模块都是以数字器件来实现的,是一个数字的电路. 数字锁相环的优点是电路最简单有效,可采用没有压控的晶振,

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

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

基于basys2驱动LCDQC12864B的verilog设计图片显示

前言 在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA学习交流群里问问题的时候,被前辈指教,说给我最好的指教便是别在玩这个了,多看看关于FPGA方面的书籍,比做这个单片机做的东西价值强多了.现在想来确实,自从学习FPGA以来,看过的书没有多少,只是想做个什么了,就在网上找找例程,照抄下来,把算法推理一遍,下个板子实现了,便以为自己会了懂了,要是自己在写一个便问题百出.那么菜鸟始终是菜鸟.自己根本没有掌握FPGA的设计思想和优势,

每日算法之四十八:Plus One (数组表示的十进制加一进位)以及求Sqrt(x)

给定数组表示的十进制数,加一操作.结果依然用十进制的数组表示.这里主要注意最高位(digit[0])依然有进位,即溢出的情况. Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored such that the most significant digit is at the head of the list. <span style=

Verilog设计中的锁存器

问题: 什么是锁存器? 什么时候出现锁存器? 锁存器对电路有什么影响? 如何在FPGA设计中避免锁存器? 在FPGA设计中应该避免锁存器.实际上,锁存器与D触发器实现的逻辑功能基本相同,都有暂存数据的功能.但如果两者都由与非门搭建的话,锁存器耗用的逻辑资源要比D触发器少(D触发器需要12个MOS管,锁存器只需6个MOS管),锁存器的集成度更高.所以在的ASIC设计中会用到锁存器.但锁存器对毛刺敏感,无异步复位端,不能让芯片在上电时处在确定的状态:另外,锁存器会使静态时序分析变得很复杂,不利于设计