FPGA自学之路2(计数器or6分频器(偶分频))

2023-11-04

先说一个今天碰到的modelsim报错

 原因在于代码模块名和文件名不一致,改成一致就不报错了

 下面是modelsim波形图时间间隔调整,时间间隔,一般调成ns

 

 下图是设置波形图数字进制,b是二进制,d是十进制,h是十六进制

下图左边红线是加黄色辅助线或者减少辅助线,右边红线是辅助线对准下一个上升沿或者下降沿

  

首先是计数器的框图,sys_clk是时钟信号,sys_rst_n是复位信号,cnt是中间变量起到计数功能。在开发板上以led灯实现,想做到1s中,前半秒led_out=0低电平亮灯,后半秒led_out=1高电平灭灯的效果。1s是50MHz,cnt计数到一半也就是24999999归零从新计数。

 

下面是verilog代码

module  counter
#(parameter       CNT_MAX =   25'd24_999_999)
(
    input           sys_clk     ,
    input           sys_rst_n   ,
    output  reg    led_out

);

reg     [24:0]  cnt;

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
    cnt <= 25'd0;
    else    if(cnt == CNT_MAX )
        cnt <= 25'd0;
    else
        cnt <= cnt + 25'd1;
        
always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        led_out <= 1'b0;
    else    if(cnt == CNT_MAX )
        led_out <= ~led_out;
    else
        led_out <= led_out;

endmodule

这里用到了parameter函数,就是定义一个数值,模块头部就可以随时修改数值,方便以后修改。

下面是写的tb文件,这边建议归零计数间隔缩小,有助于验证逻辑代码,毕竟50M的一半太大了。这里间隔设置的24ns

`timescale 1ns/1ns
module  tb_counter();
reg sys_clk;
reg sys_rst_n;

wire led_out;

initial
    begin
        sys_clk   = 1'b1; 
        sys_rst_n = 1'b0; 
        #20 
        sys_rst_n = 1'b1; 
    end 

always #10 sys_clk = ~sys_clk;

initial
    begin
    $timeformat(-9,0,"ns",6);
    $monitor("@time %t : led_out = %b  ",$time,led_out);
    end

counter  
#(      .CNT_MAX (25'd24))
counter_inst
(
         .sys_clk   (sys_clk)  ,
         .sys_rst_n (sys_rst_n)  ,
         .led_out   (led_out)

);


endmodule

接下来是6分频,也就是每6个时钟周期就反转一次,创建一个新的时钟信号

 这里有个问题,这种分频方式(分频)在低速下是没有问题的,高速下是有问题的。原因在于高速下下面那个6分频信号时间间隔太大了,与最原始的时钟信号sys_clk脉宽差太多了。所以一般采用下面方法(降频)6分频,不产生新的时钟信号,而是在没6个时钟周期产生一次高电平提醒。

 详细差别如下所示,同样是每6个时钟周期a+1的指令,下面是第一种分频

always@(posedge clk_out or negedge sys_rst_n)

        if(sys_rst_n == 1'b0)
            a<= 25'd0;
    else    
        a <= a + 1'b1;

这是第二种降频

always@(posedge sys_clk or negedge sys_rst_n)

        if(sys_rst_n == 1'b0)
    a<= 25'd0;
    else    if(cnt_flag == 1 )//这是第二种用cnt_flag做标志a+1,本质还是sys_clk做时钟信号
        a <= a + 1'b1;

        else

                a <= a ;

接下来是6分频的rtl代码,注释里面是第一种分频方式,注释外面是第二种分频方式降频

module  divider_six
(
    input   wire    sys_clk,
    input   wire    sys_rst_n,
    output  reg     clk_flag
    //output  reg     clk_out

);

    
reg     [2:0]   cnt;

/*always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        cnt <= 2'd0;
    else    if(cnt == 2'd2)
        cnt <= 2'd0;
    else
        cnt <= cnt + 2'd1;
        
always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        clk_out <= 1'b0;
    else if(cnt == 2'd2)
        clk_out <= ~clk_out;
    else 
        clk_out <= clk_out;*/

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        cnt <= 3'd0;
    else    if(cnt == 3'd5)
        cnt <= 3'd0;
    else
        cnt <= cnt + 3'd1;

always@(posedge sys_clk or negedge sys_rst_n)
    if(sys_rst_n == 1'b0)
        clk_flag <= 1'b0;
    else    if(cnt == 3'd4)
        clk_flag <= 1'b1;
    else 
        clk_flag <= 1'b0;  

endmodule

接下来是tb文件代码

`timescale 1ns/1ns
module  tb_divider_six();
reg     sys_clk;
reg     sys_rst_n;
wire    clk_flag;

