当前位置:文档之家› N倍奇数分频器.(Verilog)

N倍奇数分频器.(Verilog)

N倍奇数分频器.(Verilog)
N倍奇数分频器.(Verilog)

标签:Verilog分频器

N倍奇数分频器.(V erilog)

N_odd_divider.v / Verilog

module N_odd_divider (

input i_clk,

input rst_n,

output o_clk

);

parameter N = N_odd; // 设置奇数(除1外)倍分频parameter M = ?; // M="N/2"

// bit_of_N: N_odd的二进制位宽

reg [(bit_of_N - 1):0] cnt_p; // 上升沿计数单位

reg [(bit_of_N - 1):0] cnt_n; // 下降沿计数单位

reg clk_p; // 上升沿时钟

reg clk_n; // 下降沿时钟

assign o_clk = clk_n & clk_p; // 按位与(作用:掩码)

// 上升沿计数器: 0~(N-1)

always @ (posedge i_clk or negedge rst_n)

begin

if (!rst_n)

cnt_p <= 0;

else

begin

if (cnt_p == N-1)

cnt_p <= 0;

else

cnt_p <= cnt_p + 1'b1;

end

end

// 生成上升沿时钟

// 0~(N>>1) ↑ -> 1;((N/2)+1)~(N-1) ↑ -> 0 always @ (posedge i_clk or negedge rst_n) begin

if (!rst_n)

clk_p <= 0;

else

begin

if (cnt_p <= M) // 0 ~ (N/2)

clk_p <= 1;

else

end

end

// 下降沿计数器: 0~(N-1)

always @ (negedge i_clk or negedge rst_n) begin

if (!rst_n)

cnt_n <= 0;

else

begin

if (cnt_n == N-1)

cnt_n <= 0;

else

cnt_n <= cnt_n + 1'b1;

end

end

// 生成下降沿时钟

// 0~(N>>1) ↓ -> 1;((N/2)+1)~(N-1) ↓ -> 0 always @ (negedge i_clk or negedge rst_n) begin

if (!rst_n)

else

begin

if (cnt_n <= M) // 0 ~ (N/2) clk_n <= 1;

else

clk_n <= 0;

end

end

endmodule

仿真波形

图1. N_odd = 3

图2. N_odd = 5

另见

N倍偶数分频器.(Verilog)

参考资料

1. 真OO 无双的(原創) 如何設計除頻器? (SOC) (Verilog) (MegaCore)

2. 位运算.(C)

奇数倍分频(Verilog)

奇数倍分频的方法:(以5分频为例)

(n=N-1),图中,COUNT0采用上沿计数,COUNT1采用下沿计数,DIV0和DIV1是分别是上沿触发器和下沿触发器的输出,计数为0~(n/2-1)时DIV0、DIV1<='1'

此处为0~1,计数为n/2~(n-1)时DIV0、DIV1<='0'此处为2~4,DIV5_CLK是DIV0和DIV1的或门输出。

在使用该电路时,需要注意:

(1)DIV0和DIV1到DIV5_CLK的约束要严,越快越好。不然,无法保证1:1的占空比。

(2)MCLK频率要求较高,尽量不要出现窄脉冲,尤其是在高频电路里。(3)COUNT1可有可无,视时钟频率高低而定。频率越高,COUNT1越需要。

奇数倍分频(5分频)的方法:

