为了使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的中断响应,实现向外部存储器的输出,此过程和数据输入类似。
编程、编译及仿真
用户在C编程时,只需要按照Speed所需的启动方式,先设置控制字、再输入滤波系数、然后启动DMA输入原始数据。值得注意的地方是,为了实现Speed的运算与DMA中原始数据输入同步,需要在C代码的不同指令间插入一定的延迟指令,此延迟间隔可根据软硬件的响应速度来计算。
Gaisler Research公司提供完整的LEON3开发套件,包括C代码编译器sparc-elf-gcc,大大方便了软硬件开发和联合调试。 将LEON3和Speed的SoC硬件HDL描述,及编译后的二进制指令调入Modelsim进行软件仿真,再利用FPGA进行硬件仿真,其结果如图8、9、10所示。
图8 从C语言控制字产生的配置时序
图9 触发中断响应的zero_flag信号
图10 在Altera StratixII 2S180中的仿真结果
结语
本项目利用LEON3的高性能、易编程、开源等优点,开发了AHB总线接口和DMA控制器,实现了Speed专用信号处理器的软件可编程,大大简化了Speed用户的开发过程。有待改进之处是,1)当前Speed可处理40bit数据,而Leon3是32bit,没有最大限度发挥Speed的运算能力;2)如果在LEON3上运行RTEMS (Real Time Executive for Multiprocessor Systems) 操作系统,将进一步方便用户扩展LEON3的利用价值。