分频器设计——50MHZ(含verilog程序)学习资料

合集下载

中文版VerilogHDL简明教程

中文版VerilogHDL简明教程

Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。

被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。

数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。

Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。

所有这些都使用同一种建模语言。

此外,Verilog HDL 语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。

Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。

因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。

语言从C编程语言中继承了多种操作符和结构。

Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。

但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。

当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。

历史Verilog HDL语言最初是于1983年由Gateway Design Automation公司为其模拟器产品开发的硬件建模语言。

那时它只是一种专用语言。

由于他们的模拟、仿真器产品的广泛使用,Verilog HDL 作为一种便于使用且实用的语言逐渐为众多设计者所接受。

在一次努力增加语言普及性的活动中,Verilog HDL语言于1990年被推向公众领域。

Open Verilog International (OVI)是促进Verilog发展的国际性组织。

1992年,OVI决定致力于推广Verilog OVI标准成为IEEE标准。

这一努力最后获得成功,Verilog 语言于1995年成为IEEE标准,称为IEEE Std 1364-1995。

verilog教程

verilog教程

verilog教程Verilog是一种硬件描述语言(HDL),用于描述数字系统的行为和结构。

它是一种流行的HDL,广泛用于硬件设计和验证领域。

本教程将介绍Verilog的基本概念和语法,以帮助初学者入门。

一、Verilog的基本概念1.1 什么是VerilogVerilog是一种描述数字系统的语言,它可以用来描述硬件电路、验证设计的正确性以及进行电路仿真。

1.2 Verilog的应用领域Verilog广泛应用于硬件设计和验证领域,包括用于开发ASIC(应用特定集成电路)、FPGA(现场可编程门阵列)以及其他数字系统的设计。

1.3 Verilog的版本Verilog有多个版本,包括Verilog-1995、Verilog-2001以及最新的Verilog-2005、这些版本之间有一些语法和功能上的差异。

二、Verilog的语法结构2.1模块和端口在Verilog中,所有的电路描述都是由模块(module)组成的。

模块是电路的基本组成单元,可以看作是一个黑盒子,它接受一些输入,产生一些输出。

2.2信号声明在Verilog中,我们需要声明所有的输入和输出信号。

可以使用`input`和`output`关键字来声明这些信号。

2.3电路实现Verilog允许使用多种语句和结构来描述电路的行为和结构。

这些语句包括顺序语句、条件语句、循环语句以及层次结构。

2.4实例化模块在一个模块中,我们可以实例化其他的模块。

这样可以将一个大的电路拆分成多个小的模块,方便编写和测试。

三、Verilog的仿真和验证3.1静态验证Verilog语言本身提供了很多语法和语义层面的验证功能,对于语法和类型错误会有相应的提示。

3.2激励设计在进行电路验证时,我们需要为输入信号提供激励。

Verilog提供了一种称为`testbench`的特殊模块,用于生成输入信号并将其应用到待验证的电路中。

3.3波形仿真在Verilog中,我们可以使用仿真器来模拟电路的行为,并生成波形图来验证电路是否按预期工作。

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

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

实验六Verilog设计分频器/计数器电路一、实验目的1、进一步掌握最基本时序电路的实现方法;2、学习分频器/计数器时序电路程序的编写方法;3、进一步学习同步和异步时序电路程序的编写方法。

二、实验内容1、用Verilog设计一个10分频的分频器,要求输入为clock(上升沿有效),reset(低电平复位),输出clockout为4个clock周期的低电平,4个clock周期的高电平),文件命名为fenpinqi10。

v.2、用Verilog设计一异步清零的十进制加法计数器,要求输入为时钟端CLK(上升沿)和异步清除端CLR(高电平复位),输出为进位端C和4位计数输出端Q,文件命名为coute r10.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、建立工程2、创建Verilog HDL文件3、输入10分频器程序代码并保存4、进行综合编译5、新建波形文件6、导入引脚7、设置信号源并保存8、生成网表9、功能仿真10、仿真结果分析由仿真结果可以看出clockout输出5个clock周期的低电平和5个clock的高电平达到10分频的效果,设计正确。

1Hz-50MHz频率计晶振测量频率测量五位数码管显示

1Hz-50MHz频率计晶振测量频率测量五位数码管显示

