第一次编程测试(分频器)

一,分频器

  1. 定义
    分频器(Divider)是一种电子电路或设备,用于将输入信号的频率降低到较低的频率。它常用于数字系统、通信系统和计时应用中。
  2. 原理
    整数分频器使用计数器来实现频率的降低。计数器根据输入信号的边沿触发进行计数,当计数值达到预设的分频比时,输出一个脉冲,并将计数器清零重新开始计数。例如,一个2分频器会在每两个输入信号边沿之间输出一个脉冲,将输入信号的频率降低为一半。
  3. verilog代码实现
    在这里所了解的分频器主要是整数分频器,其主要的实现分为奇数分频和偶数分频:
    1.偶数分频:即在每个时钟上升沿使计数器+1,当计数器小于N/2-1时使得输出时钟为低,当大于等于N/2-1小于N-1时使输出时钟为高
    2.奇数分频:奇数分频的方法有许多种这种展示一下我所理解的跟同学所理解的方法
    (1)如果想要计数分频但是寄存器不可以计数分数所以我们可以使用两个中间输出时钟
    一个对上升沿敏感。一个对下降沿敏感,分别计数,当分得的时钟高电平比低电平多一个周期时将两个中间时钟相与(即低电平向高电平借用0.5周期),当分得的时钟低电平比高电平多一个周期时将两个中间时钟相或(即高电平向低电平借用0.5周期)
//第一种方法
module pre_N #(parameter N = 8) (
    input       wire        clk,    //系统时钟
    input       wire        rst_n,  //系统复位
    output      wire        clk_out //调频后信号
);

reg     clk_out_r;//调频后的时钟
wire    add_cnt;//计数开始使能
wire    end_cnt;//计数结束使能
wire    add_cnt1;//判断奇偶
reg     [5:0] cnt;//计数寄存器
reg     clk_out_a;
reg     clk_out_b;
reg     [5:0] cnt_a;
reg     [5:0] cnt_b;
wire     clk_out_ab;

assign add_cnt1 = (N%2==0)?1:0;
//计数模块
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        cnt <= 6'b0;
    end
    else if (add_cnt) begin
        if (end_cnt) begin
            cnt <= 6'b0;
        end
        else begin
            cnt <= cnt + 1'b1;
        end
    end
    else begin
        cnt <= cnt;
    end
end

assign add_cnt = 1;
assign end_cnt = add_cnt&&(cnt == N/2-1);

//时钟分频模块
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        clk_out_r <= 1'b0;
    end
    else if (end_cnt) begin
        clk_out_r <= ~clk_out_r;
    end
    else begin
        clk_out_r <= clk_out_r;
    end
end

//上升沿分频模块
always @(posedge clk or negedge rst_n) begin
    if (!rst_n) begin
        clk_out_a <= 1'b0;
        cnt_a <= 1'b0;
    end
    else begin
        if (cnt_a <N-1) begin
            if (cnt_a < (N-1)/2) begin
                clk_out_a <= 1'b0;
            end
            else if (cnt_a >=(N-1)/2) begin
                clk_out_a <= 1'b1;
            end
            else begin
                clk_out_a <= clk_out_a;
            end
            cnt_a <= cnt_a + 1;
        end
        else begin
            clk_out_a <= 1'b0;
            cnt_a <= 1'b0;
        end
    end
end

always @(negedge clk or negedge rst_n) begin
    if (!rst_n) begin
        clk_out_b <= 1'b0;
        cnt_b <= 1'b0;
    end
    else begin
        if (cnt_b <N-1) begin
            if (cnt_b < (N-1)/2) begin
                clk_out_b <= 1'b0;
            end
            else if (cnt_b >=(N-1)/2) begin
                clk_out_b <= 1'b1;
            end
            else begin
                clk_out_b <= clk_out_b;
            end
            cnt_b <= cnt_b + 1;
        end
        else begin
            clk_out_b <= 1'b0;
            cnt_b <= 1'b0;
        end
    end
end
assign clk_out_ab = clk_out_a|clk_out_b;
assign clk_out = (N%2==0)?clk_out_r:clk_out_ab;
endmodule

(2)使用组合逻辑对电频敏感,每次电频转换都使计数器+1,当计数器加到N-1时使输出电频翻转

module pre_N_2 #(parameter N = 7)(
    input   wire        clk     ,
    input   wire        rst_n   ,
    output  wire        clk_out        
);

reg			[5:0]	cnt	   	;
wire				add_cnt	;
wire				end_cnt	;
reg                clk_out_r;

always @(clk)begin //对于上升沿下降沿都进行计数
   if(!rst_n)begin
        cnt <= 'd0;
    end 
    else if(add_cnt)begin 
        if(end_cnt)begin 
            cnt <= 'd0;
        end
        else begin 
            cnt <= cnt + 1'b1;
        end 
    end
end 

assign add_cnt = 1;
assign end_cnt = add_cnt && cnt == N-1;

