松耦合式可编程复杂SoC的设计实现
AMBA总线是一种应用广泛的层次化总线结构,有高速的AHB和低速APB之分,其中AHB是一种流水式高速总线结构,地址和数据总线相互独立,可挂载16个Master和Slaver设备,常用来组织和连接高性能模块,如处理器、DMA控制器、协处理器等[5~7]。AHB总线的核心是AHB控制器,主要包括仲裁器,译码器和多路复用器,其中仲裁器选择AHB Master,而译码器选择AHB Slave,实现写数据WDATA和读数据RDATA分开,如图3所示。

DMA控制器
DMA是指设备直接对计算机存储器进行读写操作的方式。这种方式下数据的读写无需CPU执行指令,也不经过CPU内部寄存器,而是利用系统的数据总线直接在源地址和目的地址之间传送数据,达到极高的传输速率。DMA控制器一方面可以接管总线,即可以像CPU一样视为总线的主设备,这是DMA与其它外设最根本的区别;另一方面,作为一个I/O器件,其DMA控制功能正式通过初始化编程来设置。当CPU对其写入或读出时,它又和其它的外设一样成为总线的从属设备。本文中为了实现DMA和AHB密切配合,即启动DMA后大量原始数据通过AHB总线从数据存储器进入Speed模块,需要DMA控制器内部包含AHB Master模块,如图4所示。另外需要说明的是,LEON3为了实现AHB上设备的plugplay需要在0xFFFFF000-0xFFFFF800地址空间添加设备信息[8~9],所以DMA 控制器和Speed协处理器亦要如此,以便LEON3的软硬件协调一致。在C语言实现DMA时,向DMA的控制寄存器写入相应的信息,即可启动DMA传输,如图5所示。

图4 DMA与AHB Master的关系

图5 启动DMA的C代码示意
Speed的AHB接口
为了使Speed可以顺利接收LEON3传送过来的控制字或DMA传送过来的原始数据,需要在原有的Speed core模块顶层添加AHB Slaver协议来接收AHB上传送的数据,以及产生相应波形的HDL代码来将C程序的信息生成Speed所能识别的信号波形进入Speed模块内部,即从图6中的控制字,转化成图7中的时序。

图6 C语言描述的Speed控制字

图7 Speed core所需的配置时序
同理于控制字,滤波系数和原始数据的输入亦需要一定的HDL代码来实现指令或数据向时序图的转化,其本质相当于译码,实现起来难度不大,此处就不再累述。Speed处理后数据通过状态信号(zero_flag)下降沿触发LEON3的中断响应,实现向外部存储器的输出,此过程和数据输入类似。
评论