基于CPLD的PC104总线的实现

2012-11-26 09:01王新华郭淑琴
关键词:低电平电平中断

章 超,王新华,郭淑琴

(1.浙江工业大学信息学院,浙江杭州310023;2.浙江科技学院信息学院,浙江 杭州310023)

0 引言

随着EDA技术的发展,很多器件的功能都可以通过CPLD/FPGA实现。通过使用VHDL/Verilog-HDL语言,可以实现所要求的功能。PC104总线是国际上最早的嵌入式计算机总线标准,是一种专门为嵌入式控制而定义的工业控制总线。在使用中,PC104总线具有良好的抗振性能。在嵌入式系统中,PC104总现在很多领域都得到很广泛的应用。复杂可编程逻辑单元几乎适用于所有的阵列和各种规模的书记集成电路,它以其编程方便、集成化高、速度快、价格低等优点越来越受设计者的喜爱[1]。在本文设计中,PC104总线主要实现ARM9芯片与外部设备之间的联系,使ARM9芯片实现对外部设备之间的操作。

1 硬件部分

PC104是一种8/16位总线系统,总线时钟为6~8MHz,周期的占空比为50% ±5%,4个或5个时钟脉冲即可完成一次完整的总线访问[2]。

系统通过CPLD芯片来实现PC104总线。由于有些外部设备的电平与CPLD的电平不同,所以这里需要电平转换芯片74ALVC164245来实现电平之间的转换。所以硬件部分主要由CPLD部分和3块74ALVC164245芯片构成。CPLD部分如图1所示。CPLD里面的程序主要由VHDL编写而成。VHDL属于硬件描述语言,用于完成专用集成电路的设计和实现;主要用于描述数字系统结构、行为,功能和接口;是目前在数字设计领域广为接受的硬件描述性语言之一[3]。ARM9芯片的ADDR[23..0]和DATA[15..0]与3块电平转换芯片74ALVC164245直接相连。

CPLD芯片主要实现I/O口读写、MEMORY读写以及外部中断响应。如图1所示中从ARM9芯片接过来的主要控制信号有:nRESET、ADDR20、ADDR21、ADDR22、nOE、nWE、nGCS2、nGCS5、nGCS7、CIRQ9、CIRQ10、CIRQ11等。而CPLD的时钟为PC104_CLK,为50MHz。nRESET为复位信号,低电平有效;nGCS2、nGCS5和nGCS7为3个片选信号,低电平有效;nOE和nWE分别为读和写控制信号,分别控制I/O口和MEMORY的读和写;CIRQ9~CIRQ12分别为4个中断;ADDR20、ADDR21和ADDR22用来判断一些事件发生时的一些状态,如ADDR22的高低电平用来判断是对I/O操作还是对MEMORY进行操作,CIRQ9~CIRQ12为外部中断信号,ADDR20和ADDR21的高低用于判断中断的类型和输出。而IOCHRDY信号则对PC104总线地址锁存信号C_BALE进行控制以及影响nWAIT信号的输出。ARM9芯片的ADDR[23..0]和DATA[15..0]与电平转换芯片直接相连。通过 CPLD的信号输入来PC104_CS、DATA_DIR来控制电平转换芯片74ALVC164245的方向,以此来确定是进行读操作还是写操作。从图1中可以看出本设计使用的CPLD芯片型号是EPM3032ATI44-10。此型号芯片内有32个宏单元、32个寄存器。而在此设计中,宏单元使用了32个,寄存器使用了28个。

图1 CPLD电路

2 软件部分

2.1 主要程序分析

PC104总线功能主要由CPLD实现,通过VHDL语言,可以很好地实现此设计所要求的时序。在PC104总线的设计中,设计的重点是总线控制器的实现,能否完成PC104总线驱动,关键在于控制器能否正常运行。PC104总线控制器的工作流程:控制器等待选通信号有效,如果nGCS有效则锁存地址并保持ARM总线状态,然后进行读写操作判断,最后把数据和相应得控制信号加在PC104总线上,完成操作后释放ARM总线。