always @(clk)begin 
    if(!rst_n)begin
        clk_out_r <= 'd0;
    end 
    else if(end_cnt)begin 
        clk_out_r <= ~clk_out_r;//计满翻转
    end 
    else begin 
        clk_out_r <= clk_out_r;//未计满保持
    end 
end

assign clk_out = clk_out_r;
endmodule
  1. tb文件
`timescale 1ns/1ns

module pre_N_tb ();

reg clk;
reg rst_n;
wire    clk_out;

parameter CYCLE = 20;
parameter N     = 5;

always #(CYCLE/2) clk = ~clk;

initial begin
    clk = 1'b0;
    rst_n = 1'b0;
    #(20)
    rst_n = 1'b1;
    #(1000)
    $stop;
end


pre_N #(.N(N)) pre_N_inst(
        .clk        (clk),
        .rst_n      (rst_n),
        .clk_out    (clk_out)
);
endmodule
`timescale 1ns/1ns

module pre_N_2_tb ();

reg clk;
reg rst_n;
wire    clk_out;

parameter CYCLE = 20;
parameter N     = 5;

always #(CYCLE/2) clk = ~clk;

initial begin
    clk = 1'b0;
    rst_n = 1'b0;
    #(20)
    rst_n = 1'b1;
    #(1000)
    $stop;
end


pre_N_2 #(.N(N)) pre_N_2_inst(
        .clk        (clk),
        .rst_n      (rst_n),
        .clk_out    (clk_out)
);
endmodule
  1. 仿真波形
    在此只展示一个
    在这里插入图片描述

二.总结

对于分频器主要需要注意的是整数分频有奇数分频跟偶数分频,分频器主要是对时序逻辑电路中时钟理解的考察,其中的难点主要是奇数分频,只要掌握其中的方法还是比较好做,只要掌握时序逻辑电路的时钟信号的理解分频器还是很简单得。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/45015.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(三)RabbitMQ七种模式介绍与代码演示

Lison <dreamlison163.com>, v1.0.0, 2023.06.22 七种模式介绍与代码演示 文章目录 七种模式介绍与代码演示四大交换机四种交换机介绍 工作模式简单模式&#xff08;Hello World&#xff09;工作队列模式&#xff08;Work queues&#xff09;订阅模式&#xff08;Publis…

macOS Big Sur 11.7.9 (20G1426) 正式版 ISO、PKG、DMG、IPSW 下载

macOS Big Sur 11.7.9 (20G1426) 正式版 ISO、PKG、DMG、IPSW 下载 本站下载的 macOS 软件包&#xff0c;既可以拖拽到 Applications&#xff08;应用程序&#xff09;下直接安装&#xff0c;也可以制作启动 U 盘安装&#xff0c;或者在虚拟机中启动安装。另外也支持在 Window…

【FPGA/D6】

2023年7月25日 VGA控制器 视频23notecodetb 条件编译error时序图保存与读取&#xff1f;&#xff1f;RGBTFT显示屏 视频24PPI未分配的引脚或电平的解决方法 VGA控制器 视频23 note MCU单片机 VGA显示实时采集图像 行消隐/行同步/场同步/场消隐 CRT&#xff1a;阴极射线管 640…

94.qt qml-分页Table表格组件

在我们之前学习了87.qt qml-分页组件控件(支持设置任意折叠页数等)_qt分页控件_诺谦的博客-CSDN博客 然后我们又学习了Table实现,所以本章实现一个分页Table表格组件,配合分页控件, 模拟请求服务器数据来实现数据分解效果,因为一般使用分页的时候,一般都是分页请求,避免数…

Android TelephonyManager双卡获取数据开启状态异常的可能原因

背景 应用内不指定subId获取数据状态可能会错误&#xff0c;因为可能拿到voice的能力&#xff0c;而非data。 代码逻辑 1、通过TelephonyManager的isDataEnabled()没有指定subId时&#xff0c;调用内部方法isDataEnabledForReason&#xff0c;传入getId()参数以指定subid&am…

Hadoop——Hive运行环境搭建

Windows&#xff1a;10 JDK&#xff1a;1.8 Apache Hadoop&#xff1a;2.7.0 Apache Hive&#xff1a;2.1.1 Apache Hive src&#xff1a;1.2.2 MySQL&#xff1a;5.7 1、下载 Hadoop搭建 Apache Hive 2.1.1&#xff1a;https://archive.a…

【ArcGIS Pro微课1000例】0029:绘制全球海洋波纹荡漾效果图

本文讲解ArcGIS Pro3.0中,基于全球航洋面状矢量数据,绘制震撼全球海洋波纹荡漾效果图。 文章目录 一、效果预览二、效果制作三、参数详解一、效果预览 绘制好的海水波纹荡漾效果图如下: 下面我们来学习绘制过程。 二、效果制作 波纹荡漾效果需要在全局或者局部场景中制作…

【JVM】浅看JVM的运行流程和垃圾回收

