基于复杂可编程逻辑器件的VME总线接口逻辑系统的设计

网友投稿 432 2022-11-10

基于复杂可编程逻辑器件的VME总线接口逻辑系统的设计

VME总线简介

VME数据总线通用访问逻辑设计

在图2中,板内CPU可以根据需要选择,内总线随CPU型号而变化,但必须对底板提供VME总线接口。控制逻辑需要处理的主要信号如表1所示,其中信号方向从VME总线进入本模块为输入,否则为输出。

图2中的I/O模块是作为系统从设备,当主控方选择访问时,控制逻辑首先应该产生系统选择信号,以启动模块内数据通路。可以用以下方法实现:

VA15,VA14,VA13 pin; // VME 总线地址高 3 位

VA3,VA2,VA1 pin; // VME 总线地址低 3 位

VAM5..VAM0 pin; // VME 总线地址修饰码

VAM node;

VDS1,VDS0 pin; // 字节选择。

VAM = VAM5 & !VAM4 & VAM3 & !VAM2 & !VAM1 & VAM0; // = 10.1001: 短管理访问

// 为双口普通读写产生片选信号

// VME 数据总线使能

!VDEN = (!VDS1 # VDS0) & !CS_VME #

// 普通DTB读写时要开门

// 应答中断时也要开门

VDIR = !VRW; // VME 数据方向

菊花链中断优先级逻辑设计

VME优先级中断机制采用菊花链,它用于在板与板之间传送一电平信号。它始于槽而终结于一槽。系统可以提供IRQ1*~IRQ7*共7个中断请求,其中IRQ7*具有优先级。当中断处理器处理中断请求时,中断应答菊花链驱动器启动中断应答菊花链工作,以确保只有一个中断器响应正在进行中的中断应答周期。整个原理示意如图3所示。当应答某个中断时,首先把IACK*信号驱动为低,表示当前周期是中断应答周期,同时将中断识别码通过数据线传输,而中断响应主要由中断响应输入(IACKIN*)和中断响应输出(IACKOUT*)组成应答菊花链。若某一模块发出中断请求,并且响应的中断识别码和自己匹配,同时要接到上传下来的有效的IACKIN*信号。若是自己的中断响应,应该堵塞IACKOUT*信号,使之为高电平,否则应该继续下传IACKOUT*信号。显然,若某一插槽为空或者不具备中断响应能力,应该将IACKIN* 和IACKOUT* 短接,否则菊花链将中断。当中断响应后,要及时撤除中断请求。下边逻辑实现菊花链优先级中断,其中状态机处理包含数据总线访问周期和菊花链中断实现的所有逻辑。

// VME 中断管理逻辑。

VCLK pin; //VME 总线时钟,16MHz

VIACK pin; //VIACK = 0: VME 中断应答周期

= 1: VME 普通总线周期

VIACKIN ,VIACKOUT pin; //中断应答菊花链输出/输出

Qv2,Qv1,Qv0 pin istype ‘REG’; //VME 总线操作控制状态机

VDTACK pin istype ‘REG’; //VME 总线读写完成应答,

//高有效,经OC 门后低有效

VIRQ3 pin istype ‘REG’; //向VME之中断请求

VD3..VD0 pin istype ‘REG’; //要发送的中断应答向量(具 有输出 /OE 之缓冲)

断应答号,本模块使用 IRQ3*

图3 LACKIN*/IACKOUT*菊花链

MyVector = [VMID3..VMID0]; //本模块使用的中断应答向量

IntID = [VA3,VA2,VA1]; //VME 送来的 IRQ 号

IntVec = [VD3..VD0]; //本模块应答时的中断向量

// VME 中断申请 和 清除 状态编码

IntS0 = ^B0;

IntS1 = ^B1;

EQUATIONS

// 以下语句确立VME 总线器控制由系统时钟管理

[Qv2,Qv1,Qv0].clk = VCLK;

VDTACK.clk = VCLK;

IntVec.clk = VCLK;

VIRQ3.clk = VCLK;

IntVec:= !MyVector; // 中断应答向量随时准备放出去

// 放出中断应答向量。

IntVec.OE = !VIACK & !VIACKIN & // 中断应答周期

(IntID = MyIntID); // 而且是我们的

。.

//==========================================

// VME 总线周期控制之状态机 (包括中断应答)

//==========================================

State_Diagram [Qv2,Qv1,Qv0];

State SV0:

VIACKOUT = 1; // 不能乱传中断应答

VDTACK := 0; // 不能随便应答

else if (!CS_VME) then SV1 // VME 普通读写

else if (!VIACK & !VIACKIN) then SV4

else SV0; // 原地待命

State SV1: // 普通读写周期

VIACKOUT = 1; // 不传中断应答

VDTACK := 0;

if (!RST) then SV0

else SV2; // 顺延

State SV2:

VIACKOUT = 1; // 不传中断应答

VDTACK := 0; // 还在干

if (!RST) then SV0;

else if (!BUSYL) then SV2 // 双口正忙

else SV3

with { VDTACK := 1;}

State SV3:

VIACKOUT = 1; // 不传中断应答

VDTACK := 1; // 准备好了

if (!RST) then SV0

else if (!CS_VME) then SV3 // 本周期没完没了

else SV0

with {VDTACK := 0; }

// SV4..SV7 为中断应答周期

State SV4:

VIACKOUT = H; // 情况不明,先别往下传

VDTACK := L;

if (!RST # VIACK # VIACKIN) then SV0

else if (IntID == MyIntID) then SV6 // 应答我们的

with {

VDTACK := H; // 早已准备好

}

else SV5 // 应答别人的

with {VIACKOUT = L; } // 赶快往下传

State SV5:

VIACKOUT = L; // 传。传.传

VDTACK := L;

if (!RST) then SV0

else if (!VIACK & !VIACKIN) then SV5

// 还在中断应答周期

else SV0; // 总算熬到结束了

State SV6:

VIACKOUT = H; //是自己的,不能往下传

VDTACK := H;

if (!RST) then SV0

else if (!VIACK & !VIACKIN) then SV6

// 还在中断应答周期

else SV0;

State SV7:

goto SV0; // 非法状态,赶快转

//=========================================

// 本状态机实现 VME 总线中断请求和清除控制

//=========================================

State_Diagram [VIRQ3]

State IntS0:

//对 011AH 读写,触发对 VME 中断请求

if (!RST) then IntS0

else if (!CS_ALLP & (IOAddr == VMEIRQReg))

then IntS1

else IntS0; // 老实呆着

State IntS1:

// 此状态时,保持中断请求

if (!RST ) then IntS0

else if (!VIACK & !VIACKIN & (IntID == MyIntID))

then IntS0 // 已经应答

else IntS1; // 不应答不走

END

结束语

VME总线的应用愈来愈广泛,各种机载计算机系统总线都在逐渐向它靠拢。按照以上思想设计的机载计算机已经经过了试飞阶段,实践也证明VME总线性能和可靠性优于以前的各种总线。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SHELL脚本之配置PXE批量无人值守装机
下一篇:SHELL脚本之在Centos7上配置NFS远程共享
相关文章

 发表评论

暂时没有评论,来抢沙发吧~