CPLD主程序主要有5个进程组成。进程1主要由一个状态机组成,状态机主要完成ARM9对I/O口及MEMORY之间的读写操作。这是最主要的部分。进程2主要是对IDE口进行操作,主要确定IDE口的片选信号。进程3主要根据两根数据总线的电平判断所要输出的外部中断信号。进程4主要根据计数器1来对CPLD芯片的频率进行4分频和8分频。进程5则是定义一个计数器,确定进程1中IOCHRDY的时长。

流程图如图2所示,在初始化状态里,主要对CPLD输出信号进行初始化赋值,使ARM9芯片保持对外写操作状态,以免发生冲突。然后进行锁存所存,通过ADDR22的电平高低判断是I/O口操作还是MEMERY操作;然后通过nOE和nWE判断读写操作。在片选操作完成后,再对输出信号赋值,初始化信号,等待下一次片选信号来临。

图2主要介绍了进程1的实现过程。实际中,此程序定义了7个状态。

TYPE state_type IS(0,1,2,3,4,5,6)。

状态0主要进行CPLD选通,以及对I/O还是MEMORY操作进行判断。

状态1通过对nOE和nWE信号进行判断以确定读写操作。

状态2、3、4主要通过IOCHRDY信号确定nWAIT信号。

图2 程序流程图

状态5是对I/O和MEMORY的CPLD读写输出信号的初始化。

状态6是对PC104选通信号、I/O口选通信号、MEMORY选通信号和数据选通信号(CPLD输出信号,连接于电平转换芯片上)的初始化。

进程2,主要是通过nGCS2和IDECS0确定IDECS信号。

进程3,主要是通过两根数据线的电平确定4个外部中断信号。

进程4,主要是通过计数器1来进行PC104OSC和C_BCLK。

通过对计数器1,对CPLD主频进行4分频和8分频。其均为PC104总线接口提供时钟信号。其中,8分频信号为系统总线提供时钟信号,4分频信号为振荡器信号线提供时钟信号。

进程5,主要是通过C_BCLK信号来确定IOCHRDY为低电平的时间。其确定时间主要应用进程1的状态3中。

通过调用库可以使nWAIT信号要求在高电平时是高阻态,即“Z”。

LIBRARY altera;

USE altera.altera_primitives_components.all;

2.2 时序图

MEMORY进行写操作的仿真图如图3所示,I/O读写与此图相类似,可以看出仿真结果很符合PC104总线时序要求。

图3 仿真时序图

3 结束语

ARM系统成本较低、功耗更小、启动速度快、指令效率高的特点,通过PC104总线,硬件方面具有很大的优势。通过CPLD芯片,可以很好地实现PC104总线的功能。

[1] 周兴华.CPLD入门与实践[M].北京:电力出版社,2011:2-8.

[2] 王庭尧.以太技术与应用[M].北京:邮电出版社,2005:151-159.

[3] 孟庆海,张洲.VHDL基础及经典实例开发[M].西安:西安交通大学出版社,2008:3-12.

[4] 姚亮,王宏志.基于CPLD的PC/104总线接口实现[J].长春工业大学学报(自然科学版),2008,29(4):384-390.

[5] 占红武,胥芳,史伟明.基于ARM体系的PC/104总线设计[J].机电工程,2008,25(1):11-13.

猜你喜欢
低电平电平中断
铁道车辆高/低电平信号智能发生器设计
2017款凯迪拉克2.8L/3.0L/3.2L/3.6L车型低电平参考电压总线电路图
跟踪导练(二)(5)
千里移防,卫勤保障不中断
15-MeV电子直线加速器的低电平系统
NPC五电平Z源逆变器的设计研究
基于三电平光伏并网逆变器控制系统的研究与实践
基于NPC三电平变换器的STATCOM研究
一种多电平逆变器及其并网策略
AT89C51与中断有关的寄存器功能表解