initial
    begin
    sys_clk <= 1'b0;
    sys_rst_n <= 1'b0;
    #20
    sys_rst_n <= 1'b1;  
    end 


always #10 sys_clk <= ~sys_clk;


divider_six  divider_six_inst
(
        .sys_clk   (sys_clk) ,
        .sys_rst_n (sys_rst_n) ,
                  
        .clk_flag   (clk_flag)

);


endmodule

分频器本质其实就是计数器,核心都是计数器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FPGA自学之路2(计数器or6分频器(偶分频)) 的相关文章

  • FPGA零基础学习之Vivado-ROM使用教程

    FPGA零基础学习之Vivado ROM使用教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者都
  • 在vivado中使用tcl脚本(UG894)

    本文源自UG894 主要介绍如何在vivado中使用tcl脚本 1 vivado中如何获取tcl help vivado中任何自带的命令都可以通过 help 获取帮助信息 也可以直接输入 help 取得vivado命令合集 并通过 help
  • 各种FIFO硬件设计(FIFO概念、异步、同步、非2次幂深度FIFO)

    文章目录 一 FIFO概述 二 FIFO分类 三 FIFO重要信号与参数 3 1 信号 3 2 参数 3 2 1 data depth的确定 四 FIFO存储原理 五 同步FIFO 5 1 空满信号判断 5 2 同步FIFO源码 5 3 测
  • 基于单光子探测的多脉冲周期符合远距离测距

    激光测距技术通过发射主动激光信号对目标进行探测 接收由目标漫反射回来的回波信号并进行统计 处理及换算 从而得到目标的距离 速度信息 实现对目标距离信息的探测 凭借其系统简单 操作灵活 高精度等特点 被广泛运用于民用 科研及军事等各类场合 基
  • Matlab 高斯信道下QPSK通带通信系统的简单仿真

    1 原理 2 仿真 3 总结反思 4 参考资料 1 原理 QPSK的具体内容请参考百度 QPSK的调制jie框图大致如下 QPSK信号可以采用正交调制的方式产生 如第一张图片的左半部分 I路信号与cos 信号相乘 Q 路信号与sin信号相乘
  • FPGA零基础学习之Vivado-UART驱动教程

    FPGA零基础学习之Vivado UART驱动教程 本系列将带来FPGA的系统性学习 从最基本的数字电路基础开始 最详细操作步骤 最直白的言语描述 手把手的 傻瓜式 讲解 让电子 信息 通信类专业学生 初入职场小白及打算进阶提升的职业开发者
  • MOS管的知识,看这一篇就可以了

    转载 21ic电子网 2020 11 15 18 19 以下文章来源于记得诚电子设计 作者记得诚 记得诚电子设计 分享电子硬件知识 永远相信美好的事情即将发生 今天的文章简单总结一下MOS管 如下是本文目录 场效应管分类 场效应管分为结型
  • 【FPGA】:频率测量

    转载 1 FPGA频率测量的三种方法 直接测量法 间接测量法 等精度测量法
  • 上拉电阻和下拉电阻

    一 定义 上拉电阻 将一个不确定的信号 通过一个电阻与电源VCC相连 固定在高电平 下拉电阻 将一个不确定的信号 通过一个电阻与地GND相连 固定在低电平 二 作用 提高输出信号驱动能力 确定输入信号电平 防干扰 限流 阻抗匹配 抗回波干扰
  • 八、RISC-V SoC外设——GPIO接口 代码讲解

    前几篇博文中注释了RISC V的内核CPU部分 从这篇开始来介绍RISC V SoC的外设部分 另外 在最后一个章节中会上传额外添加详细注释的工程代码 完全开源 如有需要可自行下载 目录 0 RISC V SoC注解系列文章目录 1 结构
  • 八段数码管动态显示(输入数据为BCD编码)

    八段数码管动态显示 输入数据为BCD编码 一 数码管概述 图1 八段共阴数码管内部等效原理图 图2 八段共阳数码管内部等效原理图 上面两图分别是对应八段共阴 共阳的数码管内部等效图 共阴是将八个LED数码管的阴极连接在一起接低 阳极segm
  • TestBench编写_激励产生

    TestBench编写 激励产生 TestBench编写 激励产生 基本背景 读取函数介绍 a fopen函数使用 b fread函数使用 c fclose函数使用 实际使用 TestBench编写 激励产生 基本背景 最近遇到项目中需要对
  • 【Xilinx Vivado时序分析/约束系列4】FPGA开发时序分析/约束-实验工程上手实操

    目录 建立工程 添加顶层 模块1 模块2 添加约束文件 编辑时钟约束 打开布线设计 代码代表的含义 时序报告 进行时序分析 Summary 包含了汇总的信息量 Source Clock Path 这部分是表示Tclk1的延时细节 Data
  • 【数字IC】从零开始的Verilog SPI设计

    从零开始的Verilog SPI协议设计 一 写在前面 1 1 协议标准 1 2 数字IC组件代码 1 3 设计要求 1 4 其他协议解读 1 4 1 UART协议 1 4 2 SPI协议 1 4 3 I2C协议 1 4 4 AXI协议 二
  • 蓝桥杯真题:迷宫

    目录 题目描述 运行限制 dfs bfs 结果 题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 下图给出了一个迷宫的平面图 其中标记为 11 的为障碍 标记为 00 的为可以通行的地方 010000 000
  • 基于FPGA的AHT10传感器温湿度读取

    文章目录 一 系统框架 二 i2c接口 三 i2c控制模块 状态机设计 状态转移图 START INIT CHECK INIT IDLE TRIGGER WAIT READ 代码 四 数据处理模块 串口 代码 五 仿真 testbench设
  • 【ZYNQ学习】PL第一课

    这节课讲什么 这节课的名字本来是想写为LED 但这一课里除了LED也有按键 又想换为GPIO控制 但关于PL的GPIO控制 不应该这么草率和简单 而且这一课有很多和ZYNQ或者PL关联性不强的东西要说 所以我写了删删了写改了好几遍 终于定为
  • 串口通信知识点总结

    串口是串行接口 serial port 的简称 也称为串行通信接口或COM接口 串口通信是指采用串行通信协议 serial communication 在一条信号线上将数据一个比特一个比特地逐位进行传输的通信模式 串口按电气标准及协议来划分
  • MINI-UTDE 10 BASE-T 集成控制器

    MINI UTDE 10 BASE T 集成控制器 MINI UTDE 10 BASE T 拥有多达三个本地I O板和远程I OS总线通信 为用户提供了一系列生产单元功能的单一控制点 包括诸如夹头 反馈器和辅助机器等外围生产设备 支持所有主
  • DSCA190V 57310001-PK

    DSCA190V 57310001 PK DSCA190V 57310001 PK 具有两个可编程继电器功能 并安装在坚固的 XP 外壳中 DSCA190V 57310001 PK 即可使用 只需最少的最终用户校准 DSCA190V 573

