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 ...
随机推荐
- C#、.Net代码精简优化(空操作符(??)、as、string.IsNullOrEmpty() 、 string.IsNullOrWhiteSpace()、string.Equals()、System.IO.Path 的用法)
一.空操作符(??)在程序中经常会遇到对字符串或是对象判断null的操作,如果为null则给空值或是一个指定的值.通常我们会这样来处理: .string name = value; if (name ...
- Python中的运算符
说完常用的数据类型,再来说下运算符.运算符用于将各种类型的数据进行运算,让静态的数据跑起来. 编程语言中的运算大致分为以下几个大类: 算术运算, 用于加减乘除等数学运算 赋值运算,用于接收运算符或方法 ...
- DBCC SHOW_STATISTICS 查看统计信息
使用DBCC Show_Statistics 能够查看 表或Indexed view上的统计信息.Query optimizer使用统计信息进行estimate,生成高质量的qeury plan.统计 ...
- OpenCascade Modeling Algorithms Boolean Operations
Modeling Algorithms Boolean Operations of Opencascade eryar@163.com 布尔操作(Boolean Operations)是通过两个形状( ...
- 最近修改的几个小bug
最近修改的几个 bug,问题不大,查找起来却几番周折,汇总起来如下. 1.诡异电话号码 客服邮件反馈,很多用户服务热线变成了“0371-45875487”.看到这问题的第一反映是可能因为程序某个地方有 ...
- 队列的存储结构和常见操作(c 语言实现)
一.队列(queue) 队列和栈一样,在实际程序的算法设计和计算机一些其他分支里,都有很多重要的应用,比如计算机操作系统对进程 or 作业的优先级调度算法,对离散事件的模拟算法,还有计算机主机和外部设 ...
- Nutch源码阅读进程4---parseSegment
前面依次看了nutch的准备工作inject和generate部分,抓取的fetch部分的代码,趁热打铁,我们下面来一睹parse即页面解析部分的代码,这块代码主要是集中在ParseSegment类里 ...
- Hadoop阅读笔记(四)——一幅图看透MapReduce机制
时至今日,已然看到第十章,似乎越是焦躁什么时候能翻完这本圣经的时候也让自己变得更加浮躁,想想后面还有一半的行程没走,我觉得这样“有口无心”的学习方式是不奏效的,或者是收效甚微的.如果有幸能有大牛路过, ...
- C# Socket系列一 简单的创建socket的监听
socket的应用场景,在快速,稳定,保持长连接的数据传输代码.Http也是socket封装出来的,基于一次请求一次回复,然后断开的socket连接封装. 比如我们常见的游戏服务器,目前的很火的物联网 ...
- testing - 测试基本使用接口
testing - 测试基本使用接口 当你写完一个函数,结构体,main之后,你下一步需要的就是测试了.testing包提供了很简单易用的测试包. 写一个基本的测试用例 测试文件的文件名需要以_tes ...