`timescale 1ns / 1ps

module div(MCLK,DIV5_CLK,DIV0,DIV1,COUNT0);

input MCLK; //时钟输入

output DIV5_CLK; //5分频输出

output DIV0,DIV1; //(N-1)/2分频输出

reg DIV0;

reg DIV1;

parameter N = 5; //设置分频数N(奇数)

parameter M = 2; // (N-1)/2

output [2:0]COUNT0; //计数器计数寄存器

reg[2:0] COUNT0;

reg[2:0] COUNT1;

always@(posedge MCLK) //MCLK上升沿分频

begin

if(COUNT0==2)

begin

DIV0=0;

end

else if(COUNT0==5)

begin

COUNT0=0;

DIV0=1;

end

COUNT0=COUNT0+1;

end

always@(negedge MCLK) //MCLK下降沿分频

begin

if(COUNT1==2)

DIV1=0;

end

else if(COUNT1==5)

begin

DIV1=1;

COUNT1=0;

end

COUNT1=COUNT1+1;

end

assign DIV5_CLK=DIV0|DIV1; //两路(N-1)/2分频输出相或

endmodule

Post-Route Simulation仿真输出:

当要去其他奇数分频数时,可以改变N、M的值

parameter N = 5;//设置分频数N(奇数)

parameter M = 2;// (N-1)/2

为了方便观察,增加DIV0、DIV1两个输出信号,波形仿真如下:

我在编写程序的时候,开始的时候always里写成了非阻塞赋值了,仿真结果错误,错误程序如下:

always@(posedge MCLK) //MCLK上升沿分频

begin

if(COUNT0==M)

begin

DIV0<=0;

else if(COUNT0==N)

begin

COUNT0<=0;

DIV0<=1;

end

COUNT0<=COUNT0+1;

end

仿真波形如下:

可以看到计数器COUNT0根本没有在COUNT0==5的时候归零,这是为什么呢?这是由于我没有很好理解非阻塞和阻塞赋值的区别,这里用到非阻塞,导致if里面的幅值与COUNT0<=COUNT0+1是同时进行的,也就是说当COUNT==5时,理应COUNT归零,当这时COUNT0<=COUNT0+1,COUNT0==6,if也就无效了。所以要注意非阻塞与阻塞赋值的差别:(可参考我转载的另两篇博文)Verilog 非阻塞赋值的仿真/综合问题(一)

Verilog 非阻塞赋值的仿真/综合问题(二)

也可以改成

always@(posedge MCLK)

begin

if(COUNT0==1)

begin

DIV0<=0;

COUNT0<=COUNT0+1;

end

else if(COUNT0==4)

begin

COUNT0<=0;

DIV0<=1;

end

else COUNT0<=COUNT0+1;

end

always@(negedge MCLK)

begin

if(COUNT1==1)

begin

DIV1<=0;

COUNT1<=COUNT1+1;

end

else if(COUNT1==4)

begin

COUNT1<=0;

DIV1<=1;

end

else COUNT1<=COUNT1+1;

end

assign DIV5_CLK=DIV0|DIV1;

Post-Route Simulation仿真输出:

通常的计数器都是用非阻塞赋值的,基本上的代码如上,if……else……

本文工程文件:

参考资料:

1)N倍奇数分频器.(Verilog) --小時不識月

https://www.doczj.com/doc/9016107213.html,/2006tx_yafeng/146438/message.aspx

2)(原創)如何設計除頻器? (SOC) (Verilog) (MegaCore) -真OO无双博客园https://www.doczj.com/doc/9016107213.html,/oomusou/archive/2008/07/31/verilog_clock_divider.ht ml

3)奇数分频(5分频器为例)--shuhuai

https://www.doczj.com/doc/9016107213.html,/user2/52459/archives/2008/2166031.shtml

4)任意数分频(包括奇偶数和小数)的各种设计方法[综合电子]_老古开发网文章

Verilog各种倍分频器设计

module odd_division(clk,rst,count,clk_odd); /*count没必要放在端口中,这里只是为了仿真时观察*/ input clk,rst; output clk_odd; output[3:0] count; reg clk_odd; reg[3:0] count; parameter N = 6; /*6分频* / always @ (posedge clk) if(! rst) begin count <= 1'b0; clk_odd <= 1'b0; end else if ( count < N/2-1) begin count <= count + 1'b1; end else begin count <= 1'b0; clk_odd <= ~clk_odd; end endmodule 奇数倍分频:归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数从零开始,到N-1)/2进行输出时钟翻转,然后经过(N+1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N计数,到和上升沿过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。 module even_division(clk,rst,count1,count2,clk_even); /*count1,count2没必要放在端口中,这

里只是为了仿真时观察*/ input clk,rst; output[3:0] count1,count2; output clk_even; reg[3:0] count1,count2; reg clkA,clkB; wire clk_even,clk_re; parameter N = 5; /*5分频*/ assign clk_re = ~clk; assign clk_even = clkA | clkB; always @(posedge clk) if(! rst) begin count1 <= 1'b0; clkA <= 1'b0; end else if(count1 < (N - 1)) begin count1 <= count1 + 1'b1; /*这里是非阻塞赋值是先执行了下面的IF判断,最后才赋的值。最初看这程序时没注意,想了好半天*/ if(count1 == (N - 1)/2) begin clkA <= ~clkA; end end else begin clkA <= ~clkA;

分频器

第36卷第2期信息化研究Vo l.36 No. 2 2010年2月I nfo r m a t iza t ion R e s ea r ch Feb. 2010 基于FPGA 的任意数值分频器的设计 周殿凤,康素成,王俊华 (盐城师范学院物理科学与电子技术学院,江苏省盐城市224002 ) 摘要:介绍了基于FPG A 的任意分频系数的分频器的设计,该分频器能实现分频系数和占空比均可以调节的3 类分频:整数分频、小数分频和分数分频。所有分频均通过VHDL 语言进行了编译并且给出了仿真图。本设计中的分频器没有竞争冒险,可移植性强,占用的FPG A资源少。本设计在A l2 te ra 公司的Cyc l o neⅡ系列EP2C35 型FPG A芯片中完全可实现,结果表明设计是正确和可行的。由于分频器应用非常广泛,故本设计具有很强的实用价值。 关键词: FPG A; VHDL;分频器 中图分类号: TP277 0 引言 FPG A 作为未来数字系统的 3 大基石( FPG A、D SP、CPU ) 之一, 成为目前硬件设计研究的重点[ 1 ] 。 在数字系统的设计中,设计人员会遇到各种形式的分频需求,如偶数分频、奇数分频、半整数分频、小数分频率的1 / 10。从图1可看出当j = 5 = m/ 2时输出时钟占空比为50 %。 图110分频器波形图 和分数分频等。在某些设计中,系统不仅对频率有要求,而且对占空比也有严格的要求。由计数器或计数器的级联构成各种形式的偶数分频及非等占空比的奇数分频实现起来较为简单, 但对半整数分频及等占空比的奇数分频实现较为困难,小数分频和分数分频更 占空比为50 %的奇数分频实现起来较为困难,实现的方法较多,文中介绍了一种占用资源较少的方法。假设要实现占空比为50 %的m = 2 n+ 1 分频, 选择两个2 n+ 1进制计数器控制两个中间时钟c lk1 和c l k2 , 1 号计数器在输入时钟c l k的上升沿计数, 2 号在c l k 的 困难[ 2 ] 。为了解决这一问题,本文首先分析了各种分下降沿计数。当计数器1 输出为0 ~n - 1 时c l k1 为 频器的设计方法,然后将其综合起来成为一个通用分频器。通过分析分频器的原理,探索出了一套简单明了的设计方法,设计了一个任意数值通用分频器,该分频器没有毛刺且占用的逻辑资源较少。 1 整数分频器 偶数分频器的设计较为简单,可以利用计数器实1 ,输出为n ~2 n 时c l k1为0 且计数器1 输出为 2 n时计数器1清0 , 如此循环下去; 当计数器2输出为0 ~n - 1 时c l k2为1 ,输出为n ~2 n 时c l k2为0且计数器2输出为 2 n时计数器 2 清0 ,如此循环下去。可见2种计数器实现方法一样,只是翻转的边沿不一样,最终输出的时钟c l kou t = c l k1 + c l k2。占空比为50 %的奇数分频仿真图见图2 ,图中m = 9 ,因此是9 分频电路, 现[ 3 ] 。假设要实现m = 2 n分频, 当计数器的值为0 ~通过预置值m 可以非常方便的对分频系数进行设置 j - 1时,输出时钟为 1 ,计数器的值为j~2 n- 1 时,输出时钟为0 ,在计数器值为2 n - 1 时复位计数器,如此循环下去,即可实现占空比为j/2 n的分频, m 和j都是预置数, j用于调节占空比, m 调节分频系数。m 的值不同,分频系数也就不同, 如果预置数m 是奇数则可实现占空比不等于50 %的奇数分频。图1 中m 取值10,故实现的是10 分频, 输出时钟频率是输入时钟频收稿日期: 2009212 220; 修回日期: 2010201 209。 基金项目:江苏省高校自然科学基金资助项目( 08KJD140005) ;盐城师范学院校级基金资助项目( 09YCK L 016) 。而不需要重新编程。 图29分频器波形图 2小数分频器 小数分频器是通过可变分频和多次平均的方法得到的[ 4 25 ] 。假设要进行m . n分频( m 、n都是整数, 且n < 10 ),因为只有一位小数,所以总共要进行1 0次分 ·59·

分频器设计实验报告

竭诚为您提供优质文档/双击可除分频器设计实验报告 篇一:n分频器分析与设计 一、实验目的 掌握74190/74191计数器的功能,设计可编程计数器和n分频器,设计(n-1/2)计数器、分频器。 二、实验原理 分频是对输入信号频率分频。1、cD4017逻辑功能 2、74190/74191逻辑功能 3、集成计数器级联 当所需计数器模数超过所选计数器最大计数状态时,需要采取多片计数器级联。方法分为异步级联和同步级联。4、集成计数器的编程 在集成计数器的时序基础上,外加逻辑门电路等,反馈集成计数器的附加功能端,达到改变计数器时序的目的。可采用复位编程和置数编程两种。5、多片74190/74191计数器级联 可根据具体计数需求和增减需求,选用74190或74191,

选择不同功能、同步或异步设计等。 6、74190/74191计数器编程 由于没有复位端,因此只能使用置数编程,置数端置为0即可异步置数。可根据需求设计n进制加法或减法计数器。 n与译码逻辑功能如下。 7、74191组成(n-1/2)分频器电路如下图: u3 计数器的两个循环中,一个循环在cp的上升沿翻转;另一个是在cp的下降沿翻转,使计数器的进制减少1/2,达到(n-1/2)分频。 三、实验仪器 1、直流稳压电源1台 2、信号发生器1台 3、数字万用表1台 4、实验箱1台 5、示波器1台 四、仿真过程 1、按照cD4017和74191功能表验证其功能。 2、74191组成可编程计数器 (1)构成8421bcD十进制加法计数器,通过实验验证正确性,列出时序表。设计图如下 仿真波形如下 (2)构成8421bcD十进制减法计数器,通过实验验证正确性,列出时序表。设计图如下: 仿真波形如下

用Verilog语言实现任意整数分频器

用Verilog语言实现任意整数分频器 分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如赛灵思(Xilinx)的DLL.来进行时钟的分频,倍频以及相移。但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。因此很多招聘单位在招聘时往往要求应聘者写一个分频器(比如奇数分频)以考核应聘人员的设计水平和理解程度。下面讲讲对各种分频系数进行分频的方法:第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。电路上只需一个D触发器和一个非门即可实现,Q(n+1)=D,D=~Q(n),clk_out=Q(n+1) . 第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法: 占空比为非50%的三分频时钟,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。即是在计数值在邻近的1和2进行了两次翻转。这样实现的三分频占空比为1/3或者2/3。 module three(clk_in,rst,clk_out); // 三倍频 inputclk_in,rst; output clk_out; reg clk_out; reg [1:0] count; always @(negedgerst or posedgeclk_in) begin if(rst==0) begin count<=0; clk_out<=0; end else begin count<=count+1; if(count==1) clk_out<=~clk_out; else if(count==2) begin clk_out=~clk_out; count<=0; end end end endmodule 仿真图 另一种实现: module div3(CLKIN,CLKOUT,RESETn); //依然是三倍频 inputCLKIN,RESETn;

小数分频器原理

基于CPLD/FPGA的半整数分频器的设计 在数字逻辑电路设计中,分频器是一种基本电路。通常用来对某个给定频率进行分频,以得到所需的频率。整数分频器的实现非常简单,可采用标准的计数器,也可以采用可编程逻辑器件设计实现。但在某些场合下,时钟源与所需的频率不成整数倍关系,此时可采用小数分频器进行分频。比如:分频系数为2.5、3.5、7.5等半整数分频器。笔者在模拟设计频率计脉冲信号时,就用了半整数分频器这样的电路。由于时钟源信号为50MHz,而电路中需要产生一个20MHz的时钟信号,其分频比为2.5,因此整数分频将不能胜任。为了解决这一问题,笔者利用VIDL硬件描述语言和原理图输入方式,通过MAX+plus II开发软件和ALTERA公司的FLEX系列EPF10K10LC84-4型FPGA方便地完成了半整数分频器电路的设计。 2 小数分频的基本原理 小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。如设计一个分频系数为10.1的分频器时,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为: F=(9×10+1×11)/(9+1)=10.1 从这种实现方法的特点可以看出,由于分频器的分频值不断改变,因此分频后得到的信号抖动较大。当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。 3 电路组成 分频系数为N-0.5的分频器电路可由一个异或门、一个模N计数器和一个二分频器组成。在实现时,模N计数器可设计成带预置的计数器,这样可以实现任意分频系数为N-0.5的分频器。图1给出了通用半整数分频器的电路组成。

分频器的设计2014-1-10 10.29.8

武汉理工大学《微机原理与接口技术》课程设计报告书

号:
0121105830129
课 程 设 计
题 学 专 班 姓
目 院 业 级 名
分频信号发生器的分析与设计 自动化学院 电气工程及自动化 电气 1107 班 成涛 陈静 教授
指导教师
2014 年
01 月
09 日

武汉理工大学《微机原理与接口技术》课程设计报告书
课程设计任务书
学生姓名: 指导教师: 题 目: 成涛 专业班级: 电气 1107 班 陈静 教授 工作单位: 自动化学院 分频信号发生器的分析与设计
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰 写等具体要求) 1. 设:有一输入方波信号 f0(<1MHz) 。要求输出信号:f1=f0/N,N 通过键盘 输入。 2. 画出简要的硬件原理图,编写程序。 3. 撰写课程设计说明书。 内容包括:摘要、 目录、 正文、 参考文献、 附录 (程 序清单) 。正文部分包括:设计任务及要求、方案比较及论证、软件设计说明(软 件思想,流程,源程序设计及说明等) 、程序调试说明和结果分析、课程设计收 获及心得体会。
时间安排: 12 月 26 日----- 12 月 28 日 查阅资料及方案设计 12 月 29 日----- 01 月 0 2 日 编程 01 月 03 日-----0 1 月 07 日 调试程序 01 月 08 日----- 01 月 09 日 撰写课程设计报告
指导教师签名: 系主任(或责任教师)签名:
年 年
月 月
日 日

实验六--Verilog设计分频器计数器电路答案

实验六 Verilog设计分频器/计数器电路 一、实验目的 1、进一步掌握最基本时序电路的实现方法; 2、学习分频器/计数器时序电路程序的编写方法; 3、进一步学习同步和异步时序电路程序的编写方法。 二、实验内容 1、用Verilog设计一个10分频的分频器,要求输入为clock(上升沿有效),reset(低电平复位),输出clockout为4个clock周期的低电平,4个clock周期的高电平),文件命名为fenpinqi10.v。 2、用Verilog设计一异步清零的十进制加法计数器,要求输入为时钟端CLK(上升沿)和异步清除端CLR(高电平复位),输出为进位端C和4位计数输出端Q,文件命名为couter10.v。 3、用Verilog设计8位同步二进制加减法计数器,输入为时钟端CLK(上升沿有效)和异步清除端CLR(低电平有效),加减控制端UPDOWN,当UPDOWN为1时执行加法计数,为0时执行减法计数;输出为进位端C和8位计数输出端Q,文件命名为couter8.v。 4、用VERILOG设计一可变模数计数器,设计要求:令输入信号M1和M0控制计数模,当M1M0=00时为模18加法计数器;M1M0=01时为模4加法计数器;当M1M0=10时为模12加法计数器;M1M0=11时为模6加法计数器,输入clk上升沿有效,文件命名为mcout5.v。 5、VerilogHDL设计有时钟时能的两位十进制计数器,有时钟使能的两位十进制计数器的元件符号如图所示,CLK是时钟输入端,上升沿有效;ENA是时钟使能控制输入端,高电平有效,当ENA=1时,时钟CLK才能输入;CLR是复位输入端,高电平有效,异步清零;Q[3..0]是计数器低4位状态输出端,Q[7..0]是高4位状态输出端;COUT是进位输出端。 三、实验步骤 实验一:分频器 1、建立工程

实验一 QUARTUS II入门和分频器设计

实验报告 课程名称EDA技术与VHDL设计 实验项目Quartus II入门 实验仪器计算机、Quartus II 系别信息与通信工程学院 专业电子信息工程 班级/学号电信1201 / 2012010970 学生姓名张宗男 实验日期 成绩 指导教师

实验一 QUARTUS II入门和分频器设计 一、实验目的 1.掌握QUARTUS II工具的基本使用方法; 2.掌握FPGA基本开发流程和DE2开发板的使用方法; 3.学习分频器设计方法。 二、实验内容 1.运用QUARTUS II 开发工具编写简单LED和数码管控制电路并下载到DE2 实验开发板。2.在QUARTUS II 软件中用VHDL语言实现十分频的元器件编译,并用电路进行验证,画出仿真波形。 三、实验环境 1.软件工具:QUARTUS II 软件;开发语言:VHDL; 2.硬件平台:DE2实验开发板。 四、实验过程 1.设计思路 (1)、 18个开关控制18个LED灯,通过低位四个开关的‘1’‘0’控制LED灯上7段灯的显示(2)、 实现10分频IF(count="1001") THEN count<="0000"; clk_temp<=NOT clk_temp; 达到9的时候,把“0000”给到cout,然后clk_temp 信号翻转,从而实现10分频。 2.VHDL源程序 (1)、 LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY e_zhangzongnan IS PORT(SW :IN STD_LOGIC_VECTOR(0 TO 17); HEX0 :OUT STD_LOGIC_VECTOR(0 TO 6);

课程设计基于FPGA的半整数分频器设计

课程设计报告 设计名称EDA(VHDL)课程设计 专业班级电子0942 姓名姬鹏冲 学号0904451213 成绩评定 电气与信息工程学院 二0一二年一月 课程设计要求和成绩考核办法 (要求和成绩考核办法在封皮背面打印) 1.不允许在教室或实验室内吸烟、吃零食,不准带无关人员到教室或实验室活动,否则扣平时表现分。 2.凡病事假超过3天(每天7小时),或迟到早退三次以上,或旷课两次(1天)以上,不得参加本次考核,按不及格处理,本次课程设计不能通过。 3.病事假必须有请假条,需经班主任或有关领导批准,否则按旷课处理。 4.课程设计的考核由指导教师根据设计表现(出勤、遵守纪律情况等)、设计报告、设计成果、答辩等几个方面,给出各项成绩或权重,综合后给出课程设计总成绩。该设计考核须经教研室主任审核,主管院长审批备案。 5.成绩评定采用五级分制,即优、良、中、及格和不及格。 6.课程设计结束一周内,指导教师提交成绩和设计总结。 7.设计过程考核和成绩在教师手册中要有记载。

实习报告要求 实习报告内容、格式各专业根据实习(设计)类别(技能实习、认识实习、生产实习、毕业实习等)统一规范,经教研室主任审核、主管院长审批备案。 注意: 1.课程设计任务书和指导书在课程设计前发给学生,设计任务书放置在设计报告封面后和正文目录前。 2.为了节省纸张,保护环境,便于保管设计报告,统一采用A4纸,课程设计报告建议双面打印(正文采用宋体五号字)或手写,左侧装订,订两个钉。 基于FPGA的半整数分频器设计 一、系统设计任务及功能概述 本系统是利用VHDL硬件描述语言和原理图输入方式,通过MUX+PLUSⅡ开发软件和ALTER 公司的FLEX系列EPF10K10LC84-4型FPGA方便的完成了半整数分频器电路的设计。本系统是通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。 二、系统设计方案和程序设计 1.系统设计方案 我们采用脉冲吞吐计数器和锁相环技术,先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的5.5分频值。该分频器电路可由一个异或门、一个模6数器和二分频器组成。这样可以实现分频系数为5.5分频器以及11分频。 设计框图如下所示 2.VHDL程序设计 (1)模6计数器VHDL描述设计 该计数器可产生一个分频系数为5.5分频器,并产生一个默认的逻辑符号cont6。其输入端口为rst、en和clk;输出端口为qa,qb,qc。下面给出模6数器的VHDL描述代码:libraryieee; use ieee.std_logic_1164.all; useieee.std_logic_unsigned.all; entity cont6 is port(clk:instd_logic; rst:instd_logic; en:instd_logic; qa,qb,qc:outstd_logic); end entity cont6; architecturewode of cont6 is signalcount:std_logic_vector(2 downto 0); begin process(clk,rst,en)is begin

verilogHDL分频器(奇数分频和偶数分频)

module clk_div( //-----------input----------- iCLK, div, //-----------output---------- oCLK ); //-----------input----------- parameter WIDE=14; input iCLK; input[WIDE-1:0]div; //-----------output----------- output oCLK; wire oCLK_odd; wire oCLK_even; assign oCLK=div[0]?oCLK_odd:oCLK_even; div_odd DUTo (.iCLK(iCLK),.oCLK(oCLK_odd),.div(div)); div_even DUTe (.iCLK(iCLK),.oCLK(oCLK_even),.div(div)); endmodule // odd module div_odd( //--------input-------- iCLK, div, //--------output-------- oCLK ); //--------input-------- parameter WIDE=14; input iCLK; input[WIDE-1:0]div; //--------output-------- output oCLK; reg outCLK;

/* =========================== solve 1 =========================== reg cout; reg[WIDE-1:0] cnt; initial cnt=0; wire inCLK; reg cc; initial cc=0; always @(posedge cout) cc<=~cc; assign inCLK = iCLK^cc; always @(posedge inCLK) begin if(cnt<(div[WIDE-1:1])) begin cnt<=cnt+1; cout<=1'b0; end else begin cnt<=0; cout<=1'b1; end end always @(negedge iCLK) outCLK <= cout; assign oCLK=cc; */ //======================== //solve 2 //======================== reg[WIDE-1:0] cnt_a; initial cnt_a=0; reg[WIDE-1:0] cnt_b; initial cnt_b=0; reg cout_a;

分频器实验

实验一分频器设计 一、实验项目 分频器设计实验:利用QuatusII仿真实现分频器设计。 二、实验仪器及器件 计算机、USB-BLASTER下载线、数字系统实验箱、5V稳压电源。 三、实验目的 1、熟悉教学实验板的使用,初步了解掌握Verilog HDL语言和VHDL语言。 2、掌握分辨器原理,熟悉分频器的功用,学习分频器的设计、掌握用 Verilog HDL 或者VHDL 语言描述分频器的方法。 3、熟悉和掌握FPGA开发软件QuatusII的基本操作,用QuatusII编译Verilog 和VHDL语言。 4、掌握USB-BLASTER下载工具的安装、以及程序下载方法。 5、学会FPGA I/O引脚分配和实现过程。 四、实验要求及内容 1、首先下载给定的VHDL硬件描述语言编写的分频器示例程序,读懂程序, 编译并仔细观察在实验板上的现象。 2、在QuatusII平台上进行波形仿真。 3、扩展内容:设计分频电路得到3分频器、8分频器和32分频器。编写分 频器的Verilog 或VHDL代码,并仿真,同时给出3、8、32分频仿真波 形。 五、实验原理 一个数字系统中往往需要多种频率的时钟脉冲作为驱动源,这样就需要对FPGA的系统时钟(频率较高)进行分频。比如在进行流水灯、数码管动态扫描设计时不能直接使用系统时钟(太快而肉眼无法识别),或者需要进行通信时,由于通信速度不能太高(由不同的标准限定),这样就需要对系统时钟分频以得到较低频率的时钟。 分频器主要分为偶数分频、奇数分频、半整数分频和小数分频,如果在设计过程中采用参数化设计,就可以随时改变参量以得到不同的分频需要。 在对时钟要求不是很严格的FPGA系统中,分频通常都是通过计数器的循环计数来实现的。 偶数分频(2N)

3分频器的设计

三分频器的设计 时钟输入端(clkin)首先反向和不反向分别接到两个D触发器的时钟输入端,两个D触发器的输出接到一个二输入或非门的输入端,或非门的输出反馈到前面两个D触发器的D输入端,并且或非门的输出后面接一二分频器,得到占空比为50%的三分频波形。 图1:图形设计 VHDL程序: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity fen3 is port (clkin : in std_logic; --时钟输入 qout1 : buffer std_logic; qout2 : buffer std_logic; qout3 : buffer std_logic; clkout : out std_logic --占空比为1/2的三分频输出 ); end fen3; architecture behave of fen3 is begin qout3<=qout1 nor qout2; process(clkin) begin if clkin'event and clkin='1' then --在上升沿触发 qout1<=qout3; end if;

end process; process(clkin) begin if clkin'event and clkin='0' then --在下降沿触发 qout2<=qout3; end if; end process; process(qout3) variable tem:std_logic; begin if qout3'event and qout3='1' then --二分频tem:=not tem; end if; clkout<=tem; end process; end behave; 图3:仿真结果

分频器的verilog hdl语言

分频器的verilog HDL描述(转) 分频器,在许多涉及时序的电路设计中都会用到,在这里,我转载某位高人的文章,关于分频器的设计 偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。以此循环下去。这种方法可以实现任意的偶数分频。 module odd_division(clk,rst,count,clk_odd); input clk,rst; output clk_odd; output[3:0] count; reg clk_odd; reg[3:0] count; parameter N = 6; always @ (posedge clk) if(! rst) begin count <= 1'b0; clk_odd <= 1'b0; end else if ( count < N/2-1) begin count <= count + 1'b1; end else begin

clk_odd <= ~clk_odd; end endmodule 奇数倍分频:归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数从零开始,到(N-1)/2进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。再者同时进行下降沿触发的模N 计数,到和上升沿过(N-1)/2时,输出时钟再次翻转生成占空比非50%的奇数n分频时钟。两个占空比非50%的n分频时钟相或运算,得到占空比为50%的奇数n分频时钟。 module even_division(clk,rst,count1,count2,clk_even); input clk,rst; output[3:0] count1,count2; output clk_even; reg[3:0] count1,count2; reg clkA,clkB; wire clk_even; parameter N = 5; assign clk_re = ~clk; assign clk_even = clkA | clkB; always @(posedge clk) if(! rst) begin count1 <= 1'b0; clkA <= 1'b0; end else

分频器的设计

首先讲一下单元: 一般情况下,我们对单元按频率会划分为超高音,高音,中高音,中音,重低音,低音,超低音 超高音:負責22kHz以上的頻率 高音:負責5000Hz~22kHz頻率、 中音:負責1500~5000Hz頻率 低音:負責1500Hz以下頻率 超低音(增加)負責200Hz以下頻率 也有网友提出其她的划分标准 以A音(C调的“哆来咪法嗦啦西”的“啦”音,频率为440赫兹)为基准音,以倍频的形式向下三个八度向上五个八度,把全音域分为八个八度,一个个八度就就是音响上常说的一个倍频程(1oct)。具体的划分就是这样的: 55-110赫兹,110-220赫兹,220-440赫兹,440-880赫兹,880-1760赫兹,1760-3520赫兹,3520-7040赫兹,7040-14080赫兹,共八段(八个八度)。这样就很清晰的瞧出频段的划分了。110赫兹以下-超低频; 110-220赫兹-低频; 220-440赫兹-中低频; 440-880赫兹-低中频; 880-1760赫兹-中频; 1760-3520赫兹-中高频; 3520-7040赫兹-高频; 7040赫兹以上-超高频。 还有两种频段划分方法 以“E”音划分 -20 次低频 20-40 极低频 40-80 低频下段 80-160 低频上段 160-320 中频下段 320-640 中频中段

640-1280 中频上段 1280-2560 高频下段 2560-5120 高频中段 5120-10240 高频上段 10240- 极高频 以“C”划分 -63 极低频 63-125 低频下段 125-250 低频上段 250-500 中频下段 500-1K 中频中段 1K-2K 中频上段 2K-4K 高频下段 4K-8K 高频上段 8K- 极高频 分频器的主要元件:电阻,电感,电容 电阻在分频器中的作用:调整灵敏度 电感:其特性就是阻挡较高频率,只让较低的频率通过电容:其特性与电感刚好相反,也就就是阻挡频率通过

任意分频Verilog实现

1. 偶数倍(2N)分频 使用一模N计数器模块即可实现,即每当模N计数器上升沿从0开始计数至N-1时,输出时钟进行翻转, 同时给计数器一复位信号使之从0开始重新计数,以此循环即可。偶数倍分频原理示意图见图1。 2. 奇数倍(2N+1)分频 (1)占空比为X/(2N+1)或(2N+1-X)/(2N+1)分频,用模(2N+1)计数器模块可以实现。取0至2N-1之间一数值X(0,当计数器时钟上升沿从0开始计数到X值时输出时钟翻转一次,在计数器继续计数达到2N 时,输出时钟再次翻转并对计数器置一复位信号,使之从0开始重新计数,即可实现。 (2)占空比为50%的分频,设计思想如下:基于(1)中占空比为非50%的输出时钟在输入时钟的上升沿 触发翻转;若在同一个输入时钟周期内,此计数器的两次输出时钟翻转分别在与(1)中对应的下降沿触发翻转,输出的时钟与(1)中输出的时钟进行逻辑或,即可得到占空比为50%的奇数倍分频时钟。当然其 输出端再与偶数倍分频器串接则可以实现偶数倍分频。奇数倍分频原理示意图见图2。(这也是许多公司常出的面试题,^_^,是不是很简单?) 3. N-0.5倍分频 采用模N计数器可以实现。具体如下:计数器从0开始上升沿计数,计数达到N-1上升沿时,输出时钟需翻转,由于分频值为N-0.5,所以在时钟翻转后经历0.5个周期时,计数器输出时钟必须进行再次翻转,即当 CLK为下降沿时计数器的输入端应为上升沿脉冲,使计数器计数达到N而复位为0重新开始计数同时输出时钟翻转。这个过程所要做的就是对CLK进行适当的变换,使之送给计数器的触发时钟每经历N-0.5个周期就翻转一次。N-0.5倍:取N=3,分频原理示意图见图3。 对于任意的N+A/B倍分频(N、A、B∈Z,A≦B) 分别设计一个分频值为N和分频值N+1的整数分频器,采用脉冲计数来控制单位时间内两个分频器出现 的次数,从而获得所需要的小数分频值。可以采取如下方法来计算个子出现的频率: 设N出现的频率为a,则N×a+(N+1)×(B-a)=N×B+A 求解a=B-A; 所以N+1出现的频率为 A.例如实现7+2/5分频,取a为3,即7×3+8×2就可以实现。但是由于这种小数分频输出的时钟脉冲抖动很大, 现实中很少使用。 通常实现偶数的分频比较容易,以十分频为例: always @( posedge clk or posedge reset) if(reset) begin k<=0; clk_10<=0; end else if(k==4) begin k<=0;

半整数分频器的设计

22.半整数分频器的设计 一、实验原理: 1小数分频的基本原理 设有一个5 MHz的时钟源,但电路中需要产生一个2 MHz的时钟信号,由于分频比为2.5,因此整数分频器将不能胜任。 采用可编程逻辑器件实现分频系数为2.5的分频器,可采用以下方法:设计一个模3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲(实际上是使被扣除的脉冲变成很窄的脉冲,可由异或门实现),就可以得到分频系数为2.5的小数分频器。采用类似方法,可以设计分频系数为任意半整数的分频器。 小数分频的基本原理为脉冲吞吐计数法:设计两个不同分频比的整数分频器,通过控制单位时间内两种分频比出现的不同次数,从而获得所需的小数分频值。例如设计一个分频系数为10.1的分频器,可以将分频器设计成9次10分频,1次11分频,这样总的分频值为 (9×10+1×11)/(9+1) =10.1 从这种实现方法的特点可以看出,由于分频器的分频值在不断改变,因此分频后得到的信号抖动较大。 当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,使输出为一个稳定的脉冲频率,而不是一次N分频,一次N-1分频。 1.2 电路组成 设需要设计一个分频系数为N-0.5的分频器,其电路可由一个模N计数器、一个二分频器和一个异或门组成,如图1所示。在实现时,模N计数器可设计成带预置的计数器,这样就可以实现任意分频系数为N-0.5的分频器。 二、半整数分频器代码: VHDL程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY deccount IS PORT ( inclk: IN STD_LOGIC; --时钟源 preset: IN STD_LOGIC_VECTOR(3 DOWNTO 0); --预置分频值N outclk1: OUT STD_LOGIC; outclk2: BUFFER STD_LOGIC ); --输出时钟

分频器的设计

分频器的设计 一、课程设计目的 1.学会使用电路设计与仿真软件工具Hspice,熟练地用网表文件来描述模拟电路,并熟悉应用Hspice内部元件库。通过该实验,掌握Hspice的设计方法,加深对课程知识的感性认识,增强电路设计与综合分析能力。 2.分频器大多选用市售成品,但市场上出售的分频器良莠不齐,质量上乘者多在百元以上,非普通用户所能接受。价格在几十元以下的分频器质量难以保证,实际使用表现平庸。自制分频器可以较少的投入换取较大的收获。 二.内容 分频器-概述 分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器,即使在输入输出信号均为正弦波时也往往采用模数转换-数字分频-数模转换的方法来实现分频。正弦分频器除在输入信噪比低和频率极高的场合已很少使用。

分频器-作用 分频器是音箱中的“大脑”,对音质的好坏至关重要。功放输出的音乐讯号必须经过分频器中的各滤波元件处理,让各单元特定频率的讯号通过。要科学、合理、严谨地设计好音箱之分频器,才能有效地修饰喇叭单元的不同特性,优化组合,使得各单元扬长避短,淋漓尽致地发挥出各自应有的潜能,使各频段的频响变得平滑、声像相位准确,才能使高、中、低音播放出来的音乐层次分明、合拍,明朗、舒适、宽广、自然的音质效果。 在一个扬声器系统里,人们把箱体、分频电路、扬声器单元称为扬声器系统的三大件,而分频电路对扬声器系统能否高质量地还原电声信号起着极其重要的作用。尤其在中、高频部分,分频电路所起到的作用就更为明显。其作用如下: 合理地分割各单元的工作频段; 合理地进行各单元功率分配; 使各单元之间具有恰当的相位关系以减少各单元在工作中出现的声干涉失真; 利用分频电路的特性以弥补单元在某频段里的声缺陷; 将各频段圆滑平顺地对接起来。 分频器-分类 1)功率分频器:位于功率放大器之后,设置在音箱内,通过LC滤波网络,将功率放大器输出的功率音频信号分为低音,中音和高音,分别送至各自扬声器。连接简单,使用方便,但消耗功率,出现音频谷

实验六Verilog设计分频器计数器电路答案

实验六V e r i l o g设计分频器/计数器电路 一、实验目的 1、进一步掌握最基本时序电路的实现方法; 2、学习分频器/计数器时序电路程序的编写方法; 3、进一步学习同步和异步时序电路程序的编写方法。 二、实验内容 1、用Verilog设计一个10分频的分频器,要求输入为clock(上升沿有效),reset(低电平复位),输出clockout为4个clock周期的低电平,4个clock 周期的高电平),文件命名为。 2、用Verilog设计一异步清零的十进制加法计数器,要求输入为时钟端CLK (上升沿)和异步清除端CLR(高电平复位),输出为进位端C和4位计数输出端Q,文件命名为。 3、用Verilog设计8位同步二进制加减法计数器,输入为时钟端CLK(上升沿有效)和异步清除端CLR(低电平有效),加减控制端UPDOWN,当UPDOWN 为1时执行加法计数,为0时执行减法计数;输出为进位端C和8位计数输出端Q,文件命名为。 4、用VERILOG设计一可变模数计数器,设计要求:令输入信号M1和M0控制计数模,当M1M0=00时为模18加法计数器;M1M0=01时为模4加法计数器;当M1M0=10时为模12加法计数器;M1M0=11时为模6加法计数器,输入clk 上升沿有效,文件命名为。 5、VerilogHDL设计有时钟时能的两位十进制计数器,有时钟使能的两位十进制计数器的元件符号如图所示,CLK是时钟输入端,上升沿有效;ENA是

时钟使能控制输入端,高电平有效,当ENA=1时,时钟CLK才能输入;CLR 是复位输入端,高电平有效,异步清零;Q[3..0]是计数器低4位状态输出端,Q[7..0]是高4位状态输出端;COUT是进位输出端。 三、实验步骤 实验一:分频器 1、建立工程 2、创建Verilog HDL文件 3、输入10分频器程序代码并保存 4、进行综合编译 5、新建波形文件 6、导入引脚 7、设置信号源并保存 8、生成网表 9、功能仿真 10、仿真结果分析 由仿真结果可以看出clockout输出5个clock周期的低电平和5个clock 的高电平达到10分频的效果,设计正确。 实验二:十进制加法计数器(异步清零) 1、建立工程 2、创建Verilog HDL文件 3、输入加法计数器代码并保存 4、进行综合编译 5、新建波形文件 6、导入引脚 7、设置信号源并保存 8、生成网表 9、功能仿真 10、仿真结果分析

通用分频器基本原理

通用分频器基本原理 整数分频包括偶数分频和奇数分频,对于偶数N分频,通常是由模N/2计数器实现一个占空比为1:1的N分频器,分频输出信号模N/2自动取反。对于奇数N分频,上述方法就不适用了,而是由模N计数器实现非等占空比的奇数N分频器,分频输出信号取得是模N计数中的某一位(不同N值范围会选不同位)。这种方法同样适用于偶数N 分频,但占空比不总是1:1,只有2的n次方的偶数(如4、8、16等)分频占空比才是1:1。这种方法对于奇数、偶数具有通用性。半整数分频器也是在这种方法基础上实现的。除了一个模N计数器,还需要一个异或模块和一个2分频模块。半整数分频器原理如图1所示:半整数分频器设计思想:通过异或门和2分频模块组成一个改变输入频率的脉冲添加电路,也就是说N-0.5个输入信号周期内产生了N个计数脉冲,即输入信号其中的一个含一个脉冲的周期变为含两个脉冲的周期。而这一改变正是输入频率与2分频输出异或的结果。由2分频输出决定一个周期产生两个脉冲有两种方式:当一个输入信号来一个脉冲(前半周期)时,2分频输出变为‘1’,clk_in 取反,后半周期就会产生一个脉冲;2分频输出由‘1’变为‘0’时,clk_in刚把一个周期(前半周期)内低电平变为高电平产生一个脉冲,而后半周期的脉冲与‘0’异或不变。从而实现N-0.5分频。要实现奇数、偶数、半整数通用分频器只需再加一个控制选择信号sel。当sel=‘1’时,clk_in与2分频输出异或,实现半整数分频;当sel=‘0’时,只选通clk_in,实现整数分频。通用分频器原理如图

2所示:Verilog语言的实现本设计采用层次化的设计方法,首先设计通用分频器中各组成电路元件,然后通过元件例化的方法,调用各元件,实现通用分频器。1、选择异或门模块half_select:modulehalf_select(sel,a,b,c); outputc; inputsel,a,b; xoru1(w,a,b); assignc=sel?w:a; (当sel=‘1’时,clk_in与2分频输出异或,实现半整数分频;当sel=‘0’时,只选通clk_in,实现整数分频。)endmodule 2、模N计数器counter_n:实现参数化设计N可取2~256,也可增加count位数使N可取更大的值。以N=7为例通过设置sel分别实现奇数7分频和半整数 6.5分频。modulecounter_n(reset,en,clk_in,clk_out,count); parameterN=7;inputreset,en,clk_in;outputclk_out; output[7:0]count;regclk_out;reg[7:0]count; always@(posedgeclk_in)begin if(reset)begin count[7:0]=0;end elseif(en)begin if(count==(N-1))count=0;else count=count1; end end always begin if(N clk_out=count[0]; elseif(N clk_out=count;elseif(N clk_out=count; elseif(N 在复杂数字逻辑电路设计中,经常会用到多个不同的时钟信号。介绍一种通用的分频器,可实现2~256之间的任意奇数、偶数、半整数分频。首先简要介绍了FPGA器件的特点和应用范围。接着介绍了通用分频器的基本原理和分类,并以分频比为奇数7

相关主题
文本预览
相关文档 最新文档