随机推荐

  • BES(恒玄) 提示音解析

    今天 继续讲解BES平台 UI 最后模块 提示音 提示音这一块比较繁琐 也很容易出问题 我们就 提示音实现机制 问题点 做个全面的讲解 BES 提示音分为两种 触发模式 第一种是打断的 第二种是mix类型的 首先 说下 BES单机模式下 提
  • Java 中的Object串行化(Serializable)

    假如你想保存一个对象 object 则这个对象所属类必须实现Serializable接口 当串行化一个对象时 Java会保存对象的完整的 对象图 即对该对象引用的其他对象 也进行串行化 当然 那些 其他对象 也要实现Serializable
  • web前端开发—Flex布局

    目录 Flex布局 1 思考 2 Flex布局 弹性布局 3 作用 4 设置方式 5 组成部分 6 主轴对齐方式 7 侧轴对齐方式 8 伸缩比 9 主轴方向 10 弹性盒子换行 Flex布局 目标 能够使用Flex布局模型灵活 快速的开发网
  • 初探webAssembly

    1 WebAssembly是什么 一种运行在现代网络浏览器中的新型代码 并且提供新的性能特性和效果 W3C WebAssembly Community Group开发的一项网络标准 对于浏览器而言 WebAssembly 提供了一条途径 让
  • Spring-boot中过滤器与拦截器

    1 过滤器 其实过滤器 Filter 跟Servlet很相似 都是java的一个组件 即请求发送到servlet之前 可以将其拦截和处理请求 也可以在serlvet结束工作之后 在响应发回之前处理响应 做一些事情 因此 可以理解为过滤器fi
  • powerdesigner 连接mysql提示“connection test failed”

    win10电脑 64位环境 powerdesigner 连接mysql提示 connection test failed 该如何解决 1 把64位的jdk换成32位的jdk 原的64的位不用卸载 2 PowerDesigner Tools
  • 蓝牙之六-A2dp代码调用流程

    上图描述的是蓝牙协议栈 通过该图 查看A2dp的代码在协议栈的调用流程 其分层架构如下 1 蓝牙的系统服务service通过JNI与bluedroid协议栈进行通信 协议栈分为两层 Bluetooth Embedded System BTE
  • .NET页面之间传值的几种方式总结

    1 QueryString 当页面上的form以get方式向页面发送请求数据时 web server将请求数据放入一名为QEURY STRING的环境变量中 QeueryString方法从这个变量中取出相应的值 先建立两个WebForm 分
  • FFmpeg通过摄像头实现对视频流进行解码并显示测试代码(新接口)

    在https blog csdn net fengbingchun article details 93975325 中给出了通过旧接口即FFmpeg中已废弃的接口实现通过摄像头获取视频流然后解码并显示的测试代码 这里通过使用FFmpeg中
  • 基于ROS的无人车模型预测控制(MPC)C++实现

    基于ROS的无人车模型预测控制 MPC C 实现 最近在做毕业设计的控制器部分 网上关于cpp实现模型预测控制的资料很少 基本都是Matlab Simulink实现 顺手写一下学习过程 1 建模方法 模型预测控制的基本原理本文不作赘述 可以
  • CGSS2015数据及对应问卷

    根据公开数据辛苦整理 形成CGSS2015数据及对应问卷 中国综合社会调查 Chinese General Social Survey CGSS 始于2003年 是我国最早的全国性 综合性 连续性学术调查项目 CGSS系统 全面地收集社会
  • Nginx+keepalived 双机热备(主从模式)

    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的 做好负载均衡架构 可以实现故障转移和高可用环境 避免单点故障 保证网站健康持续运行 关于负载均衡介绍 可以参考 linux负载均衡总结性说明 四层负载 七层负载 由于
  • CentOS7.9安装elasticsearch的Head插件

    目录 1 下载安装包 2 安装依赖环境 2 1 安装node 2 2 安装grunt 3 安装head插件 1 下载安装包 CentOS7 9安装elasticsearch 8 3 1 kibana 8 3 1是以下文档安装的 CentOS
  • 【supplemental】On_Distillation_of_CVPR_2023_supplemental

    supplemental On Distillation of CVPR 2023 supplemental 一 前言 A Results overview B Pixel space distillation B 1 Teacher mo
  • 文件快速拷贝工具FastCopy

    文件快速拷贝工具FastCopy 大家在使用电脑的时候经常用到复制 粘贴 删除等命令 对于小文件来讲操作瞬间完成 可对于大文件可能少则数分钟甚至数小时 比如将Offices2003安装程序从硬盘往U盘上拷贝 则经历了一个半小时 时间是多么的
  • Python爬虫:英雄联盟近期战绩查询

    c语言选手早已听说Python的方便和其各大爬虫模块的实用性 于是暑假无所事事的我决定在没有系统学习Python语法的情况下 一边写一个和自己兴趣有关的爬虫 一边学习一下Python方便的语法 体验Python的方便之处 一 用到的语法 1
  • QT 信号槽 lambda

    QCheckBox checkBox connect checkBox QCheckBox clicked this emit this gt slot check btn connect checkBox static cast
  • 通过AT指令访问SIM卡

    不借助读写卡工具 直接通过AT指令访问SIM卡 一 命令类型 1 AT CRSM 对于SIM卡 参考3GPP 51 011 对于USIM卡 参考ETSI TS 102 221 2 AT CSIM 参考3GPP TS 27 007 二 常用命
  • Mybatis学习笔记1:CRUD与配置解析

    文章目录 1 简介 1 1 什么是Mybatis 1 2 持久化 1 3 持久层 1 4 为什么需要Mybatis 2 第一个Mybatis程序 2 1 搭建环境 2 2 创建一个模块 2 3 编写代码 2 4 测试 2 5 作用域 Sco
  • FPGA自学之路2(计数器or6分频器(偶分频))

    先说一个今天碰到的modelsim报错 原因在于代码模块名和文件名不一致 改成一致就不报错了 下面是modelsim波形图时间间隔调整 时间间隔 一般调成ns 下图是设置波形图数字进制 b是二进制 d是十进制 h是十六进制 下图左边红线是加