在基于FPGA的SOC设计中,常使用串口作为通信接口,但直接用FPGA进行串口通信数据的处理是比较繁杂的,特别是直接使用FPGA进行串口通信的协议的解释和数据打包等处理,将会消耗大量的FPGA硬件资源。
为简化设计,降低硬件资源开销,可以在FPGA中利用IP核实现的嵌入式微处理器来对串口数据进行处理。
本文中的设计采用了XILINX的FPGA,可选用的嵌入式微处理器IP核种类繁多,但基于对硬件资源开销最少的考虑,最终选用了Picoblaze。
嵌入式微处理器PicoBlaze适用于Spartan-II/E、CoolRunner-II和Virtex系列FPGA,运行速度可达到40MIPS以上,提供49个不同的指令,16个寄存器,256个地址端口,1个可屏蔽的中断。其性能超过了传统的8bit微处理器。嵌入式微处理器Picoblaze的功能、原理见参考文献[1]。
Picoblaze使用灵活,但其缺点是可寻址的存储空间非常有限,因此为满足实际需要本文同时也提出了使用片外SDRAM器件对其存储能力进行扩展的设计方法。
2 串口收发接口设计
2.1串口收发接口硬件设计
嵌入式微处理器PicoBlaze本身并不具备串行接口,因此必须在FPGA中设计串口接收和发送模块并通过总线结构与Picoblaze连接。
串口接收和发送模块的设计可采用成熟的IP核。实际设计中采用了XLINX的串口收发IP核,其特点是串口波特率,符号规则都可以灵活地定制,同时具有16字节的接收FIFO和16字节的发送FIFO。串口收发IP核的功能、原理见参考文献[2]。
使用Picoblaze和串口收发IP核构成的串口收发系统结构见图1。
在设计中,发送模块、接收模块和标志寄存器分别有不同的地址,Picoblaze通过地址端口对串口收发模块进行访问。设计中的标志寄存器,可用于指示发送模块和接收模块中FIFO的状态,Picoblaze通过查询标志寄存器来完成对串口数据的收发控制。
2.2串口收发接口软件设计
串口发送、接收子程序
Picoblaze通过对标志寄存器的查询,根据FIFO的状态进行操作。串口发送和接收子程序流程见图2。
Picoblaze的编程,类似于汇编语言。
串口发送子程序代码如下:
(1)串口接收子程序
receive:
INPUT s0,uartrxflag ;查询接收FIFO是否非空
AND s0,01
AND s0,s0
JUMP Z,receive ;若FIFO为空时继续查询
INPUT rxdata,uartrx ;若FIFO非空时读取数据
RETURN
(2)串口接收子程序
translate:
INPUT s0,uarttxflag ;查询发送FIFO是否为空
AND s0,01
AND s0,s0
JUMP NZ,translate ;若发送FIFO非空时继续查询
OUTPUTtxdata,uarttx ;若发送FIFO为空时写入数据
RETURN
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) | Powered by Discuz! 7.0.0 |