1Hz-50MHz频率计晶振测量频率测量五位数码管显示中文描述:这是一个基于PIC单片机的频率计,带有晶振测量功能和可编程的加减频率设置,五位数码管显示,方便直观,全部使用直插元件,电路简单,易于制作。

电路特点:•可测量频率范围1赫兹-50兆赫兹(1Hz-50MHz);•可测量大部分常用晶振的振荡频率;•五位精度分辨率(例如0.0050千赫,4.5765兆赫,11.059兆赫);•自动量程转换,不需人为切换;•可编程的加减频率设置,用于测量无线电收发机等设备;•可选择节电模式,如果15秒内频率没有明显变化自动关闭显示;•可以使用通用的USB 5V接口供电,也可使用外接直流电源或9V 电池。

•元件数量少,全部直插元件,安装调试简单。

•PCB尺寸:80*53毫米•单套重量:0.034KG以小数点是否闪烁指示测量单位,当测试频率数值为KHZ时小数点闪烁,当测试频率为MHZ时小数点不闪烁。

可以通过编程模式设定加减某一频率,程序内置四种频率455kHz, 4.1943MHz, 4.4336MHz, 10.700MHz可直接用来设定。

全部直插元件,按PCB丝印正确焊接即可,焊接完毕后用标准信号源输入信号,调节黄色可调电容使显示数值与信号频率相等即可。

可使用本店的信号发生器进行调整,如无标准信号,也可以使用精度较好的晶振直接校准。

电源可以使用USB转3.5毫米电源线,也可以在-和+焊盘处直接输入5-9V直流电源。

英文描述:100% Brand new and high quality!Designed to measure the oscillation frequency of the most crystal oscillators.Based on for PIC microcontroller can measure frequency of 1 Hz to 50 MHz.Five digits accuracy.Optional power-saving mode: automatically turns the display.General USB interface for power supply, power supply or 9V battery can also be used be used.SpecificationsColor: RedMaterial: PBSFrequency range: 1 Hz-50 MHzCrystal Test Range: 4 MHz-48 MHzBuilt Item Size: 8 * 5.5 * 0.7 cm / 3.2 * 2.2 * 0.3 inches。

Verilog语言基础知识

Verilog语言基础知识
2.常量
在Verilog HDL中,用parameter来定义常量,即用parameter来定义一个标志符,代表一个常量,称为符号常量。其定义格式如下:
parameter 参数名1=表达式,参数名2=表达式,参数名3=表达式……;
例如:
parameter sel=8,code=8'ha3;
//分别定义参数sel为常数8(十进制),参数code为常数a3(十六进制)
Verilog HDL中共有19种数据类型。数据类型是用来表示数字电路中的数据存储和传送单元的。在此介绍4个最基本的数据类型:integer型、parameter型、reg型和wire型。
Verilog HDL中也有常量和变量之分,他们分属以上这些类型。
6.2.1 常量
在程序运行过程中,其值不能被改变的量称为常量。
assign {cout,sum}=ina+inb+cin;//全加
endmodule
【例6.2】一个8位计数器的Verilog HDL源代码
module counter8(out,cout,data,load,cin,clk);
output[7:0]out;
output cout;
input[7:0] data;
6.1.2 Verilog HDL模块的结构
Verilog HDL的基本设计单元是"模块(block)"。一个模块是由两部分组成的,一部分描述接口;另一部分描述逻辑功能,即定义输入是如何影响输出的。下面举例说明,图6.1示出了一个"与-或-非"门电路。
图6.1"与-或-非"电路
该电路表示的逻辑函数可以写为:
6.2.2 变量

Verilog常用分频器的实现

Verilog常用分频器的实现

Verilog常用分频器的实现分频器是指使输出信号频率为输入信号频率整数分之一的电子电路。

在许多电子设备中如电子钟、频率合成器等,需要各种不同频率的信号协同工作,常用的方法是以稳定度高的晶体振荡器为主振源,通过变换得到所需要的各种频率成分,分频器是一种主要变换手段。

早期的分频器多为正弦分频器,随着数字集成电路的发展,脉冲分频器(又称数字分频器)逐渐取代了正弦分频器。

下面以Verilog HDL语言为基础介绍占空比为50%的分频器。

