基于GAP技术的网络隔离设备的研究与设计
3.2 SCSI协议控制器的设计
在SCSI总线上进行任何处理都需要8个总线阶段:空闲阶段、仲裁阶段、选择阶段、重选阶段、消息输入/输出阶段、数据输入/输出阶段、命令阶段、状态阶段。在任何时候,SCSI总线只能处于一个确定的总线阶段。阶段之闻的前后关联受到严格限制,也就是说并不是每个阶段后面都可以跟着任何阶段。图3示出了SCSI总线阶段状态的转化,如命令和数据阶段只能在消息阶段之后出现,同样,消息阶段的后面必须紧跟这两个阶段,而不是其他阶段。
该协议控制器的设计严格按照SCSI总线阶段转化过程,由以上分析提出SCSI协议控制器的FP-GA实现方案:由于空闲、仲裁这两个总线阶段的机理简单,故将其直接放在SCSI模块中实现,其余每个阶段都有相对应的模块,整个系统软件由1个顶层模块和7个平行的底层模块构成。模块层次如图4所示。
- SCSI模块有1个有限状态机,每个状态对应底层的1个模块,并用寄存器S_MODE的不同取指来表示不同模块,通过这个状态机实现阶段转换、消息处理、命令解释、数据处理和状态处理等功能。
- Sel模块处理选择阶段的时序。启动器将信号BSY、SEL、ATN和启动器的ID号以及目标器的ID号置为有效,启动器随后释放BSY信号,经过200ms之后目标器将BSY信号置为有效,再过2个延迟周期后启动器释放SEL信号并进入消息阶段。
- Resel模块处理重新选阶段的时序。启动器将信号BSY、SEI I/O和启动器的ID号以及目标器的ID号置为有效,启动器随后释放BSY信号。最多200ms之后目标器必须将BSY信号置为有效作为响应。
- Msg_out模块处理消息出阶段的时序。启动器将ATN置为有效,目标器将信号MSG和C/D信号置为有效,I/O信号为无效。这意味着接下来要进入的是消息出相序,启动器将发出16位宽传输消息。发送完信息字节后,启动器将释放ATN信号,根据发出的信息确定下一个阶段。
- Cmd模块处理命令阶段的命令接收时序。目标器在接收到启动器80H的消息后进入命令阶段。目标器需将MSG和I/O置为无效,将C/D置为有效,接收完命令后,将根据命令判断接下来要进入的是数据输入阶段还是数据输出阶段。
- Dat模块处理数据阶段的数据接收和发送时序。数据接收时,在命令READ、TESI UNIT READY、INQUIRY、REQUEST、SENSE、READ CAPACITY后都将进入数据进相序。此时目标器将MSG和C/D信号置为无效,将I/O信号置为有效。目标器将发送相应的数据。在命令为WRITE后将进入数据出阶段,此时目标器将MSG、C/D和I/O都置为O,启动器向目标器发送数据,之后进入消息阶段。
- Status模块处理状态阶段的时序。在命令完成后将进入状态阶段,目标器将MSG信号置为无效,将C/D和I/O信号置为有效,并发送命令执行的情况是GOOD还是CHECK CONDITON。状态阶段结束后将进入消息进阶段,向启动器说明一个COM-MAND COMPLETED。至此一个SCSI访问结束。目标器将进入空闲阶段,启动器将可以通过1个80 H的消息触发另外一个访问。
- Msg_in模块处理消息进阶段的消息发送时序。目标器接收到16位宽传输的消息后将进入消息进时序。目标器将MSG、C/D以及I/O都置为有效,并发送重复的信息。发送完后目标器将释放MSG信号,并根据消息确定下一个阶段。
评论