-
2021-11-16 22:06:55
-
一、 实验目的
1 、 学习 ModelSim 仿真方法。2 、 巩固 Verilog HDL 时序电路设计。-
二、 基本实验内容
1 、 FPGA 开发板上有一个 50MHz 的高频时钟。设计一个可控分频器, clk_in更多相关内容 -
-
分频器设计
2020-07-16 09:04:43要实现占空比为50%的奇数分频器,在待分频的时钟的上升沿触发计数器,在模n时候进行翻转,再在(n-1)/2再进行翻转,这样得到一个非50%的n倍奇数分频。再利用下降沿触发模n计数,在(n-1)的时候进行一次翻转,再在...一、偶数分频(等占空比)
偶数分频:假设为N分频,由待分频的时钟触发计数器进行计数,计数器从0计数到N/2-1,输出时钟进行翻转并给计数器一个复位信号,使其从下一个时钟从零开始计数。依次循环。
另外有一种方法适合对2^n分频。就是使用触发器进行分频,先利用第一个触发器的输出Q取反给输入D,这样完成2分频。然后将2分频后的时钟作为下一级触发器的时钟,用同样的方法完成4分频,依次类推,3个触发器完成8分频,4个触发器完成16分频…
//8分频 moudle fenpin_even( input clk, input rst_n, output reg clk_div8 ); reg [3:0] cnt; always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin cnt <= 4'b0; end else if(cnt==4'd3) begin cnt <= 4'd0; end else begin cnt <= cnt + 1'b1; end end always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin clk_div8 <= 1'b0; end else if(cnt==4'd4) begin clk_div8 <= ~clk_div8; end end endmodule
使用第二种方法完成8分频
//8分频 module clk_even8( input clk, input rst_n, output reg clk_div8 ); reg clk_div2; always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin clk_div2 <= 1'b0; end else begin clk_div2 <= ~clk_div2; end end reg clk_div4; always @ (posedge clk_div2 or negedge rst_n) begin if(!rst_n) begin clk_div4 <= 1'b0; end else begin clk_div4 <= ~clk_div4; end end always @ (posedge clk_div4 or negedge rst_n) begin if(!rst_n) begin clk_div8 <= 1'b0; end else begin clk_div8 <= ~clk_div8; end end endmodule
二、奇数分频(等占空比)
通过计数器实现,比如3分频,通过待分频时钟上升沿触发计数器进行模3计数,当计数器计数到邻近值进行两次翻转,可以在计数到邻近值进行两次翻转,在计数到1时,输出进行翻转,计数到2再翻转,这样实现了占空比为1/3或2/3。
要实现占空比为50%的奇数分频器,在待分频的时钟的上升沿触发计数器,在模n时候进行翻转,再在(n-1)/2再进行翻转,这样得到一个非50%的n倍奇数分频。再利用下降沿触发模n计数,在(n-1)的时候进行一次翻转,再在(n-1)/2,的时候进行一次翻转,得到另一个奇数分频。最后将两个奇数分频相或运算,就能得到占空比为50%的奇数分频了。//占空比50%的7分频 module clk_div7( input clk, input rst_n, output clk_div7 ); reg [2:0] cnt1; reg [2:0] cnt2; reg clk_pos; reg clk_neg; always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin cnt1 <= 3'd0; end else if(cnt1==3'd6) begin cnt1 <= 3'd0; end else begin cnt1 <= cnt1 + 1'b1; end end always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin clk_pos <= 1'b0; end else if(cnt1==3'd2) begin clk_pos <= ~clk_pos; end else if(cnt1==3'd6) begin clk_pos <= ~clk_pos; end end always @ (negedge clk or negedge rst_n) begin if(!rst_n) begin cnt2 <= 3'd0; end else if(cnt2==3'd6) begin cnt2 <= 3'd0; end else begin cnt2 <= cnt2 + 1'b1; end end always @ (negedge clk or negedge rst_n) begin if(!rst_n) begin clk_neg <= 1'b0; end else if(cnt2==3'd2) begin clk_neg <= ~clk_neg; end else if(cnt2==3'd6)begin clk_neg <= ~clk_neg; end end assign clk_div7 = clk_pos & clk_neg; endmodule
关于最后是用&还是用|,这个跟在上面进行计数时是用(n-1)/2进行翻转,还是用“剩下的数”进行翻转。
进行奇数n分频时钟,首先进行n/2分频(带小数,即等于(n-1)/2+0.5),然后再进行二分频得到占空比为50%的奇数倍分频。
三、 小数分频
半整数分频
如何进行n+0.5分频,这种分频需要对输入时钟进行操作。基本的设计思想是:对于进行n+0.5分频,首先要进行模n的计数,在计数到n-1的时候,输出时钟赋值为1,回到计数0时,又赋值给0,因此可以知道,当计数值为n-1的时,输出时钟才为1.因此只要保持计数值n-1为半个输入时钟周期,即实现了n+0.5分频时钟,因此保持n-1为半个时钟周期即是一个难点。从中可以发现,因为计数器是通过时钟上升沿计数,因此可以在计数为n-1时,对计数触发时钟进行翻转,那么时钟的下降沿就变成了时钟的上升沿。即在计数值为n-1期间的时钟下降沿变成了上升沿,则计数值n-1只保持了半个时钟周期,由于时钟翻转下降沿变成上升沿,因此计数值变为0。因此,每产生一个n+0.5分频时钟周期,触发时钟都要翻转一次。计数值是通过上升沿触发,故在计数为N-1时对计数触发进行翻转,时钟的下降沿变成上升沿,因此计数值为0,所以每产生n+0.5分频时钟的周期,触发时钟都要翻转一次。
第二种方法:N+0.5分频,如N=3进行3.5分频。
先将clk时钟周期的一半记做clk_half,即一个高电平或一个低电平的时间。
对2 * (N+0.5)=2N + 1.这个数一定是奇数,按照奇数分频的思路,也取clk_p和clk_n,但是计数的值不一样,一个计数N个clk时钟周期(2N)个clk_half周期,一个计数2N+2个clk_half,两者位置关系如图所示,这样,两者相与,则所得信号一个周期的高低电平共有2N+1个clk_half周期,即(N+0.5)个clk周期。
//2.5分频 module clk_div_half( input clk, input rst_n, output clk_out ); reg [2:0] count_p; reg [2:0] count_n; reg clk_p; reg clk_n; always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin count_p <= 3'd0; end else if(count_p==3'd4) begin count_p <= 3'd0; end else begin count_p <= count_p + 1'b1; end end always @ (posedge clk or negedge rst_n) begin if(!rst_n) begin clk_p <= 1'b0; end else if(count_p==3'd3 || count_p==3'd0) begin clk_p <= ~clk_p; end end always @ (negedge clk or negedge rst_n) begin if(!rst_n) begin count_n <= 3'd0; end else if(count_n==3'd4) begin count_n <= 3'd0; end else begin count_n <= count_n + 1'b1; end end always @ (negedge clk or negedge rst_n) begin if(!rst_n) begin clk_n <= 1'b1; end else if(count_n==3'd2 || count_n==3'd0) begin clk_n <= ~clk_n; end end assign clk_out = clk_p & clk_n; endmodule
首先来了解分频比的概念,分频比是指原频率和分频后的频率的比值,为了更好的理解后边的内容,也可以理解为一段时间内原时钟出现的周期数和分频后的时钟所出现的周期数的比值(此处设为4.7),即满足关系:4.7*T1=T2。只用verilog的话无法真正意义上的实现小数分频,比如说实现4.7分频,实际上是通过4分频和5分频来实现的,通过控制4分频和5分频的所占比例来调控交替产生4到5之间的任意分频比(准确的说这里的“任意”实际上要考虑精度的限制)。虽然短时间内看到的是4分频和5分频,但从更多的周期数来看的话(统计的周期数越多越精确)是4.7分频(分频比为周期数与周期数的比值)。
对照前面的关系式:4.7*T1=T2,可知,我们的目标是原时钟经过4.7个脉宽,分频后的时钟才经过1个脉宽,但是4.7个脉宽是无法实现的。那么我们再来转化一下目标,等式左右两边同时乘以10,化为整数(也可以乘以别的数,目标是化为整数,视分频比和精度而定),所以目标变为原时钟经过47个脉宽,分频后的时钟经过10个脉宽(其实这里的10个脉宽即周期不全是相等的,因为,有些是4分频的时钟,有些是5分频的时钟,只要满足公式就行了)。那么其中的脉宽哪些是4分频,哪些是5分频的呢,可以分别记为m和n,那么它们必须满足下面关系:
m+n=104m+5n=47
求得m=3,n=7,即在原时钟47个脉宽的时间内,要把其中的12个脉宽转化为3个4分频时钟的脉宽,即34=12,另外35个脉宽转化为7个5分频时钟的脉宽,即75=35。
值得注意的是,应当尽量使4分频时钟和5分频时钟均匀分配,所以,47个原时钟脉宽,你不能前35个脉宽产生5分频,后12个脉宽产生4分频,这样会使频谱出现更多的杂散,这点可以用MATLAB仿一下(待确认)。
最后,再来确认一下分频比,47/(3+7)=4.7,再次强调,这里的分频比是周期数除以周期数,前提是相同时间内。
值得思考的地方:
1、分频比4.7介于4到5之间,所以可以用4分频和5分频来交替产生,我们把范围扩展一下4.7也介于3到6之间,所以能用3分频和6分频来交替产生吗,推而广之,奇数分频产生比偶数分频产生更麻烦一点,那么为什么不用4分频和6分频呢,这个值得思考,个人认为可以从频谱的角度考虑。
-
1/2分频器的设计和仿真
2019-08-06 17:18:191/2分频器的设计和仿真 2. 实验目的 设计一个 1/2 分频器,并进行仿真测试。 3. 实验要求 实现 1/2 分频器的分频、复位功能。 4. 程序代码 VerilogHDL代码: module half_clk_dai( clk_in, rst, clk_...若对你有用,记得点赞、关注我哦!
1. 实验题目
1/2分频器的设计和仿真
2. 实验目的
设计一个 1/2 分频器,并进行仿真测试。
3. 实验要求
实现 1/2 分频器的分频、复位功能。
4. 程序代码
VerilogHDL代码: module half_clk_dai( clk_in, rst, clk_out ); input clk_in; input rst; output clk_out; reg clk_out; always @(posedge clk_in or negedge rst) begin if(!rst) clk_out<=0; else clk_out<=~clk_out; end endmodule Test bench仿真代码: `timescale 1ns/1ns module main; reg clk_in; reg rst; initial begin clk_in=1; rst=1; #1000 rst=0; #1000 rst=1; end always #200 clk_in=~clk_in; half_clk_dai dai1( .clk_in(clk_in), .rst(rst), .clk_out(clk_out) ); endmodule
5. 实验结果
1/2分频器在波形图上显示的作用是改变频率,当输入一个周期,我们令输出在它的上升沿时发生跳转,这样原本输入周期一个周期内跳转两次,得到的输出在这个周期内只跳转一次。
同时,有一个控制信号控制这个过程的发生,当它为0时,这个动作不发生;当它为1的时候,这个动作发生。
-
实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500...
2021-12-07 22:42:00实验二 基于FPGA的分频器的设计 1. 实验目的: (1) 掌握QuartusⅡ软件的层次型设计方法; (2) 掌握元件封装及调用方法; (3) 熟悉FPGA实验平台,掌握引脚锁定及下载。 2. 实验任务: (1) 基本任务:设计一个...实验二 基于FPGA的分频器的设计
1. 实验目的:
(1) 掌握QuartusⅡ软件的层次型设计方法;
(2) 掌握元件封装及调用方法;
(3) 熟悉FPGA实验平台,掌握引脚锁定及下载。
2. 实验任务:
(1) 基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。
(2) 拓展任务1:用按键或开关控制蜂鸣器的响与不响。
(3) 拓展任务2:用按键或开关选择1KHz和500Hz两种不同频率信号驱动蜂鸣器。基本任务:
(1)设计思路
实验平台上提供有两个时钟信号clk0和clk1,频率均为50MHz,通过2、5、100分频,对输入信号进行逐级分频。2、5、100分频功能采用74390实现。
(2)电路设计
1.模100计数器设计
2.将m100计数器封装
方法:选中右侧的m100文件
点击File->Create->Create Symbol Files for Current File
选择储存位置,一定要和工程文件在一个文件夹里
3.分频器设计电路图
拓展任务1和2:
用按键或开关控制蜂鸣器的响与不响。
(1)任务1加个开关即可
(2)任务2如下图
拓展任务3
自动在三个频率间切换
用分频器的1Hz输出信号作为时钟
工程文件下载连接
链接:https://pan.baidu.com/s/1qdnPVNkyWPXU7q1vDbcpRg
提取码:2021求赞!!!
-
VHDL半整数与奇数分频器设计实验
2018-12-25 16:20:27但却难以同相同设计方式直接获得奇数分频且占空比为50%的电路。 代码如下: library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity DIV is port(CLK :in st... -
50%占空比任意分频器verilog实现方法与其SGDC约束
2021-09-26 12:41:27今天讨论的任意分频器在许多的数字IC设计与FPGA面试笔试题中都有考察,所以在实(tou)现(xue)了以后做本次学习记录,供大家参考。 1. 先入为主 我们来宏观的看本次分频器的内容,会比较容易理解。关键功能点的电路... -
Verilog 分频器设计
2019-11-19 20:40:59在数字电路中,使用 Verilog 生成不同频率的时钟和占空比是较为常见的一种设计,主要分为偶数分频,奇数分频,也可以任意进行分频和占空比的配置; 1、偶分频 偶分频电路指的是分频系数为 2、4、6、8 ... 等偶数... -
eda设计数控分频器(实现2~16)分频
2020-12-21 16:30:292019-01-10 回答我这个...要给分哦。。。。library ieee;use ieee.std_logic_1164.all;entity shukong isport(t:in std_logic_vector(6 downto 0);clk:in std_logic;q:out std_logic);end ;architecture one of shu... -
FPGA分频器设计(偶数分频、奇数分频)
2021-01-13 16:54:42前言 将笔者之前在学习FPGA上遇到的一些有...分频器的设计通常分为以下三类:奇数分频器、偶数分频器及小数分频器。本文接下来将分别对奇数分频器及偶数分频器的设计仿真进行说明。 2.偶数分频器 2.1、说明 偶数分. -
【数电实验5】Verilog—可控分频器设计 & ModelSim的使用
2022-04-23 16:38:56【2022.04西南交大数电实验】5-可控分频器设计 & ModelSim的使用 -
Verilog各类分频器设计详解
2021-04-08 11:36:49Verilog各类分频器设计详解 分频器是时序电路的基本器件,它的功能是对系统时钟或其他时钟进行分频产生所需要的时钟信号。分频有两种方式:一是通过HDL语言建模产生所需要的时钟信号,二是利用开发工具的PLL进行分频... -
基于FPGA的任意分频器设计
2018-05-29 09:21:45作者:卢威虎1、前言 分频器是FPGA设计中使用频率非常高的基本单元之一。尽管目前在大部分设计中还广泛使用集成锁相环(如Altera的PLL,Xilinx的DLL)来进行时钟的分频、倍频以及相移设计,但是,对于时钟要求不太... -
任意倍数分频器设计
2021-09-29 16:48:10第二步设计分频电路,若N为奇分频,我们可以通过分别计数上升沿和下降沿计数(N-1),当计数值满足(nege_cnt or pose_cnt)<((N-1)>>1)时,我们就拉高odd_clk,否则odd_clk为0。若N为偶分频,我们只需要... -
任意整数分频器
2021-12-08 15:21:151.偶数分频器 假设N分频器,N是偶数, 第一种思路 (1)复位信号时,计数器清零,输出时钟置低电平 (2)计数器到 N/2 - 1 时,时钟翻转,计数器继续累加 (3)计数器到 N-1 时,时钟翻转,计数器清零 (4... -
实验八8 分频器的设计与实现
2020-12-19 23:19:17图8-18分频器真值表(1)新建工程双击桌面上“ISEDesignSuite14.7”图标,启动ISE软件(也可从开始菜单启动)。每次打开ISE都会默认恢复到最近使用过的工程界面。当第一次使用时,由于还没有历史工程记录,所以工程管理... -
VHDL实验分频器设计
2010-03-31 11:05:01分频器设计 实验目的 1. 熟悉QUARTUSII 软件的使用 2. 熟悉PLD设计流程 3. 学习分频器的设计 设计思路与框图 设计一个25位的二进制计数器,以50MHz时钟作为输入,然后将其最后一位引出即可得到大致为1Hz的输出。 -
电路课设-音响分频器电路设计
2022-05-24 09:51:401.一阶分频器电路设计 假定高音和低音扬声器均等效为 16 欧姆电阻,设计如图 2 的简单分频器电 路,要求高低频分界(两个滤波器的截止频率)为 5kHz。 1) 写出高音扬声器和低音扬声器电压对于 vs 的传递函数... -
50MHZ 分频至1MHZ,1KHz,1Hz 分频器
2013-06-18 21:43:5950MHZ 分频至1MHZ,1KHz,1Hz 分频器 -
基于vhdl的分频器设计
2021-01-22 10:25:52一 设计要求 将EDA 板上的系统时钟50MHz 分频为1Hz 的时钟信号 占空比为50% 利用流水灯点亮程序,在EDA 板上观察效果 二 代码实现 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_arith.all; ... -
FPGA基础设计(二):任意分频器(奇数,偶数,小数)
2022-02-27 15:05:35分频器前言分频原理偶数分频 6分频 代码 tb 仿真波形奇数分频 仿真波形 代码 tb 小数分频 说明 半整数分频:N+0.5 仿真波形 代码 tb 小数分频 5.3分频 前言 FPGA... -
50m 分频器设计——50MHZ(含verilog程序)
2021-03-07 06:33:0350m 分频器设计——50MHZ(含verilog程序)分频器设计一、实验目的1、熟悉分频器的原理;2、掌握采用Verilog HDL语言设计分频器的方法;3、进一步学习利用VerilogHDL语言进行层次设计的方法。(wWW.niubb.NeT)二、实验... -
关于分频器的FPGA实现整理思路
2018-08-10 15:15:00分频器是用的最广的一种FPGA电路了,我最初使用的是crazybingo的一个任意分频器,可以实现高精度任意分频的一个通用模块,他的思想在于首先指定计数器的位宽比如32位,那么这个计数器的最大值就是2^32=4294967296, ... -
【EDA】verilog分频器设计与仿真:设计并实现偶数分频器,对开发板上的 50Mhz 时钟分频,得到一个 5MHz 的...
2022-05-05 23:29:58module divider(clk50,clk5); input clk50; output reg clk5; //N=50/5=10倍分频 reg[2:0] count; always @(posedge clk50) //时钟上升沿触发 ... if(count=='d4) //计数到N/2-1=4翻转 ... count<=count+1 -
三、基于Verilog的奇偶分频器设计
2018-08-03 14:57:45在对时钟进行分频时,如果要保证设计出的时钟占空比为 50% ,需要考虑的问题是分频系数是偶数还是奇数。针对分频系数的奇偶性,设计出对应的 module 。 2、偶分频电路 偶分频电路指的是分频系数为 2、4、6、8 ...... -
FPGA实现奇偶分频器和任意整数分频设计及分析思路
2018-08-23 09:32:27本人最近研究FPGA,结合网上经验和自己领悟,重新编写的分频器,首先是偶数分频器,对于N(偶数)分频器,其原理就是利用计数器,当计数器(从0开始计数).../*偶数分频器的设计 Designer : he chunjuan Data : 2018/... -
Verilog设计分频器(面试必看)
2020-12-19 23:19:17分频器是指使输出信号频率为输入信号频率整数分之一的...早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。下面以Verilog HDL 语言为基础介绍占空比为50%的分... -
Verilog 任意整数分频器
2021-12-18 15:37:46有的时候我们只需要用输出时钟的上升沿,不需要考虑下降沿,这样的话我们的输出时钟只需要是单脉冲的就可以了,设计的时候会简单很多,单脉冲的3分频波形图是这样的: 50%占空比的偶数分频方法 偶数分频又可以分成两... -
【原创】奇数分频器
2021-08-04 23:27:20在进行数字电路设计的过程中,分频器是设计中使用频率较高的一种基本设计之一,虽然很多厂家都提供特定的电路模块对时钟进行分频、倍频以及特定相移等,但是对于时钟要求不高的逻辑,特别是在仿真过程中,使用硬件描述... -
vhdl入门6分频器
2019-09-21 14:47:18分频器的设计有两种思路,一种只适用于偶数次,另外一个是通用。 1.首先,需要知道分频的次数。 通过晶振算出时钟周期,然后你需要定时多少时间,用这个时间除周期,就可以得到计数次数。如:500ms的led翻转,50mhz... -
verilog实现简单分频器
2020-12-23 23:19:48以4分频为例,波形图如下:方法一使用模为2N+1的计数器,让输出时钟在X-1(X在0到2N-1之间)和2N时各翻转一次,则可得到奇数分频器,但是占空比并不是50%(应为 X/(2N+1))。得到占空比为50%的奇数分频器的基本思想是:...