logo资料库

用Verilog 实现基于FPGA 的通用分频.pdf

第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
资料共3页,全文预览结束
基 础 设 计 KnowledgeBase 用 Verilog 实现基于 FPGA 的 通用分频器 ■ 华北电力大学(北京)信息工程系 / 唐晓燕,梁光胜,王玮 在复杂数字逻辑电路设计中,经常会用到多个不同的时 基于 S R A M 工艺的,而 S R A M 工艺的芯片在掉电后信息就会 钟信号。介绍一种通用的分频器,可实现 2~256 之间的任意 丢失,一定需要外加一片专用配置芯片,在上电的时候,由 奇数、偶数、半整数分频。首先简要介绍了 FPGA 器件的特点 这个专用配置芯片把数据加载到 FPGA 中,然后 FPGA 就可以 和应用范围。接着介绍了通用分频器的基本原理和分类,并 正常工作,由于配置时间很短,不会影响系统正常工作。 也 以分频比为奇数 7 和半整数 6.5 的分频器设计为例,介绍了 有少数 FPGA 采用反熔丝或 Flash 工艺,对这种 FPGA,就不需 在QuartusII开发软件下,利用Verilog硬件描述语言来设计数 要外加专用的配置芯片。 字逻辑电路的过程和方法。 FPGA(Field programmable Gates Array,现场可编程门 在数字逻辑电路设计中,分频器是一种基本电路。我们 阵列)都是可编程逻辑器件,它们是在 P A L、G A L 等逻辑器 常会遇到偶数分频、奇数分频、半整数分频等,在同一个设 件基础上发展起来的。同以往的 PAL、GAL 相比,FPGA/CPLD 计中有时要求多种形式的分频。通常由计数器或计数器的级 的规模比较大,适合于时序、组合等逻辑电路的应用。它可 联构成各种形式的偶数分频和奇数分频,实现较为简单。但 以替代几十甚至上百块通用 IC 芯片。这种芯片具有可编程和 对半整数分频分频实现较为困难。但在某些场合下,时钟源 实现方案容易改动等特点。由于芯片内部硬件连接关系的描 与所需的频率不成整数倍关系,此时可采用小数分频器进行 述可以存放在磁盘、R O M 、P R O M 、或 E P R O M 中,因而在可 分频。例如:时钟源信号为 130MHz,而电路中需要产生一个 编 程 门 阵 列 芯 片 及 外 围 电 路 保 持 不 动 的 情 况 下 ,换 一 块 20MHz 的时钟信号,其分频比为 6 . 5 ,因此根据不同设计的 EPROM 芯片,就能实现一种新的功能。它具有设计开发周期 需要,本文利用 Verilog 硬件描述语言,通过 MAX+plus II 开 短、设计制造成本低、开发工具先进、标准产品无需测试、质 发平台,使用 Altera 公司的 FLEX 系列 EPF10K10LC84-3 型 量稳定以及实时在检验等优点,因此,可广泛应用于产品的 FPGA ,设计了一种能够满足上述各种要求的较为通用的分频 原理设计和产品生产之中。几乎所有应用门阵列、P L D 和中 器。 小规模通用数字集成电路的场合均可应用 F P G A 和 C P L D 器 件。在现代电子系统中,数字系统所占的比例越来越大。系 基于查找表(LUT)的 FPGA 的结构特点 统发展的越势是数字化和集成化,而 F P G A 作为可编程 ASIC (专用集成电路)器件,它将在数字逻辑系统中发挥越来越重 查找表(Look-Up-Table)简称为 LUT,LUT 本质上就是一 要的作用。 个 RAM。目前 FPGA 中多使用 4 输入的 LUT,所以每一个 LUT 可以看成一个有 4 位地址线的 16x1 的 RAM。当用户通过原理 图或 H D L 语言描述了一个逻辑电路以后,P L D / F P G A 开发软 通用分频器基本原理 件会自动计算逻辑电路的所有可能的结果,并把结果事先写 整数分频包括偶数分频和奇数分频,对于偶数 N 分频,通 入 R A M , 这样,每输入一个信号进行逻辑运算就等于输入一 常是由模 N/2 计数器实现一个占空比为 1:1 的 N 分频器,分 个地址进行查表,找出地址对应的内容,然后输出即可。由 频输出信号模 N/2 自动取反。对于奇数 N 分频,上述方法就 于 LUT 主要适合 SRAM 工艺生产,所以目前大部分 FPGA 都是 不适用了,而是由模 N 计数器实现非等占空比的奇数 N 分频 2006.5 / 电子与电脑 127
基础设计 K nowledgeBase 图 1 :半整数分频器电路组成 器,分频输出信号取得是模 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 所示: 图 2 :通用分频器电路组成 Verilog语言的实现 本设计采用层次化的设计方法,首先设计通用分频器中 各组成电路元件,然后通过元件例化的方法,调用各元件,实 现通用分频器。 128 CompoTech China / 2006.5 1、选择异或门模块 half_select: module half_select(sel,a,b,c); output c; input sel,a,b; xor u1(w,a,b); assign c= 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 分频。 module counter_n(reset,en,clk_in,clk_out,count); parameter N=7; input reset,en,clk_in; output clk_out; output[7:0] count; reg clk_out; reg[7:0] count; always @(posedge clk_in) begin if (reset) begin count[7:0]=0; end else if (en) begin if (count==(N-1)) count=0; else count=count + 1; end end always begin if (N<=2) clk_out=count[0];
基 础 设 计 KnowledgeBase 图 3 :7 分频仿真结果 图 4:6.5 分频仿真结果 仿真结果及硬件电路测试 当 sel=‘0’,N=7 时,实现奇数 7 分频。如图 3 所示 当 sel=‘1’,N=7 时,实现半整数 6.5 分频。如图 4 所示 由此可见,只要改变异或门选通控制 sel 和 N 的值就可实 现 2 ~2 5 6 之间的任意奇数、偶数、半整数分频。本设计在 Altera 公司的 FLEX 系列 EPF10K10LC84-3 型 FPGA 构成的测试 平台上测试通过,性能良好。 表 1 半整数 6.5 分频器适配分析结果: else if (N<=4) clk_out=count[1]; else if (N<=8) clk_out=count[2]; else if (N<=16) clk_out=count[3]; else if (N<=32) clk_out=count[4]; else if (N<=64) clk_out=count[5]; else if (N<=128) clk_out=count[6]; else if (N<=256) clk_out=count[7]; end endmodule 3、2 分频模块fenpin_2: module fenpin_2(clk_in,clk_out); input clk_in; output clk_out; reg clk_out; always @(posedge clk_in) begin clk_out=~clk_out; end endmodule 4 、最后通过元件例化的方法,调用各元件,实现通 选 用 器 件 I / O 延迟时间 使 用 引 脚 数 工 作 频 率 用分频器最高层设计: module fenpin(reset,en,sel,clk_in,clk_out,count); input reset,en,sel,clk_in; output clk_out; output[3:0] count; EPF10K10LC84-3 15.7ns 9/84 (10.7%)39.52MHz 结 语 half_select u1(sel,clk_in,b,c);(调用half_select,元件例化) 本文旨在介绍一种进行 F P G A 开发时,所需多种分频的 counter_n u2(reset,en,c,clk_out,count);(调用counter_n, 实现方法,如果设计中所需分频形式较多,可以直接利用本 元件例化) 设计,通过对程序的稍微改动以满足自己设计的要求。如果 fenpin_2 u3(clk_out,b);(调用fenpin_2,元件例化) 设计中需要分频形式较少,可以利用本设计部分程序,以节 endmodule 省资源。 2006.5 / 电子与电脑 129
分享到:
收藏