Verilog学习笔记简单功能实现(六)...............计数分频电路
在分频器电路中最重要的概念有两个;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学习笔记简单功能实现(六)...............计数分频电路的更多相关文章
- Verilog学习笔记简单功能实现(五)...............序列检测设计
这里采用夏宇闻教授第十五章的序列检测为例来学习; 从以上的状态转换图可以写出状态机的程序: module seqdet(x,out,clk,rst); input x,clk,rst; output ...
- Verilog学习笔记简单功能实现(二)...............全加器
先以一位全加器为例:Xi.Yi代表两个加数,Cin是地位进位信号,Cout是向高位的进位信号.列表有: Xi Yi Cin Sum Cout 0 0 0 0 0 0 0 1 1 0 ...
- Verilog学习笔记简单功能实现(八)...............同步FIFO
Part 1,功能定义: 用16*8 RAM实现一个同步先进先出(FIFO)队列设计.由写使能端控制该数据流的写入FIFO,并由读使能控制FIFO中数据的读出.写入和读出的操作(高电平有效)由时钟的上 ...
- Verilog学习笔记简单功能实现(三)...............同步有限状态机
在Verilog中可以采用多种方法来描述有限状态机最常见的方法就是用always和case语句.如下图所示的状态转移图就表示了一个简单的有限状态机: 图中:图表示了一个四状态的状态机,输入为A和Res ...
- Verilog学习笔记简单功能实现(四)...............译码器和编码器
这里以简单的3-8译码器和8-3编码器为例: module decoder3_8(a,out); :]a; :]out; 'b1<<a;/*把最低位的1左移in位(根据in口输入的值)并赋 ...
- 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 ...
- Verilog学习笔记简单功能实现(八)...............异步FIFO
基本原理: 1.读写指针的工作原理 写指针:总是指向下一个将要被写入的单元,复位时,指向第1个单元(编号为0). 读指针:总是指向当前要被读出的数据,复位时,指向第1个单元(编号为0). ...
- Verilog学习笔记简单功能实现(七)...............接口设计(并行输入串行输出)
利用状态机实现比较复杂的接口设计: 这是一个将并行数据转换为串行输出的变换器,利用双向总线输出.这是由EEPROM读写器的缩减得到的,首先对I2C总线特征介绍: I2C总线(inter integra ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十六章:实例化和截头锥体裁切 代码工程地址: https://git ...
随机推荐
- iOS----CocoaPods的安装、使用和,原理+参考流程+常见问题
一.什么是CocoaPods CocoaPods是iOS项目的依赖管理工具,该项目源码在Github上管理.开发iOS项目不可避免地要使用第三方开源库,CocoaPods的出现使得我们可以节省设置和第 ...
- Leetcode 35 Search Insert Position 二分查找(二分下标)
基础题之一,是混迹于各种难题的基础,有时会在小公司的大题见到,但更多的是见于选择题... 题意:在一个有序数列中,要插入数target,找出插入的位置. 楼主在这里更新了<二分查找综述>第 ...
- AutoMapper小结
一些orm框架,在用到Entity的时候有一些开源代码用到了automapper(如:nopcommence),将数据对象转成DTO.比如在ORM中,与数据库交互用的Model模型是具有很多属性变量方 ...
- Oracle存储过程获取YYYY-MM-DD的时间格式
环境:Oracle 10g,11g 问题重现:PL/SQL中命令窗口下,发现存储过程得到的时间格式不符合预期要求. SQL> select sysdate from dual; SYSDATE ...
- 面向对象编程语言中的接口(Interface)
在大多面向对象的编程语言中都提供了Interface(接口)的概念.如果你事先学过这个概念,那么在谈到“接口测试”时,会不会想起这个概念来!?本篇文章简单介绍一下面向对象编程语言中的Interface ...
- tomcat连接器
Connector是Tomcat最核心的组件之一,负责处理一个WebServer最核心的连接管理.Net IO.线程(可选).协议解析和处理的工作.一.连接器介绍在开始Connector探索之路之前, ...
- js基础-表单验证和提交
基础知识: 原始提交如下: <form action="/login" method="post" id="form1"> &l ...
- Elasticsearch聚合 之 Date Histogram聚合
Elasticsearch的聚合主要分成两大类:metric和bucket,2.0中新增了pipeline还没有研究.本篇还是来介绍Bucket聚合中的常用聚合--date histogram.参考: ...
- ES6笔记(1) -- 环境配置支持
系列文章 -- ES6笔记系列 虽然ES6已经发布一年多了,但在各大浏览器之中的支持度还不是很理想,在这查看ES6新特性支持度 Chrome的最新版本浏览器大部分已经支持,在Node.js环境上支持度 ...
- 表单input项使用label,同时引用Bootstrap库,导致input点击效果区增大
产品姐姐想法多,点击input项才能聚焦进行操作,点击外部不能有反应 好了...直入正题 为了让标签更加语义化,在表单项中,我们往往会使用label进行包裹 <label for="l ...