1.JVM是什么 JVM&#xff08; Java Virtual Machine&#xff09;就是Java虚拟机。 Java的程序都运行在JVM中。 2.JVM的运行流程 JVM的执行流程&#xff1a; 程序在执行之前先要把java代码转换成字节码&#xff08;class文件&#xff09;&#xff0c;JVM 首先需要把字节码通过…

macbook 软件iMovie for Mac(专业视频剪辑工具)中文版

iMovie mac中文版是一款针对Mac平台量身定做的视频编辑工具&#xff0c;软件凭借流线型设计和直观的编辑功能&#xff0c;可以让您感受前所未有的方式制作好莱坞风格的预告片和精美电影&#xff0c;并且还可以浏览视频资料库&#xff0c;快速共享挚爱瞬间&#xff0c;创建精美的…

结构型设计模式之装饰器模式【设计模式系列】

系列文章目录 C技能系列 Linux通信架构系列 C高性能优化编程系列 深入理解软件架构设计系列 高级C并发线程编程 设计模式系列 期待你的关注哦&#xff01;&#xff01;&#xff01; 现在的一切都是为将来的梦想编织翅膀&#xff0c;让梦想在现实中展翅高飞。 Now everythi…

如何在Windows上恢复已删除的文件?

大多数人在无意中删除了一些重要文件后无法恢复。这些文件被暂时删除&#xff0c;直到我们清空回收站才会消失。你可以通过右键单击回收站中的文件并选择还原选项来轻松恢复这些文件。但是&#xff0c;如果你清理回收站删除了文件怎么办&#xff1f;或者不小心使用Shift Delet…

SpringCloud学习路线(10)——分布式搜索ElasticSeach基础

一、初识ES &#xff08;一&#xff09;概念&#xff1a; ES是一款开源搜索引擎&#xff0c;结合数据可视化【Kibana】、数据抓取【Logstash、Beats】共同集成为ELK&#xff08;Elastic Stack&#xff09;&#xff0c;ELK被广泛应用于日志数据分析和实时监控等领域&#xff0…

【数据挖掘】将NLP技术引入到股市分析

一、说明 在交易中实施的机器学习模型通常根据历史股票价格和其他定量数据进行训练&#xff0c;以预测未来的股票价格。但是&#xff0c;自然语言处理&#xff08;NLP&#xff09;使我们能够分析财务文档&#xff0c;例如10-k表格&#xff0c;以预测股票走势。 二、对自然语言处…

2023年Q2京东环境电器市场数据分析(京东数据产品)

今年Q2&#xff0c;环境电器市场中不少类目表现亮眼&#xff0c;尤其是以净水器、空气净化器、除湿机等为代表的环境健康电器。此外&#xff0c;像冷风扇这类具有强季节性特征的电器也呈现出比较好的增长态势。 接下来&#xff0c;结合具体数据我们一起来分析Q2环境电器市场中…

【已解决】jupyter notebook里已经安装了第三方库,还是提示导入失败

在jupyter notebook中运行Python代码&#xff0c;明明已经安装了第三方库&#xff0c;还是提示导入失败。 以导入pandas库为例&#xff0c;其他库同理&#xff1a; 报错代码&#xff1a; import pandas报错原因&#xff1a; 电脑上存在多个python运行环境&#xff08;比如&a…

JavaEE——Spring中存取Bean的注解

目录 一、存储Bean对象 1、定义 2、存储方式 &#xff08;1&#xff09;、类注解 【1】、Controller&#xff08;控制器存储&#xff09; 【2】、Service&#xff08;服务存储&#xff09; 【3】、Repository&#xff08;仓库存储&#xff09; 【4】、Component&#xf…

[JAVAee]线程安全

目录 线程安全的理解 线程不安全的原因 ①非原子性 ②可见性 ③代码重排序 体会何为不安全的线程 保证线程安全 一个代码在多线程的环境下就很容易出现错误. 线程安全的理解 线程安全是什么呢?通俗的来讲,线程安全就是在多线程的环境下,代码的结果是符合我们预期的,就…

Kafka基础架构与核心概念

Kafka简介 Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统&#xff0c;它可以处理消费者在网站中的所有动作流数据。架构特点是分区、多副本、多生产者、多订阅者&#xff0c;性能特点主要是…

VisualStudio如何进行插件开发?

文章目录 0.引言1.工具准备2.创建插件项目&#xff08;VSIX&#xff09;3.自定义VSIX属性4.创建一个command命令5.设置command名称6.编写command功能7.调试插件8.安装插件 0.引言 使用Visual Studio插件可以极大地提升开发效率、提供更好的集成环境、丰富扩展生态系统、方便调试…

python报错:‘unicodeescape‘ codec can‘t decode bytes解决办法

参考:https://blog.csdn.net/shuyudexiaowu/article/details/108771481 我的代码是这样&#xff1a; 错误原因是&#xff1a;python把字符串中的反斜杠“ \ ”当成了字符串的一部分&#xff0c;而不是反斜杠。 解决办法两个&#xff1a; 1、在文件目录前加个 r&#xff0c;&…