1.偶分频偶分频比较简单,假设为N分频,只需要计数到N/2‐1,然后时钟翻转、计数清零,如此循环就可以得到N(偶)分频。

代码如下。

module fp_even(clk_out,clk_in,rst);input clk_in,rst;output clk_out;reg [7:0] cnt;reg clk_out;`define N 6always@(posedge clk_in or negedge rst)beginif(!rst)begincnt<=0;clk_out<=0;endelse beginif(cnt==`N/2‐1)beginclk_out<=~clk_out;cnt<=0;endelse cnt<=cnt+1;endendendmodule2.奇分频实现奇数分频(N)分频,分别用上升沿到(N-1)/2,再计数到N-1;用下降沿计数到(N-1)/2,再计数到N-1。

得到两个波形,然后把它们相或即可得到N分频。

代码如下。

module fp_odd(clk_in,clk_out,rst,clk_neg,clk_pos);input clk_in,rst;output clk_out,clk_pos,clk_neg;reg [7:0] cnt_pos,cnt_neg;reg clk_pos,clk_neg;`define N 5always@(posedge clk_in or negedge rst) //从零到N‐1不停地循环计数(上升沿)beginif(!rst) cnt_pos<=0;else if(cnt_pos==`N‐1) cnt_pos<=0;else cnt_pos<=cnt_pos+1;endalways@(posedge clk_in or negedge rst)beginif(!rst) clk_pos<=0;else if( cnt_pos==(`N‐1)/2 ) clk_pos<=~clk_pos;else if(cnt_pos==`N‐1) clk_pos<=~clk_pos;endalways@(negedge clk_in or negedge rst) //从零到N‐1不停地循环计数(下降沿)beginif(!rst) cnt_neg<=0;else if(cnt_neg==`N‐1) cnt_neg<=0;else cnt_neg<=cnt_neg+1;endalways@(negedge clk_in or negedge rst)beginif(!rst) clk_neg<=0;else if( cnt_neg==(`N‐1)/2 ) clk_neg<=~clk_neg;else if(cnt_neg==`N‐1) clk_neg<=~clk_neg;endassign clk_out=clk_neg|clk_pos;endmodule3.任意占空比的任意分频在 verilog程序设计中,我们往往要对一个频率进行任意分频,而且占空比也有一定的要求。

Verilog 频率计 电子实验报告

Verilog 频率计 电子实验报告

电子科技大学设计论文论文题目:基于Verilog HDL频率计设计与实现指导老师:学生姓名:学号:专业:摘要在电子技术中,频率是最基本的参数之一,并且与许多电参量的测量方案、测量结果都有十分密切的关系,因此频率的测量就显得更为重要。

测量频率的方法有多种,其中电子计数器测量频率具有精度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手段之一。

电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。

直接测频法适用于高频信号的频率测量,间接测频法适用于低频信号的频率测量。

本文阐述了用V erilogHDL语言设计了一个简单的数字频率计的过程关键词:周期;EDA;VerilogHDL;数字频率计;波形仿真SummaryIn electronics, the frequency is one of the most basic parameters, and m easurement program with a lot of electric parameters, the measurement re sult-s have a very closerelationship, and frequency measurement become s more important. There are several ways of measuring frequency, the elec tronic counter to measure frequency with high precision, easy to use, rapi d measurement, and easy to automate the measurement process, etc., is o ne of the important means of frequency measurement. Electroniccounter freq uency measurement in two ways: First, the direct frequency measurement method to measure the number of pulses of the measured signal, that is, in a certain gatetime; indirect frequency measurement method, such as the cycl e frequency measurement method. Direct frequency measurement method f or high-frequency signal frequency measurement, frequency measurements i ndirectly measured the frequency method is suitable for low-frequency sign als. This paper describes the design of a simple digital frequency meter usi ng Verilog HDL languageKeywords: period; the EDA; the Verilog HDL; digital frequency meter; wavef orm simulation目录1引言 (1)1.1频率计概述 (1)1.2设计目的 (2)1.3设计内容 (2)1.4频率测量的思想和方法 (2)2 Verilog HDL 简介 (4)3 数字频率计系统框图 (5)3.1数字频率计系统部件介绍 (5)3.2数字频率计系统模块划分结构 (6)4 数字频率计程序设计及实现 (7)4.1分频模块div_clk (7)4.2基准频率选择模块sw_sel (8)4.3门控模块gate_ctrl (8)4.4计数模块counter (9)4.5锁存器模块latch (11)4.6显示模块 display (13)4.7顶层模块 topfile (14)5 设计实现 (16)5.1实验设备 (16)5.2管脚分布 (17)5.3下载过程 (17)6 系统测试与结果分析 (18)6.1系统测试 (18)6.2 结果分析: (19)7总结 (20)7.1 结束语 (20)7.2谢辞 (21)参考文献 (21)附录 (21)1引言在电子测量领域中,频率测量的精确度是最高的,可达10—10E-13数量级。

verilog时钟分频设计

verilog时钟分频设计

verilog时钟分频设计1.偶分频模块设计偶分频意思是时钟模块设计最为简单。

首先得到分频系数M和计数器值N。

M = 时钟输入频率 / 时钟输出频率N = M / 2如输入时钟为50M,输出时钟为25M,则M=2,N=1。

偶分频则意味着M为偶数。

以M=4,N=2为例,我们希望得到的输出时钟时序如下:因此只需要将counter以clk_in为时钟驱动计数,当counter = (N-1)时,clk_out翻转即可。

verilog代码如下,其中WIDTH为(N的位宽-1):module time_adv_even #(parameter N = 2,WIDTH = 7)(input clk,input rst,output reg clk_out);reg [WIDTH:0]counter;always @(posedge clk or posedge rst) beginif (rst) begin// resetcounter <= 0;endelse if (counter == N-1) begincounter <= 0;endelse begincounter <= counter + 1;endendalways @(posedge clk or posedge rst) beginif (rst) begin// resetclk_out <= 0;endelse if (counter == N-1) beginclk_out <= !clk_out;endendendmoduletestbench测试8分频即N=4,ISE仿真结果如下:2.奇分频模块设计奇分频需要通过两个时钟共同得到。

首先得到分频系数M和计数器值N。

M = 时钟输入频率 / 时钟输出频率N = (M-1) / 2如输入时钟为50M,输出时钟为10M,则M=5,N=2。

奇分频则意味着M为奇数。

Verilog基础训练5-使用LED数码按秒循环显示数字0至9

Verilog基础训练5-使用LED数码按秒循环显示数字0至9

实训6:使用LED数码按秒循环显示数字0~9问题提出:使用FPGA开发板,设计分频器、计数器、数码管译码显示等电路,将FPGA的50MHz时钟分频至1Hz,驱动计数器,使其从0开始,每隔一秒加1显示,到9后复位重新开始显示。

解决思路:分开两个项目,第1个项目实现一个0~9的计数器(频率为1Hz),另一个项目负责数码管显示,分开设计和仿真,最后整合在一起。

1.使用Quartus 8.0建立第一个项目,建立过程和注意事项见前两周的实验指导,选择器件时随便指定一个。

这里的项目名称为counter10。

(切记项目保存路径和实验过程中新建的文件保存路径都不要出现中文)2.项目建好后,新建Verilog文件并输入代码选择“File”——“New”——“Verilog HDL file”。

文件名同为counter10。

请仔细分析代码!3.编译项目。

“Processing”——“Start Compilation”4.功能仿真编译通过后,新建波形仿真文件:“File”——“New”,选择“Vector Waveform File”,如下图所示:在出现的编辑界面左侧右键,选择如下:在“Insert Node or Bus”里选择“Node Finder…”在弹出来的“Node Finder”中,首先在“Filter”中选择“Pins:Unassigned”,然后点击“list”,在“Nodes Found”中会列出所有的引脚,第三步选择全部引脚(鼠标拉),点击“>>”,最后点击“OK”即可。

在回到的“Insert Node or Bus”界面点击“OK”。

这时候会看到所有的引脚会列出来,如下所示。

由实验原理可知,clk为FPGA板的时钟,rstn为复位信号,因此设置clk为10ns的周期信号,rstn默认为高电平,在10-30ns区间内为低电平。

设置方法如下:选择输入“clk”,点击右键,选择“Value”——“Clock”。

VERILOG 分频原理

VERILOG 分频原理

VERILOG 分频原理众所周知,分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如altera 的PLL,Xilinx的DLL.来进行时钟的分频,倍频以及相移。

但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。

另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。

因此很多招聘单位在招聘时往往要求应聘者写一个分频器(比如奇数分频)以考核应聘人员的设计水平和理解程度。

下面讲讲对各种分频系数进行分频的方法:第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。

如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。

以此循环下去。

这种方法可以实现任意的偶数分频。

第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:首先,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。

即是在计数值在邻近的1和2进行了两次翻转。

这样实现的三分频占空比为1/3或者2/3。

如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。

这种方法可以实现任意的奇数分频。

归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。

分频器电路的Verilog设计

分频器电路的Verilog设计

6. 偶数分频器的设计rate=even(偶数),占空比50%设计原理:定义一个计数器对输入时钟进行计数,(1)在计数的前一半时间里,输出高电平,(2)在计数的后一半时间里,输出低电平,这样输出的信号就是占空比为50%的偶数分频信号。

例如,设计一个6分频电路。

对什么计数?①计数值为0~2输出高电平,②计数值为3~5输出低电平。

上升沿计数一个计数周期0112分频module divder_even(clkin,clkout);parameter n=2;input clkin;output clkout;integer cnt;reg clkout;always@(posedge clkin)beginif(cnt<n-1) cnt<=cnt+1;else cnt<=0;endalways@(cnt)beginif(cnt<n/2) clkout<=1'b1;else clkout<=1'b0;end endmodule计数过程判断赋值过程module divder_even(clkin,clkout);parameter n=2;input clkin;output clkout;integer cnt;reg clkout;always@(posedge clkin)beginif(cnt==n/2-1)begincnt<=0;clkout<=~clkout;endelse cnt<=cnt+1;endendmodule 2分频分析4分频分析二分频四分频知识小结1.移位寄存器的verilog描述。

2.偶数分频的verilog描述。

作业1.设计一个5位串入并出的移位寄存器。

Clear :同步清零;clkin :时钟输入;databit :位输入y[4..0]并行数据输出;2.设计一个4位并入串出的移位寄存器Clear :同步清零;clkin :时钟输入(移位);dataIn :并行数据输入,y :串行数据输出。

分频器设计——50MHZ(含verilog程序)

分频器设计——50MHZ(含verilog程序)

分频器设计一、实验目的1、熟悉分频器的原理;2、掌握采用Verilog HDL 语言设计分频器的方法;3、进一步学习利用VerilogHDL 语言进行层次设计的方法。

二、实验内容1、采用Verilog 语言设计一个十分频器,记录Verilog 程序;2、对十分频器进行功能仿真,观察仿真波形;3、仿真没有问题后,将分频比改为50000000,实现一个50M 分频器。

利用此分频器和开发板上的50MHz 时钟信号,得到1Hz 的秒脉冲信号,完成如图1-2.28所示的秒计数器。

50M分频器50MHz 脉冲信号二位十进制计数器1Hz 秒脉冲数码管(个位)数码管(十位)复位和计数使能(拨码开关)程序设计如下:module fenp(clk_out,clk_in,reset);output clk_out;input clk_in;input reset;reg [1:0] cnt;reg clk_out;always@(posedge clk_in or posedge reset)beginif(reset)begincnt<=0;clk_out<=0;endelsebeginif(cnt==24999999)beginclk_out<=!clk_out;cnt<=0;endelsecnt<=cnt+1;endendendmodule本程序经验证,完全可以实现实验要求。

文章来自某大学EDA实验课。

verilog设计

verilog设计

Verilog 程序设计报告一、课题概述:任务:本实验主要完成8位比较器、分频器、阻塞赋值和非阻塞赋值的区别、8路的数据选择器、有限状态机的设计。

目的:通过实验掌握基本组合逻辑电路、时序逻辑电路的实现流程;条件语句及case语句的用法;在实验中认识阻塞赋值和非阻塞赋值的区别;能够设计出简单的有限状态机。

要求:熟练掌握verilog的基本语法知识和一些基本语句的用法。

二、设计思路及采取方案思路:(1)8位比较器可以用数据流描述方法(assign赋值语句)或行为描述方法(always语句)或结构描述方法(元件例化)实现。

(2)分频器可以采用if…else语句或case语句实现。

(3)阻塞赋值和非阻塞赋值的区别可以通过观察波形图及分析综合出的电路图来得到。

(4)8位数据选择器可以采用assign赋值语句及always语句实现。

(5)有限状态机可以采用case语句实现。

方案:(1)8位的比较器采用assign赋值语句实现。

(2)用if…else条件语句实现分频器的设计。

(3)通过观察波形图,得出利用阻塞赋值和非阻塞赋值设计电路的特点和区别。

(4)利用always语句实现8位数据选择器。

(5)利用case语句完成有限状态机的设计。

三、实验结果结果:我基本完成以上的5个任务,并且通过这些任务的完成,巩固了已经学过的知识,提高了自己的动手操作能力,坚定了继续学习的信心。

四、实验体会体会:第一次接触学习硬件编程语言,感受到verilog与软件编程语言有着许多显著的差别,最重要的是用verilog可以编出并行执行的程序,通过不断的学习和实践,习惯了用硬件结构思路编程,由于一些细节把握不到位,在设计中出现了许多错误;像进程赋值语句声明寄存器变量时格式出错、begin-end声明语句没有注意相互匹配、在声明语句的末尾忘了写上分号等等。

编译不成功时,我会不厌其烦的去查找错误,直至编译成功、满足题目的要求。

通过实验不仅巩固了已经学过的知识而且加强了自己的动手操作能力,为以后的考研及工作打下了基础。

奇数分频器VHDL设计

奇数分频器VHDL设计

奇数分频器1 引言分频器在CPLD/FPGA设计中使用频率非常高,尽管目前大部分设计中采用芯片厂家集成的锁相环资源,但是对于要求奇数倍分频、小数倍分频的应用场合却往往不能满足要求。

硬件工程师希望有一种灵活的设计方法,根据需要,在实验室就能设计分频器并马上投入使用,更改频率时无需改动原器件或电路板,只需重新编程,在数分钟内即可完成。

对于偶数分频,使用一模N计数器模块即可实现,即每当模N计数器从0开始计数至N时,输出时钟进行翻转,同时使计数器复位,使之从0开始重新计数,以此循环即可实现。

但对于奇数分频,实现50%的占空比却是比较困难的。

下面给出占空比50%的奇数分频器的设计源程序和仿真结果。

2 VHDL程序LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;--添加库ENTITY fdiv IS --设计实体PORT( clk,reset : IN STD_LOGIC;--端口说明preset: IN INTEGER;--preset:分频预置数clkout : OUT STD_LOGIC);- -clkout :分频后得到的时钟END fdiv;ARCHITECTURE behave OF fdiv IS--设计构造体SIGNAL s1,s2 : STD_LOGIC;--内部信号s1,s2 SIGNAL cnt : INTEGER RANGE 0 TO preset-1;--模为preset的计数信号BEGINP1: PROCESS(clk,reset) --计数器BEGINIF reset='1' THENcnt<=0;ELSIF clk'event AND clk='1' THENIF cnt=0 THENcnt<=preset-1;ELSEcnt<=cnt-1;END IF;END IF;END PROCESS;P2: PROCESS(clk,reset) --信号1 BEGINIF reset='1' THENs1<='1';ELSIF clk'event AND clk='1' THENIF cnt=0 THEN --计数信号为0时,S1翻转s1<=NOT s1;ELSEs1<=s1;END IF;END IF;END PROCESS;P3: PROCESS(clk,reset) --信号2 BEGINIF reset='1' THENs2<='1';ELSIF clk'event AND clk='0' THENIF cnt=(preset-1)/2 THEN --计数信号为N时,S2翻转s2<=NOT s2;ELSEs2<=s2;END IF;END IF;END PROCESS;clkout<= s1 XOR s2; -- 异或输出END BEHA VE;程序说明:以上程序实现任意奇数为PRESET的50%占空比分频,计数器CNT的模值为PRESET,计数器是为了控制信号S1和信号S2,使两信号保持恒定的时间差。

Verilog实现三分频的多种方法(附有代码)

Verilog实现三分频的多种方法(附有代码)

用Verilog语言实现奇数倍分频电路 3分频 5分频 7分频分频器是FPGA设计中使用频率非常高的基本设计之一,尽管在目前大部分设计中,广泛使用芯片厂家集成的锁相环资源,如altera 的PLL,Xilinx的DLL.来进行时钟的分频,倍频以及相移。

但是对于时钟要求不高的基本设计,通过语言进行时钟的分频相移仍然非常流行,首先这种方法可以节省芯片内部的锁相环资源,再者,消耗不多的逻辑单元就可以达到对时钟操作的目的。

另一方面,通过语言设计进行时钟分频,可以看出设计者对设计语言的理解程度。

下面讲讲对各种分频系数进行分频的方法:第一,偶数倍分频:偶数倍分频应该是大家都比较熟悉的分频,通过计数器计数是完全可以实现的。

如进行N倍偶数分频,那么可以通过由待分频的时钟触发计数器计数,当计数器从0计数到N/2-1时,输出时钟进行翻转,并给计数器一个复位信号,使得下一个时钟从零开始计数。

以此循环下去,这种方法可以实现任意的偶数分频。

第二,奇数倍分频:奇数倍分频常常在论坛上有人问起,实际上,奇数倍分频有两种实现方法:首先,占空比不限定时,完全可以通过计数器来实现,如进行三分频,通过待分频时钟上升沿触发计数器进行模三计数,当计数器计数到邻近值进行两次翻转,比如可以在计数器计数到1时,输出时钟进行翻转,计数到2时再次进行翻转。

即是在计数值在邻近的1和2进行了两次翻转。

这样实现的三分频占空比为1/3或者2/3。

如果要实现占空比为50%的三分频时钟,可以通过待分频时钟下降沿触发计数,和上升沿同样的方法计数进行三分频,然后下降沿产生的三分频时钟和上升沿产生的时钟进行相或运算,即可得到占空比为50%的三分频时钟。

这种方法可以实现任意的奇数分频。

归类为一般的方法为:对于实现占空比为50%的N倍奇数分频,首先进行上升沿触发进行模N计数,计数选定到某一个值进行输出时钟翻转,然后经过(N-1)/2再次进行翻转得到一个占空比非50%奇数n分频时钟。

分频器设计 FPGA

分频器设计 FPGA

第1章 本课题内容1 课题目的频率合成技术是现代通讯系统的重要组成部分,是对一个高精度和高稳定度的基准频率进行加、减、乘、除四则运算,产生具有同样稳定度和基准度的频率。

分频器是数字逻辑电路设计中经常使用的一个基本电路。

通常,整数分频可以很容易地用计数器或状态机来实现。

但在某些场合下,时钟源与所需要的频率并不成整数关系,此时便需要采用小数分频器进行分频。

一般来说,小数分频电路可以分为半整数分频电路和非半整数分频电路两类。

对于小数分频的FPGA 设计,目前广泛采用的方法是双模前置小数分频,以及一种由双模前置小数分频改进而得到的小数分频——用一个半整数分频器和一个整数分频器代替双模前置小数分频中的两个整数分频器。

虽然这两种方案输出时钟的占空比误差和抖动性能方面有所差别,但其工作原理却是一致的。

双模前置小数分频器在理论上可以实现任意小数分频。

但在实际的电路设计中,不可能真正实现任意小数分频。

小数分频器的精度受控制计数器的影响,而控制计数器的设计会受硬件资源的限制,尽管FPGA 有相当丰富的硬件资源。

另外,基于FPGA 实现的双模前置小数分频器在两个整数分频时钟之间的切换点上,有时候会出现毛刺,而时钟是不应该有毛刺存在的。

此时,就要结合脉冲删除技术,设计出一种可以进行任意小数分频且不会出现毛刺的小数分频方案,并通过编程实现。

本文利用VHDL 硬件描述语言的设计方式,通过MAXPLUS II 开发平台,使用Altera 公司的FPGA 器件,设计并实现了一种不同占空比的任意小数分频器。

2 小数分频的基本原理假设时钟源的频率为f 0 ,期望得到的频率为f 1 ,则其分频比X 为:X=10f f (式1-1) 其中,X>1。

若M<X<M+1,M 为整数,则有 X=M+212N N N +=2121)1(N N N M N M +⨯++⨯ (式1-2)其中,N 1和N 2均为整数。

当N 1和N 2取不同的正整数时,从)(212N N N +可以得到任意一个小数,就可以从理论上实现任意小数分频比的分频。

分频的verilog语言实现

分频的verilog语言实现

分频的Verilog实现1.分频:在实际应用中,自己设计的开发板上不会去装多个晶振来产生不同频率的时钟信号,这就要我们在已有的基础上自己来创造设计电路中所需要的时钟信号来,有时候所需要的频率并不是在已有的频率上直接进行简单的整数分频就可以得到的,有时需要进行小数的分频。

2.在分频的过程中,偶数分频并不困难,若要进行2N次分频的话,只需要计数到N的时候,波形进行翻转就行了,或者在最后一级加一个2分频也可以实现。

下面是我写的一个偶数分频的代码:module div2n(rst,clk,cnt,clk_2n);//偶数次分频input rst,clk;output clk_2n,cnt;reg [3:0] cnt;//刚开始没有定义计数的位宽仿真的时候老是出现输出为0的现象,看似很简单的程序搞的有些纠结啊reg clk_2n;always @(posedge clk )beginif(rst) //若复位信号为高电平则计数清零和输出清零begincnt<=0;clk_2n<=0;endelseif(cnt==3)//进行8分频,这里的cnt取不同的值进行其他的分频,若计数到达4时从0开始的输出电平翻转beginclk_2n<=~clk_2n;cnt<=0;endelse cnt<=cnt+1;endendmodule功能仿真波形以及后仿真波形如下:从后仿真中可以明显的看出输出时钟信号和输入的标准信号有延迟时间,在计数寄存器中出现了相邻两个数之间的竞争,但是没有出现在时钟的上升沿,不会引起最后实现的错误!奇数分频:若奇数分频中不考虑占空比的话,分频代码可以按照偶数分频的思路来写,但是大多数情况下需要考虑的是使占空比设计为50%。

若要进行奇数次的分频而且要求占空比为50%可以采用:用两个计数器,一个由输入时钟下降沿触发,一个由输入时钟的上升沿触发,最后将两个计数器的输出进行相或,就可得到。

Verilog-数字频率计

Verilog-数字频率计
第三章
3.1
由于晶体振荡器提供的为48M的时钟,而在整个频率计里将用到周期为2s、0.2s和0.02s的闸门信号,还有译码显示的扫描信号1KHz,所以我们在此模块先分频产生1Hz、10Hz、100Hz、1KHz四个分频信号,以留作其它模块用。
分频分别采用4个计数器来实现,当计到一定的值时输出的分频信号翻转,最后分别获得4个分频输出,分频器模块如下图所示:
关键词:FPGA,Verilog,ISE,测频方法
Abstract
This paper introducesthedesign methodofdigitalfrequencymeter based on FPGA,whichusehardware description language-Verilogin software development platform ISEandcanwordin relatively high-speed clockof48MHz. The frequency meter usesthemethodoffrequency measurement, whichcouldaccuratelymeasurethefrequencyofsignalsbetween10Hz to 100MHz.This systemusesthe simulation tool-ModelSim to run and debug theVerilogprogram, and design the circuit placement. A good result can be achieved when the program was burnt on the chip Spartan3A.
图1-7时基信号产生电路
第二章
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

分频器设计——50M H Z(含v e r i l o g
程序)
分频器设计
一、实验目的
1、熟悉分频器的原理;
2、掌握采用Verilog HDL语言设计分频器的方法;
3、进一步学习利用VerilogHDL语言进行层次设计的方法。

二、实验内容
1、采用Verilog语言设计一个十分频器,记录Verilog程序;
2、对十分频器进行功能仿真,观察仿真波形;
3、仿真没有问题后,将分频比改为50000000,实现一个50M分频器。

利用此分频器和开发板上的50MHz时钟信号,得到1Hz的秒脉冲信号,完成如图1-2.28所示的秒计数器。

(拨码开关)
程序设计如下:
module fenp(clk_out,clk_in,reset); output clk_out;
input clk_in;
input reset;
reg [1:0] cnt;
reg clk_out;
always@(posedge clk_in or posedge reset) begin
if(reset)
begin
cnt<=0;
clk_out<=0;
end
else
begin
if(cnt==24999999)
begin
clk_out<=!clk_out;
cnt<=0;
end
else
cnt<=cnt+1;
end
end
endmodule
本程序经验证,完全可以实现实验要求。

文章来自某大学EDA实验课。

相关文档
最新文档