【Verilog基础】7.计数器

2023-10-29

4位计数器

module count4(out,reset,clk);
    output[3:0] out;
    input reset,clk;
    reg[3:0] out;
always @(posedge clk)
    begin
        if (reset) out<=0; 
        else out<=out+1; 
    end
endmodule

如果是电平触发的话,只需要把posedge clk 换成reset or clk 就可以了;

4位计数器--带清零端、置数端和使能端

module cnt16(co,q,clk,r,s,en,d);
    output[3:0] q; //计数输出端
    output co; //进位信号
    input clk,r,s,en; //时钟信号、清零端、置数端和使能端
    input[3:0] d; //预置数数据端
    reg [3:0] q;
    reg co;
always @(posedge clk)
     if(r)
         begin q=0; end
     else
         begin 
             if(s)
                 begin q=d; end
             else
                 if(en)
                     begin 
                         q=q+1;
                     if(q==4'b1111)
                         begin co=1; end
                      else
                         begin co=0; end
                      end
                 else
                     begin q=q; end
                 end
endmodule

同步置数和同步清零的计数器

module count(out,data,load,reset,clk);
    output[7:0] out;
    input[7:0] data;
    input load,clk,reset;
    reg[7:0] out;
always @(posedge clk) //clk 上升沿触发
    begin
        if (!reset) out = 8'h00; //同步清 0,低电平有效
            else if (load) out = data; //同步预置
        else out = out + 1; //计数
    end
endmodule

4 Johnson 计数器(异步复位)

Johnson 计数器是一种数字电路, 具有以反馈方式连接的一系列触发器。 如果位数为N,则Verilog Johnson计数器是对2N个状态进行计数的计数器。
该电路是一种特殊类型的移位寄存器, 中最后一个触发 器的补码输出反馈到第一个触发器的输入。 类似于环形计数器。

module johnson(clk,clr,out);
    input clk,clr;
    output[3:0] out;
    reg[3:0] out;
always @(posedge clk or posedge clr)
    begin
        if (clr) out<= 4'h0;
        else
        begin out<= out<< 1;
              out[0]<= ~out[3];
        end
    end
endmodule

十进制模 24 计数器

module cnt24(ten,one,co,clk,clr);
    output[3:0] ten,one;
    output co;
    input clk,clr;
    reg[3:0] ten,one;
    reg co;
always @(posedge clk)
    begin
         if(clr) 
             begin ten<=0;one<=0; end
         else
             begin
                 if({ten,one}==8'b00100011)
                 begin ten<=0;one<=0;co<=1; end
             else if(one==4'b1001)
                  begin one<=0;ten<=ten+1;co<=0; end
              else
                  begin one=one+1;co<=0; end
                 end
     end
endmodule

模为 60 BCD 码加法计数器

module count60(qout,cout,data,load,cin,reset,clk);
    output[7:0] qout;
    output cout;
    input[7:0] data;
    input load,cin,clk,reset;
    reg[7:0] qout;
always @(posedge clk) //clk 上升沿时刻计数
    begin
        if (reset) qout<=0; //同步复位
        else if(load) qout<=data; //同步置数
        else if(cin)
            begin
                if(qout[3:0]==9) //低位是否为 9,是则
                begin
                qout[3:0]<=0; //回 0,并判断高位是否为 5
                if (qout[7:4]==5) qout[7:4]<=0;
                else
                qout[7:4]<=qout[7:4]+1; //高位不为 5,则加 1
                end
                else //低位不为 9,则加 1
                qout[3:0]<=qout[3:0]+1;
           end
       end

assign cout=((qout==8'h59)&cin)?1:0; //产生进位输出信号
endmodule

减法计数器

module jian_cnt10(q,clk,rst);
    output[3:0] q; //计数器输出端
    input clk,rst; //时钟、复位
    reg[3:0] q;
always @(posedge clk)
    begin
        if(rst) 
             begin q<=0; end
         else if(q==4'b0000)
         begin q<=4'b1001; end
         else 
         begin q<=q-1; end
    end
endmodule
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Verilog基础】7.计数器 的相关文章

  • 比较数字进行排序然后得到中值

    使用按位或比较运算符对五个整数进行排序可以通过以下方式实现 首先获取最大的数字 然后获取第二大的数字 然后获取第三大的数字 依此类推 这是我获取最高数字的代码 include
  • Verilog 奇怪的仿真结果综合后

    我面临一个奇怪的问题 该代码适用于简单的 ALU 仅将感兴趣的代码粘贴到此处 always posedge clk or posedge rst begin if rst 1 begin mul valid shr 3 b000 end e
  • 如何在 Verilog 中定义带参数的模块?

    我想定义一个add有一个参数的模块 但我对新实例的声明进展不顺利 我想定义这个模块的一个实例 module add parameter wd 1 input wire wd 1 0 a b output wire wd 1 0 o assi
  • 如何使用 Verilog 宏模拟 $display?

    我想创建一个具有多个参数的宏 就像 display 一样 我的代码看起来像这样 但它不起作用 define format macro A write s sformatf A 这就是我调用 format macro 的方式 format m
  • Verilog、FPGA、统一寄存器的使用

    我有一个问题 关于我正在开发的 AGC SPI 控制器在我看来奇怪的行为 它是用 Verilog 完成的 针对的是 Xilinx Spartan 3e FPGA 该控制器是一个依赖外部输入来启动的 FSM FSM的状态存储在状态寄存器它没有
  • EDAplayground 中不显示时钟波形

    当尝试在 EDA Playground 中显示时钟波形时 出现错误 执行中断或达到最大运行时间 如何显示波形 EDA Playground 上的代码 module test reg clk initial begin dumpfile du
  • 「Verilog学习笔记」 Johnson Counter

    专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点 刷题网站用的是牛客网 timescale 1ns 1ns module JC counter input clk input rst n output reg 3 0
  • 为什么这个 verilog 关系语句返回 true?

    我有一条名为 sin hall2 的 9 位签名线 该语句返回 true sin hall2 8 0 gt 9 d1 当我查看模拟时 sin hall2 169 我假设这是 verilog 处理比较负数的方式 但我做错了什么 当我执行 si
  • x 和 z 值在 Verilog 中到底代表什么?

    Verilog 标准定义了四种类型的位值 0 1 x 和 z 其中 0 表示低 1 表示高 x 表示未知 z 表示未驱动网络 有几个问题 x 是否意味着我们不知道该值是 0 还是 1 0 或 1 或 z 或者该值是未知的并且可以是 0 1
  • 如何生成异步复位verilog总是阻塞凿子

    Chisel 始终生成敏感度列表中仅包含时钟的块 always posedge clk begin end 是否可以将模块配置为使用异步重置并生成这样的始终块 always posedge clk or posedge reset begi
  • 将枚举转换为逻辑

    考虑以下模块声明 module DFF d q CLK RESET parameter W 2 input W 1 0 d input CLK input RESET output logic W 1 0 q endmodule 当 d 和
  • 在verilog中将wire值转换为整数

    我想将电线中的数据转换为整数 例如 wire 2 0 w 3 b101 我想要一个将其转换为 5 并将其存储在整数中的方法 我怎样才能以比这更好的方式做到这一点 j 1 for i 0 i lt 2 i i 1 begin a a w i
  • 如何在 Verilog 中综合 While 循环?

    我尝试设计一个 Booth 乘法器 它在所有编译器中运行良好 包括 Modelsim Verilogger Extreme Aldec Active Hdl 和 Xilinx Isim 我知道模拟和综合是两个不同的过程 而且只有少数Veri
  • 开始后跟冒号和变量是什么意思?

    什么是data mux意思是这里 它只是块的名称吗 if PORT CONFIG 32 P0 1 b1 begin data mux end 这些是块名称 它们特别适用于generate块 例如 您可以定义一个generate块如 genv
  • 为什么 Verilog 不被视为编程语言? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 教授在课堂上说学生不应该说他们学会了用Verilog 编程 他说 Verilog 之类的东西不是用来编程的 而是用来设计的 那么 Verilog
  • 在 Verilog 程序中使用连续分配?

    在 Verilog 程序中使用连续赋值是否可能和 或有用 例如 是否有任何理由将assign里面一个always堵塞 例如这段代码 always begin assign data in Data end 此外 是否可以用这种方法生成顺序逻
  • Verilog 按位或 ("|") 单子

    我见过 Verilog 代码 其中使用了按位或运算符 目的是什么 例如 address 15 14 0 or address 15 14 io din ramrd 不能省略 吗在这些情况下 在这种情况下 它充当归约运算符 例如 4 b100
  • 具有内部赋值延迟的阻塞和非阻塞语句之间的区别

    以下 2 个 verilog 代码片段有什么区别 1 always in out 5 in AND 2 always in out lt 5 in 考虑到always块中不存在其他行 输出会有什么不同吗 问题参考幻灯片 16 参见 o5 和
  • Verilog 数组语法

    我是 Verilog 新手 并且遇到了很多麻烦 例如 我想要一个包含八个单元的数组 每个单元都是 8 位宽 以下不起作用 reg 7 0 transitionTable 0 7 assign transitionTable 0 10 仅仅做
  • Verilog 中如何使用函数?

    在我的 FPGA Verilog 课程中 我的教授只是回顾了函数 他说在函数中 你可以按程序编写代码 然后 当您想要调用该函数时 您可以在always块中调用它 即 程序性地 也可以使用分配语句来调用它 对我来说 如何使用过程代码编写函数

随机推荐

  • .NET/C#中使用Redis

    一 简介 在C 中使用Redis 一般有两种方式 1 ServiceStack Redis 据说是Redis官方推荐使用的驱动类库 但是是收费的 2 StackExchange Redis 可能性能要比ServiceStack Redis差
  • uni-app开发ios App,如何去掉底部安全空白区域

    在ios开发的过程当中 在ios设备上底部会出现一个安全空白区域 如果想要去掉 在manifest json中点开源码视图配置 将所有 iPhone X 刘海屏 底部安全区域背景颜色 自动适应 当前页面什么颜色会自动调整 代码 将所有 iP
  • COMP 9417 T2_2021 Lesson 6

    Pg1 54 逻辑回归和感知机的区别主要是多了一个求概率 逻辑回归的损失函数由最大似然推导而来 使预测概率分布与真实概率分布接近 感知机的损失函数可能有多种方法 可能有多层感知机 但他们本质的思想都是使预测的结果与真实结果误差更小 是函数拟
  • 解决sass的GBK and UTF-8问题

    问题 在ruby命令窗口sass watch global scss global css会报错 且生成的css文件中文注释是乱码的 根据提示是编码问题 gt gt gt Sass is watching for changes Press
  • 无线网开机不能用显示红色叉号

    操作系统不能上无线网络 一般是先检查无线网卡驱动程序是否正常 然后检查无线服务是否开启 用操作系统中自带网络诊断之后 显示此计算机上没有运行的windows无线服务 开始 运行 输入 services msc 点击确定 或按下回车键 Ent
  • elementUI switch 内部显示文字

    只需要加入一些css即可 deep el switch core before content 高 position absolute top 0 right 5px color fff is checked deep el switch
  • Swift语法学习--扩展与泛型

    文章目录 扩展 扩展定义 对方法进行扩展 通过扩展判断数组是否相同 泛型 使用泛型进行数组合并 使用泛型进行任意类型数组元素调换 扩展 扩展定义 对方法进行扩展 通过扩展判断数组是否相同 泛型 使用泛型进行数组合并 使用泛型进行任意类型数组
  • 点击链接重定向跳转微信公众号关注页、微信关注链接

    1 先获取你要设置的公众号的biz a 电脑进入公众号 点击右上角的 菜单 b 点击出现公众号的简介页面 再点击页面下面三个按钮中间的按钮 c 点击复制链接获取biz 例如 http mp weixin qq com mp getmasss
  • latex编辑器别把一整段放到一行里面

    如果是Winedit的话 ctrl W就行 其实就是设置自动换行
  • 【JavaSe】面向对象篇(十四) 异常

    JavaSe 面向对象篇 十四 异常 1 异常 1 1 异常概念 异常 就是不正常的意思 在生活中 医生说 你的身体某个部位有异常 该部位和正常相比有点不同 该部位的功能将受影响 在程序中的意思就是 异常 指的是程序在执行过程中 出现的非正
  • postgresql 连接超时_Postgre SQL连接服务器失败原因分析及解决方法

    首先这是登陆postgre sql时提示的错误信息 psql 无法联接到服务器 Connection refused 0x0000274D 10061 服务器是否在主机 localhost 1 上运行并且准备接受在端口 5432 上的 TC
  • 机器学习前沿热点–Deep Learning

    一Deep Learning的前世今生 二Deep Learning的基本思想和方法 三深度学习Deep Learning算法简介 不充分的深度是有害的 大脑有一个深度架构 认知过程看起来是深度的 四拓展学习推荐 五应用实例 六参考链接 深
  • windows server 2012 R2 远程桌面设置中仅允许运行使用网络级别选项灰色

    服务器远程开在外网 装完系统 仅允许使用网络级别身份验证的选项 状态为 灰色未勾选 一段时间之后 很多登录失败 占满内存 只能重启系统 开放外网的远程桌面 未输入凭据 直接到锁屏注销界面登录 致使大量未知用户错误登录 占满系统内存 都属于同
  • 面向前端的webview知识总结

    webview 本篇文主要面向前端同学食用 分别从简介 内核 组件 基本配置 加载 缓存机制 通信等几个方向列举安卓和iOS有关 webview 的知识点 希望前端在和客户端同学对接时不会太懵逼 简介 webview 是一个可以加载网页的可
  • 3.ESP32-S2 USB 挂载SPI-SD,当作U盘使用,无线U盘

    使用的 IDF 4 4 C语言开发 1 ESP32 S2 USB烧录 输出日志 2 ESP32 S2 USB 挂载内部Flash 当作U盘使用 无线U盘 3 ESP32 S2 USB 挂载SPI SD 当作U盘使用 无线U盘 4 ESP32
  • 欧拉函数模板

    欧拉函数 n varphi n n 表示 1 n
  • libvirt 报错

    执行virsh命令出现 下面的错误 error failed to connect to the hypervisor error no valid connection error Failed to connect socket to
  • Nginx 学习笔记01

    Nginx 学习笔记01 概念 Nginx是lgor Sysoev为俄罗斯访问量第二的rambler ru站点设计开发的 从2004年发布至今 凭借开源的力量 已经接近成熟与完善 Nginx功能丰富 可作为HTTP服务器 也可作为反向代理服
  • 打不到VarAsType的解决办法

    在uses单元加入Variants VarType function from Variants unit in Delphi 7 In Delphi 5 VarType function is declared in Systems un
  • 【Verilog基础】7.计数器

    4位计数器 module count4 out reset clk output 3 0 out input reset clk reg 3 0 out always posedge clk begin if reset out lt 0