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 ...
随机推荐
- cordova开发问题汇总
cordova开发问题汇总 1. 导入工程的"The import android cannot be resolved"错误解决方法 2. MainActivity] Unabl ...
- SSM环境搭建(接口编程方式)
一直用ssm在开发项目,之前都是直接copy别人的项目,今天趁着项目刚刚交付,自己搭建一下ssm环境,做个记录 一.创建项目.引入jar包,因为版本不一样,就不贴出这部分的内容了.个人平时的习惯是,先 ...
- 深入理解PHP内核(五)变量及数据类型-变量的结构和类型
原文链接:http://www.orlion.ga/238/ 编程语言的类型可以分为强类型和弱类型两种,PHP是弱类型语言,但是C语言是强类型语言.在官网PHP实现内部,所有变量使用同一种数据结构(z ...
- 冒泡排序java代码
冒泡排序就是依次取出最大数,然后依次交换放到数组最后边. 直观写法: public long[] sort(long[] a){ int n = a.length - 1; // Step:1 选出最 ...
- Java多线程系列--“基础篇”05之 线程等待与唤醒
概要 本章,会对线程等待/唤醒方法进行介绍.涉及到的内容包括:1. wait(), notify(), notifyAll()等方法介绍2. wait()和notify()3. wait(long t ...
- mysql 命令重命名表RENAME TABLE 句法
mysql 命令重命名表RENAME TABLE 句法 RENAME TABLE tbl_name TO new_tbl_name[, tbl_name2 TO new_tbl_name2,...]更 ...
- JS双月份显示联动效果,点击日期浮出消息提示
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 只用一行代码让你的ASP.NET MVC 跑起来
只用一行代码让你的ASP.NET MVC 跑起来 MVC框架一直是企业开发绕不过去的东西,先是JavaEE的 Structs, 然后是 Spring MVC, 再到我们今天要讨论的ASP.NET MV ...
- .net后台模拟浏览器get/post请求
#region 后台模拟浏览器get/post请求 /// <summary> /// 发送请求方式 /// </summary> /// <param name=&qu ...
- JS弹出框插件zDialog再次封装
zDialog插件网址:http://www.jq22.com/jquery-info2426 再次封装zDialog的代码: (function ($) { $.extend({ iDialog: ...