对于这三种帧,命令帧、数据帧和状态帧可以使用同一个缓存,因为作为存储的从结点不会主动向主结点发送数据,整个工作都是被动接收主结点的命令,等待主结点读取或写入数据,系统只有单一的状态,不会出现冲突。
- 对于Avalon总线中的信号,对应于帧内信号关系如下。
- read/write信号:命令帧内的发送/接收位。
- address信号:命令帧内的子地址以及数据长度位。
- data信号:数据帧内的数据位。
- irq信号:状态帧内的标志位引起。
- irqnumber信号:状态帧内的具体位置。
1553B组件的API函数包括有:
- altera_avalon_1553B_init()
- altera_avalon_1553B_enable()
- altera_avalon_1553B_disable()
- altera_avalon_1553B_getframe()
- altera_avalon_1553B_sendframe()
其余定制组件的步骤不再赘述。将组件通过SoPC定义完成后,命名为1553B,添加至NIOS II内核中。
FPGA内部的工作流程如图3所示。
系统平时处于待机状态,当命令帧到来时会引起中断,中断子程即通过altera_avalon_1553B_getframe()解读命令帧的内容,确定是读取还是写入,读取或写入数据的长度,数据的特征作为下次读取的标志,确实无误后,开始读取或写入。
存储器的管理与其他应用中不同的有两点
:在每次写入后,必须将写入的数据作一个标志,以方便以后读取;另外,还要计算剩余存储的容量,在下一次需要写入数据时判断是否可以容纳下本次存储。1553B的主结点在使用完毕数据后也需要提供信号来清空存储以释放资源。