使用MAX II的内部晶振
简要:
MAX II器件的用户闪存空间(UFM)中含有一个内部晶振。这个内部的晶振能在许多场合代替需要外部时钟实现的时钟电路。下面这个例子就是针对内部晶振的应用。
内部晶振:
大多数设计都需要一个时钟来进行正常控制,而拥有内部晶振的MAX II器件不需要外部再提供时钟电路。例如:这个内部晶振能被用做LCD控制器的时钟,SMBUS控制器,或者其他的接口协议,或者产生一个PWM波形。这样可以减少元件数量,电路板面积,降低系统成本。
内部晶振拥有下面特点:
■ 未分频的内部时钟工作在13.33MHz—22.22MHz范围。晶振的输出端OSC,是经过4分频后的,即时钟在3.3MHz—5.5MHz范围。
■ 在不使用UFM的情况下,内部晶振能通过Quartus软件的megafunction模块使用
下图1显示了UFM中的内部晶振:
图1 UFM及其内部晶振
注:内部晶振属于编程擦除控制块中的一部分,该控制块主要功能是控制编程和擦除UFM。数据寄存器将数据发给UFM或从FUM内读出数据。地址寄存器则配合数据寄存器控制相应的地址!
下表1描述了使用megafunction功能生成的MAX II内部时钟的信号:
使用MAX II CPLD中的内部时钟:
内部时钟有一个输入信号OSC_ENA,和一个输出信号OSC。输入信号OSC_ENA用来使能内部时钟是否输出。当为高(逻辑1)时,OSC输出3.3MHz—5.5MHz的时钟,当为低(逻辑0)时,则OSC输出常低。
我们可以通过Quartus软件的megafunction使用MAX II内部时钟,具体步骤如下:
1. 新建一个工程,器件选用MAX II EPM570T144C5,并新建一个原理图文件,用于放置将要生成的内部时钟模块。
2. 在TOOL目录下,选择MegaWizard Plug-in Manager。
3. 在MegaWizard Plug-in Manager的第一页选择Create a new custom megafunction variation,见下图2:
图2
4. Next!在which device family will you want to be using?后面选择MAX II系列。在which type of output file do you want for the output file?下面选择:verilog HDL语言。在what name do you want for the output file?下面写上输出文件的名字,这里是:internal_osc_demo。在左边功能块栏中选择I/O块下的:MAX II oscillator模块。详细见下图3:
图3
5. Next!在确认Currently selected device family:后面是MAX II。这里可以选择时钟,有两和时钟可以选择:3.33MHz和5.56MHz。我们这里选择5.56MHz。详细见下图4:
图4
6. Next!这个页面是该模块仿真用的库文件,所以必须看到里面有一个”MAX II atom simulation library”文件,否则重新进行上面的操作,直到看到这个文件为止。(一般都会包含该文件),这里不需要做任何设置。详细见下图5:
图5
7. Next!这是最后一步,显示的是将要生成的文件类型,注意哪个红色的勾,要选中!最后检查无误后,Finish!详细见下图6:
图6
按照上面的步骤就生成了一个内部的使用时钟。下面是生成后的模块图7:
图7
在这里为了检测,内部时钟是否输出,我有做了个LED_BLINK模块。该模块的输入时钟由OSC提供。这里的OSCENA端我并没有接到I/O口上进行外部的控制,而是在内部直接接到VCC,所以整个工程就只用了一个I/O既就是LED的输出口。LED模块就比较简单了,这里不在罗嗦!更详细的请见工程文件“MAX II”!
补充说明:
这个例子的软件用的Quartus II 7.1;硬件用的是我自己做的一个MAX II EPM570T144C5的最小系统板。大家可以根据自己手头上有的资源进行稍稍的修改即可。
作者:Fpang
2008-1-15