在分频器电路中最重要的概念有两个;1)奇分频/偶分频;2)占空比。

A)其中最简单的就是二分频电路,占空比为50%,其Verilog程序为

 module half_clk(clr,clk_in,clk_out,out2);
input clr,clk_in;
output clk_out,out2;
reg clk_out,out2; always @(posedge clk_in)
begin
if (clr==) begin clk_out=; out2=;end
else begin clk_out<=~clk_out; out2=~out2;end
end
endmodule

波形图如下所示:

B)采用计数器实现计数分频(偶数)占空比为50%,如实现40分频,程序如下:

 module fdivision(rst,clkin,clkout);
input rst,clkin;
output clkout;
reg clkout;
reg [:]i;
always @(posedge clkin)
begin
if(!rst) begin clkout<=; i<=;end
else begin
if(i==)
begin clkout<=~clkout;i<=;end
else
i<=i+;
end
end
endmodule

波形图:

C)采用相与/相或的方式实现奇分频,以及占空比可调分频器;如5分频,占空比分别为50%,40%

 module fdivision5(clkin,clkout);
input clkin;
output clkout;
wire clkout;
reg [:]step,step1;
always @(posedge clkin)
begin
case(step)
'b000:step<=3'b010;
'b010:step<=3'b100;
'b100:step<=3'b001;
'b001:step<=3'b011;
'b011:step<=3'b000;
default step<='b000;
endcase
end
always @(negedge clkin)
begin
case(step1)
'b000:step1<=3'b010;
'b010:step1<=3'b100;
'b100:step1<=3'b001;
'b001:step1<=3'b011;
'b011:step1<=3'b000;
default step1<='b000;
endcase
end
assign clkout=(step[]|step1[]);
endmodule

顶层文件(testbench):

 `timescale 1ns/1ns
`define half_period
module fdivision5_test;
reg clkin;
wire clkout;
wire step,step1;
initial
begin
clkin=;
end
always #`half_period clkin=~clkin;
fdivision5 m(clkin,clkout);
assign step=m.step;
assign step1=m.step1;
endmodule

波形图:

也可以采用两个计数器分别对上升沿和下降沿进行计数来实现奇分频:

module div5(clkin,clkout,rst);
input clkin,rst;
output clkout; parameter N=;
wire clk1,clk2;
reg [:]cnt1,cnt2; always @(posedge clkin or negedge rst)
if (!rst) cnt1<=;
else if(cnt1<(N-)) cnt1<=cnt1+;
else cnt1<=; always @(negedge clkin or negedge rst)
if (!rst) cnt2<=;
else if(cnt2<(N-)) cnt2<=cnt2+;
else cnt2<=; assign clk1=(cnt1<=((N-)/))?'b1:1'b0;
assign clk2=(cnt2<=((N-)/))?'b1:1'b0;
assign clkout=clk1&clk2;
endmodule

其testbench为:

`timescale 10ns/1ns
`define period
module div5_test;
reg clkin,rst;
wire clkout;
wire clk1,clk2; initial
begin
clkin=;
rst=;
# rst=;
# rst=;
end
always #`period clkin=~clkin;
assign clk1=m.clk1;
assign clk2=m.clk2; div5 m(clkin,clkout,rst); endmodule

波形图为:

Verilog学习笔记简单功能实现(六)...............计数分频电路的更多相关文章

  1. Verilog学习笔记简单功能实现(五)...............序列检测设计

    这里采用夏宇闻教授第十五章的序列检测为例来学习; 从以上的状态转换图可以写出状态机的程序: module seqdet(x,out,clk,rst); input x,clk,rst; output ...

  2. Verilog学习笔记简单功能实现(二)...............全加器

    先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有:   Xi     Yi    Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...

  3. Verilog学习笔记简单功能实现(八)...............同步FIFO

    Part 1,功能定义: 用16*8 RAM实现一个同步先进先出(FIFO)队列设计.由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出.写入和读出的操作(高电平有效)由时钟的上 ...

  4. Verilog学习笔记简单功能实现(三)...............同步有限状态机

    在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...

  5. Verilog学习笔记简单功能实现(四)...............译码器和编码器

    这里以简单的3-8译码器和8-3编码器为例: module decoder3_8(a,out); :]a; :]out; 'b1<<a;/*把最低位的1左移in位(根据in口输入的值)并赋 ...

  6. Verilog学习笔记简单功能实现(一)...............D触发器

    module D_flop(data,clk,clr,q,qb); input data,clk,clr; output q,qb; wire a,b,c,d,e,f,ndata,nclk; nand ...

  7. Verilog学习笔记简单功能实现(八)...............异步FIFO

    基本原理:       1.读写指针的工作原理 写指针:总是指向下一个将要被写入的单元,复位时,指向第1个单元(编号为0). 读指针:总是指向当前要被读出的数据,复位时,指向第1个单元(编号为0). ...

  8. Verilog学习笔记简单功能实现(七)...............接口设计(并行输入串行输出)

    利用状态机实现比较复杂的接口设计: 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出.这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integra ...

  9. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切 代码工程地址: https://git ...

随机推荐

  1. hammer.js手势库使用

    hammer.js是一款移动端手势库组件,支持pan(拖动).swipe(滑动).tap(轻触).press(按压,即长按).doubletap(双击)等很多手势操作,提供比较完善的事件监听机制,但是 ...

  2. fir.im Weekly - Swift 3.0 的迁移适配指南

    无论你是移动开发者,还是桌面端开发者,或者正在IoT领域探索的技术人员,那么应该更加关注 iDev 全平台开发者大会,也许是后半年 iOS 开发者最盛大的技术盛宴.既有知名公司带来专业视野,又有从 S ...

  3. 更新日志 - fir.im Jenkins & Gradle 插件上线

    最近 fir.im 工程师们效率爆表,fir.im 实用工具集合又添加了新的成员-- Jenkins & Gradle 插件,让 App 打包上传更加简单快速. fir.im Jenkins ...

  4. cmder设置打开时的默认目录

    cmder设置打开时的默认目录 打开cmder自动进入工作目录,怎么配置? http://superuser.com/questions/1005285/run-a-bat-file-with-cmd ...

  5. OpenCASCADE Application Framework Data Framework Services

    OpenCASCADE Application Framework Data Framework Services eryar@163.com 一.概述Overview OpenCASCADE的数据框 ...

  6. [c++] Pieces of knowledge

    再系统地学一遍c++,查缺补漏. wchar_t L'a' stored in wchar_t. size of types cout << numeric_limits<doubl ...

  7. mysql replication principle--转

    原文地址:http://www.codeweblog.com/mysql-replication-principle/ 1, the replication process Mysql replica ...

  8. 二叉搜索树的第k个结点

    给定一颗二叉搜索树,请找出其中的第k小的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. /* public class TreeNode { ...

  9. [emacs] Drawing uml under emacs org-mode using plantUML - 类图

    [emacs] Drawing uml under emacs org-mode using plantUML - 类图 // */ // ]]>   [emacs] Drawing uml u ...

  10. C#中简单的继承和多态

    今天我们来聊一聊继承,说实话今天也是我第一次接触. 继承的概念是什么呢?就是一个类可以继承另一个类的属性和方法(成员) 继承是面向对象编程中的一个非常重要的特性. 好了,废话不多说,下面切入正题: 1 ...