1、基于fpga的任意小数分频器基于FPGA的任意小数分频器熊翔成都电子机械高等专科学校摘要:论文分析了双模前置小数分频器的分频原理和电路实现。结合脉冲删除技术,提出了一种适于硬件电路实现的任意小数分频的设计方案,用Verilog HDL语言编程,在Quartus II下对此方案进行了仿真。Abstract:The paper analyzes the principle and circuit of the dual-mode pre-decimal divider. The combination of pulse removal technique, suitable for the rea
2、lization of the hardware circuit, any fractional frequency design, Verilog HDL language programming, this option in the Quartus II simulation.一、FPGA的简介11、发展历史 12、FPGA的特点23、FPGA的优点34、FPGA与CPLD的区别4二、Verilog HDL 的基础语言知识51、HDL指南52、语言 63、数据类型114、运算符14三、Quartus II 使用简介161、新建工程162、程序建立183、仿真19四、分频器211、分频器概
3、述212、分频器分类223、基于FPGA的任意小数分频的实现 224、RTL Viewer28五、结束语28参考文献29一、FPGA简介当今社会是数字化的社会,是数字广泛应用的社会。数字集成电路本身在不断地进行更新换代。它由早期的管、小中规模集成电路,发展到超大规模集成电路(C,几万门以上)以及许多具有特定功能的专用集成电路。但是,随着微电子技术的发展,设计与制造集成电路的任务已不完全由半导体厂商来独立承担。系统设计师们更愿意自己设计专用集成电路(),而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场(FPLD),其中应用
4、最广泛的当属(FPGA)和复杂可编程逻辑器件(CPLD)。1 发展历史 早期的可编程逻辑器件只有可编程只读(PROM)、紫外线可擦除 (EPROM)和电可擦除只读存储器(E2PROM)三种。由于结 构的限制,它们只能完成简单的数字逻辑功能。 其后出现了一类结构上稍复杂的可编程芯片,即可编程逻辑器件(PLD), 它能够完成各种数字逻辑功能。典型的PLD由一个“与”门和一个“或”门阵列 组成,而任意一个组合逻辑都可以用“与或”表达式来描述,所以PLD能以 乘积和的形式完成大量的组合逻辑功能。 这一阶段的产品主要有PAL(可编程阵列逻辑)和GAL(通用阵列逻辑)。 PAL由一个可编程的“与”平面和一
5、个固定的“或”平面构成,或门的输出可以 通过有选择地被置为寄存状态。PAL器件是现场可编程的,它的实现 工艺有反熔丝技术、EPROM技术和E2PROM技术。还有一类结构更为灵 活的逻辑器件是可编程逻辑阵列(PLA),它也由一个“与”平面和一个“或” 平面构成,但是这两个平面的连接关系是可编程的。PLA器件既有现场可编 程的,也有掩膜可编程的。在PAL的基础上又发展了一种通用阵列逻辑 (GAL,Generic Logic),如、等。它采用了 EPROM工艺,实现了电可擦除、电可改写,其输出结构是可编程的逻辑 宏单元,因而它的设计具有很强的灵活性,至今仍有许多人使用。这些早期 的PLD器件的一个共
6、同特点是可以实现速度特性较好的逻辑功能,但其过 于简单的结构也使它们只能实现规模较小的电路。 为了弥补这一缺陷,20世纪80年代中期,和分别推出了 类似于PAL结构的扩展型CPLD(Complex Programmable Logic Dvice) 和与标准门阵列类似的FPGA(FieldProgrammable Gate Array),它们 都具有体系结构和逻辑单元灵活、集成度高以及适用范围宽等特点。这两种 器件兼容了PLD和通用门阵列的优点,可实现较大规模的电路,编程也很 灵活。与门阵列等其他ASIC(Application Specific IC)相比,它们又具 有设计开发周期短、设计制
7、造成本低、先进、标准产品不需测试、 质量稳定以及可实时在线检验等优点,因此被广泛应用于产品的原型设计和 产品生产(一般在10 000件以下)之中。几乎所有应用门阵列、PLD和中 小规模通用数字集成电路的场合均可应用FPGA和CPLD器件。 FPGA是英文Field Programmable Gate Arry的缩写,即现场可编程 门阵列,它是在PAL、GAL、EPLD等可件的基础上进一步发展的产 物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的, 既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。2 FPGA的基本特点 FPGA采用了逻辑单元阵列(L,Logi
8、c Cell Arry)这样一个新概念, 内部包括可配置逻辑模块(CLB,Configurable Logic Block)、输入(IOB,Input Block)和内部连线(Interconnect)三个部 分。FPGA的基本特点主要有: (1)采用FPGA设计ASIC电路,用户不需要投片生产就能得到合用 的芯片; (2)FPGA可做其他全定制或半定制ASIC电路的试样片: (3)FPGA内部有丰富的触发器和IO引脚; (4)FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的 器件之一; (5)FPGA采用高速CH工艺,功耗低,可以与CMOS、TTL电 平兼容。 可以说,FPGA
9、芯片是小批量系统提高系统集成度和可靠性的最佳选择 之一。 目前FPGA的品种很多,有的xc系列、TI公司的TPC系列、 公司的FIEX系列等。 FPGA是由存放在片内RAM中的程序来设置其工作状态的。因此,工作 时需要对片内的RAM进行编程。用户可以根据不同的配置模式采用不同的 编程方式。 加电时,FPGA芯片将EPROM中的数据读入片内编程RAM中,配置 完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系 消失。因此,FPGA能够反复使用。FPGA的编程不需专用的FPGA编程器, 只需用通用的EPROM、PROM编程器即可。当需要修改FPGA功能时,只 需换一片EPROM
10、即可。这样,同一片FPGA、不同的编程数据,可以产生 不同的电路功能。因此,FPGA的使用非常灵活。 FPGA有下面4种配置模式: (1)并行主模式为一片FPGA加一片EPROM的方式; (2)主从模式可以支持一片PROM编程多片FPGA: (3)串行模式可以采用串行PROM编程FPGA; (4)外设模式可以将FPGA作为的外设,由微对其 编程。3 FPGA的优点 FPGA芯片都是特殊的ASIC芯片,除了具有ASIC的特点之外,还具 有以下3个优点。 随着超大规模集成电路(V,Very Large Scale IC)工艺的不断 提高,单一芯片内部可以容纳上百万个晶体管,FPGACPLD芯片的规
11、模 也越来越大,其单片逻辑门数已达到上百万门,它所能实现的功能也越来越 强,同时也可以实现系统集成。 FPGACPLD芯片在出厂之前都做过百分之百的测试,不需要设计人 员承担投片风险和费用,设计人员只需在自己的实验室里就可以通过相关的 软硬件环境来完成芯片的最终功能设计。所以,FPGACPLD的资金投入 小,节省了许多潜在的花费。用户可以反复地编程、擦除、使用或者在外围电路不动的情况下用不同的软件实现不同的功能。所以,用FPGAiCPLD试制样片,能以最快的速度占领市场。FPGACPLD软件包中有各种输入工具和仿真工具及版图设计工具和编程器等全线产品,电路设计人员在很短的时间内就可完成电路的输
12、入、编译、优化、仿真,直至最后芯片的制作。当电路有少量改动时,更能显示出FPGACPLD的优势。电路设计人员使用FPGACPLD进行电路设计时,不需要具备专门的IC(集成电路)深层次的知识,FPGACPLD软件易学易用,可以使设计人员更能集中精力进行电路设计,快速将产品推向市场。4、FPGA与CPLD的区别尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点: CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。 CPLD的连
13、续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。 在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。 FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。 CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或 FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息 需存放在外部存储器上,使用方法复杂。 CPLD的速度比FPGA快,并且具有较大的时间可预测性。这
14、是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。 在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编 程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其 优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。 CPLD保密性好,FPGA保密性差。 一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。 随著复杂可编程
15、逻辑器件(CPLD)密度的提高,数字器件设计人员在进行大型设计时,既灵活又容易,而且产品可以很快进入市常许多设计人员已经感受到 CPLD容易使用。时序可预测和速度高等优点,然而,在过去由于受到CPLD密度的限制,他们只好转向FPGA和ASIC。现在,设计人员可以体会到密度 高达数十万门的CPLD所带来的好处。二、Verilog HDL的基础语言知识1、 HDL指南 1.1 模块模块是Verilog 的基本描述单位,用于描述某个设计的功能或结构及其与其他模块通信的外部端口。一个设计的结构可使用开关级原语、门级原语和用户定义的原语方式描述; 设计的数据流行为使用连续赋值语句进行描述; 时序行为使用
16、过程结构描述。一个模块可以在另一个模块中使用。在模块中,可用下述方式描述一个设计: 1) 数据流方式; 2) 行为方式; 3) 结构方式; 4) 上述描述方式的混合。1.2 时延 Verilog HDL模型中的所有时延都根据时间单位定义。 下面是带时 延的连续赋值语句实例。 assign #2 Sum = A B;#2指2个时间单位。1.3 数据流描述方式 用数据流描述方式对一个设计建模的最基本的机制就是使用连续赋 值语句。在连续赋值语句中,某个值被指派给线网变量。 连续赋值语句 的语法为:assign delay LHS_net = RHS_ expression;右边表达式使用的操作数无论
17、何时发生变化, 右边表达式都重新计算, 并且在指定的时延后变化值被赋予左边表达式的线网变量。时延定义了 右边表达式操作数变化与赋值给左边表达式之间的持续时间。如果没有 定义时延值, 缺省时延为0。 请注意连续赋值语句是如何对电路 的数据流行为建模的;这种建模方式是隐式而非显式的建模方式。此外, 连续赋值语句是并发执行的,也就是说各语句的执行顺序与其在描述中 出现的顺序无关。1.4 行为描述方式设计的行为功能使用下述过程语句结构描述: 1) initial语句:此语句只执行一次。 2) always语句:此语句总是循环执行, 或者说此语句重复执行。只有寄存器类型数据能够在这两种语句中被赋值。寄存
18、器类型数据在被赋新值前保持原有值不变。所有的初始化语句和always语句在0时刻并发执行。 在顺序过程中出现的语句是过程赋值模块化的实例。模块化过程赋值在下一条语句执行前完成执行。过程赋值可以有一个可选的时延。 时延可以细分为两种类型: 1) 语句间时延: 这是时延语句执行的时延。 2) 语句内时延: 这是右边表达式数值计算与左边表达式赋值间的时延。 1.5 结构化描述形式 在Verilog HDL中可使用如下方式描述结构: 1) 内置门原语(在门级); 2) 开关级原语(在晶体管级); 3) 用户定义的原语(在门级); 4) 模块实例 (创建层次结构)。1.6 混合设计描述方式在模块中,结构
19、的和行为的结构可以自由混合。也就是说,模块描述中可以包含实例化的门、模块实例化语句、连续赋值语句以及always语句和initial语句的混合。它们之间可以相互包含。来自always语句和initial语句(切记只有寄存器类型数据可以在这两种语句中赋值)的值能够驱动门或开关,而来自于门或连续赋值语句(只能驱动线网)的值能够反过来用于触发always语句和initial语句。2、语言2.1 标识符 VerilogHDL中的标识符(identifier)可以是任意一组字母、数字、$符 号和_(下划线)符号的组合,但标识符的第一个字符必须是字母或者下划 线。另外,标识符是区分大小写的。转义标识符(e
20、scaped identifier )可以在一条标识符中包含任何可打印字符。转义标识符以(反斜线)符号开头,以空白结尾(空白可以是一个空格、一个制表字符或换行符)。Verilog HDL定义了一系列保留字,叫做关键词,它仅用于某些上下文中另外,转义标识符与关键词并不完全相同。标识符initial 与标识符initial(这是个关键词)不同。注意这一约定与那些转义标识符不同。 2.2 注释 在Verilog HDL中有两种形式的注释。 /*第一种形式:可以扩展至 多行 */ /第二种形式:在本行结束。 2.3 格式 Verilog HDL区分大小写。也就是说大小写不同的标识符是不同的。 此外,V
21、erilog HDL是自由格式的,即结构可以跨越多行编写,也可以在一行内编 写。白空(新行、制表符和空格)没有特殊意义 2.4 系统任务和函数 以$字符开始的标识符表示系统任务或系统函数。任务提供了一种封 装行为的机制。这种机制可在设计的不同部分被调用。任务可以返回0 个或多个值。函数除只能返回一个值以外与任务相同。此外,函数在0 时刻执行,即不允许延迟,而任务可以带有延迟。 $display (Hi, you have reached LT today); /* $display 系统任务在新的一行中显示。*/ $time /该系统任务返回当前的模拟时间。 2.5 编译指令 以(反引号)开始
22、的某些标识符是编译器指令。在Verilog语言编 译时,特定的编译器指令在整个编译过程中有效(编译过程可跨越多个 文件),直到遇到其它的不同编译程序指令。完整的标准编译器指令如 下: * define, undef * ifdef, else, endif * default_nettype * include * resetall * timescale * unconnected_drive, nounconnected_drive * celldefine, endcelldefine 2.6 值集合 Verilog HDL有下列四种基本的值: 1) 0:逻辑0或“假” 2) 1:逻辑1
23、或“真” 3) x:未知 4) z:高阻 注意这四种值的解释都内置于语言中。如一个为z的值总是意味着高阻 抗,一个为0的值通常是指逻辑0。 在门的输入或一个表达式中的为“z”的值通常解释成“x”。此外,x值 和z值都是不分大小写的,也就是说,值0x1z与值0X1Z相同。Verilog HDL中的常量是由以上这四类基本值组成的。 Verilog HDL中有三类常量: 1) 整型 2) 实数型 3) 字符串型 下划线符号(_)可以随意用在整数或实数中,它们就数量本身没有 意义。它们能用来提高易读性;唯一的限制是下划线符号不能用作为首 字符。 2.6.1 整型数 整型数可以按如下两种方式书写: 1)
24、 简单的十进制数格式 2) 基数格式 1). 简单的十进制格式 这种形式的整数定义为带有一个可选的 “+”(一元)或 “”(一元)操作符的数字序列。下面是这种简易十进制形式整 数的例子。 32 十进制数32 15 十进制数15 这种形式的整数值代表一个有符号的数。负数可使用两种补 码形式表示。因此32在5位的二进制形式中为10000,在6位 二进制形式中为110001;15在5位二进制形式中为10001, 在6位二进 制形式中为110001。 2). 基数表示法 这种形式的整数格式为: size base value size 定义以位计的常量的位长;base为o或O(表示八进制), b或B(
25、表示二进制),d或D(表示十进制),h或H(表 示十六进制)之一;value是基于base的值的数字序列。值 x和z以及十六进制中的a到f不区分大小写。 2.6.2 实数 实数可以用下列两种形式定义: 1) 十进制计数法;例如 2.0 5.678 11572.12 0.1 2. /非法:小数点两侧必须有1位数字 2) 科学计数法; 这种形式的实数举例如下: 23_5.1e2 其值为23510.0; 忽略下划线 3.6E2 360.0 (e与E相同) 5E4 0.0005 Verilog语言定义了实数如何隐式地转换为整数。实数通过四舍 五入被转换为最相近的整数。 2.6.3 字符串 字符串是双引
26、号内的字符序列。字符串不能分成多行书写。例如: INTERNAL ERROR REACHEDHERE 反斜线 ( ) 用于对确定的特殊字符转义。 n 换行符 t 制表符 字符本身 字符 206 八进制数206对应的字符 2.7 数据类型 Verilog HDL 有两大类数据类型。 1) 线网类型。net type 表示Verilog结构化元件间的物理连线。它的值由驱动元件 的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线 网,网线的缺省值为z。 2) 寄存器类型。register type表示一个抽象的数据存储单元,它只能在always语句 和initial语句中被赋值,并且它的值从一个赋值到另一个赋值被 保存下来。寄存器类型的变量具有x的缺省值。 2.7.1 线网类型 线网数据类型包含下述不同种类的线网子类型。 * wire * tri * wor * trior * wand * triand * trireg * tri1 * tri0 * supply0 2.7.2 向量和标量线网 在定义向量线网时可选用关键词scalared 或vectored。如果一 个线网定义时使用了关键词vectored, 那么就不允许位选择和部分选择该
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1