二分频和三分频

二分频:将输入频率CLK分为原来的 1/2 。

实现:在每次CLK的上升沿或下降沿将输出翻转。

三分频

1/3占空比。

实现:可使用上升沿或下降沿计数生成输出。需要一个两位计数器。

  1. 第一个CLK,输出Q翻转,计数器加1;
  2. 第二个CLK,输出Q不变,计数器加1;
  3. 第三个CLK,输出Q翻转,计数器清零。

50%占空比。

实现:将上升沿生成的Q1和下降沿生成的Q2两个1/3占空比相或。

code:

module DividerMultiple(
input clk_i,
input rst_n_i,
output div2_o,
output div3_o,
output [:]div3p_o,
output [:]div3n_o
// output [1:0]div3_r,
// output div3_75
);
//***************
reg div2_o_r;
//****************
reg [:] pos_cnt;
reg [:] neg_cnt;
reg div3_o_r0;
reg div3_o_r1;
//reg div3p_o;
//reg div3n_o;
//reg [1:0]div3_r;
//reg div3_75;
//******************* //always@(posedge clk_i or negedge rst_n_i)
//begin
// if(!rst_n_i)begin
// div3_r <= 2'b00;
// div3_75 <= 1'b0;
// end
// else begin
// if(div3_r == 2'b00) begin
// div3_75 <= ~div3_75;
// div3_r <= div3_r + 1'b1;
// end
// else if(div3_r == 2'b10) begin
// div3_75 <= ~div3_75;
// div3_r <= 2'b00;
// end
// else
// div3_r <= 2'b00;
// end
//end //two divided-frequency
always@(posedge clk_i or negedge rst_n_i)
begin
if(!rst_n_i)begin
div2_o_r <= 'b0;
end
else begin
div2_o_r <= ~div2_o_r;
end
end //three divided-frequency
always@(posedge clk_i or negedge rst_n_i) //上升沿计数
begin
if(!rst_n_i)begin
pos_cnt<='b00;
end
else begin
if(pos_cnt=='d2)
pos_cnt<='b00;
else
pos_cnt<=pos_cnt+'b1;
end
end
always@(negedge clk_i or negedge rst_n_i) //下降沿计数
begin
if(!rst_n_i)begin
neg_cnt<='b00;
end
else begin
if(neg_cnt=='d2) begin
neg_cnt<='b00;
end
else
neg_cnt<=neg_cnt+'b1;
end
end
always@(posedge clk_i or negedge rst_n_i)
begin
if(!rst_n_i)
div3_o_r0<='b0;
else
if(pos_cnt<'d1) div3_o_r0<=1'b1;
else div3_o_r0<='b0;
end
always@(negedge clk_i or negedge rst_n_i)
begin
if(!rst_n_i)
div3_o_r1<='b0;
else
if(neg_cnt<'d1) div3_o_r1<=1'b1;
else div3_o_r1<='b0;
end assign div2_o = div2_o_r;
assign div3_o = div3_o_r0 | div3_o_r1; //相或
assign div3p_o = div3_o_r0;
assign div3n_o = div3_o_r1; endmodule

testbench

module Divider_Multiple_tb;
// Inputs
reg clk_i;
reg rst_n_i;
// Outputs
wire div2_o;
wire div3_o;
wire [:]div3p_o;
wire [:]div3n_o;
// Instantiate the Unit Under Test (UUT)
DividerMultiple uut (
.clk_i(clk_i),
.rst_n_i(rst_n_i),
.div2_o(div2_o),
.div3_o(div3_o) ,
.div3p_o(div3p_o) ,
.div3n_o(div3n_o)
);
initial begin
// Initialize Inputs4
clk_i = ;
rst_n_i = ;
// Wait 100 ns for global reset to finish
#; rst_n_i=;
end
always
begin
# clk_i=~clk_i;
end
endmodule

仿真结果

FPGA学习笔记. 二分频和三分频的更多相关文章

  1. 【Unity Shaders】学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert

    [Unity Shaders]学习笔记——SurfaceShader(三)BasicDiffuse和HalfLambert 转载请注明出处:http://www.cnblogs.com/-867259 ...

  2. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第三章:变换 学习目标 理解如何用矩阵表示线性变换和仿射变换: 学习在 ...

  3. FPGA学习笔记(二)——FPGA学习路线及开发流程

    ###### [该随笔部分内容转载自小梅哥]       ######### 一.FPGA学习路线 工具使用 -> 语法学习 -> 逻辑设计 -> IP使用 ->接口设计 -& ...

  4. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  5. MySQL实战45讲学习笔记:第三十九讲

    一.本节概况 MySQL实战45讲学习笔记:自增主键为什么不是连续的?(第39讲) 在第 4 篇文章中,我们提到过自增主键,由于自增主键可以让主键索引尽量地保持递增顺序插入,避免了页分裂,因此索引更紧 ...

  6. Java菜鸟学习笔记--数组篇(三):二维数组

    定义 //1.二维数组的定义 //2.二维数组的内存空间 //3.不规则数组 package me.array; public class Array2Demo{ public static void ...

  7. 【EF6学习笔记】(三)排序、过滤查询及分页

    本篇原文地址:Sorting, Filtering, and Paging 说明:学习笔记参考原文中的流程,为了增加实际操作性,并能够深入理解,部分地方根据实际情况做了一些调整:并且根据自己的理解做了 ...

  8. 学习笔记-AngularJs(三)

    学习笔记-AngularJs(二)写了个所有程序语言入门时都必须要写的Hello World,那么从现在开始做那个之前说过的互联网大佬介绍的学习例子,当然这里开始会慢慢按照之前说过的目录来搭建这个学习 ...

  9. FPGA学习笔记(三)—— 数字逻辑设计基础(抽象的艺术)

    FPGA设计的是数字逻辑,在开始用HDL设计之前,需要先了解一下基本的数字逻辑设计-- 一门抽象的艺术. 现实世界是一个模拟的世界,有很多模拟量,比如温度,声音······都是模拟信号,通过对模拟信号 ...

随机推荐

  1. PAT甲题题解-1027. Colors in Mars (20)-水。。。

    #include <iostream> #include <cstdio> #include <algorithm> #include <string.h&g ...

  2. Alpha阶段个人贡献分及转会人员确定

    请各个团队协商确定个人贡献分,评分根据之前个团队确定的规则进行.每个团队的个人贡献分总数为50*N,N为团队的人数. 个人贡献分要求:必须是一个自然数,每个人分数互不相同,并且和为50*N. 请各个团 ...

  3. Linux内核设计与实现 第一章 第二章

    第一章 Linux内核简介 Unix特点: (1)     Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 (2)     在Unix中,所有的东西都被当作文件对待,通过一套相 ...

  4. week6:个人博客作业

    这周主要是参与团队编程的讨论 团队编程中发现很多问题: 1,每个人共同空闲的时间不好找 就我组来说,我是考研,每天晚上都要去外面上课,有的人在进行大创,,也有的像我一样在整考研的东西,还有的进行其他, ...

  5. .net 开源组件推荐 之 StackExchange

    已经两年没更新过博客了!!! StackExchange,地址:https://github.com/StackExchange,开源的这些项目都是在StackOverflow线上使用的. 说起Sta ...

  6. Linux命令(二十三) 磁盘管理命令(一) df,du,tune2fs

    一. 查看磁盘占用空间情况 df df 命令用于查看硬盘空间的使用情况,还可以查看硬盘分区的类型或 inode 节点的使用情况等. df 命令常用参数如下: -a 显示所有文件系统的磁盘使用情况,包括 ...

  7. NodeList & null

    NodeList & null querySelectorAll & querySelector let arr = document.querySelectorAll(`[data- ...

  8. delphi中登录界面关闭直接现实主界面是怎么回事?

    修改工程文件: Application.Initialize; Application.CreateForm(TmainForm, mainForm); Application.ShowMainFor ...

  9. Hbase之IP变更后无法启动问题解决

    # 修改hbase IP配置文件地址:/opt/hbase-1.1.13/conf/hbase-site.xml <property> <name>hbase.zookeepe ...

  10. Java多线程与线程同步

    六.多线程,线程,同步 ①概念: 并行:指两个或多个在时间同一时刻发生(同时发生) 并发:指两个或多个事件在同一时间段内发生 具体概念: 在操作系统中,安装了多个程序,并发指的是在一段时间内宏观上有多 ...