该文章主要描述对FPGA的理解及其在嵌入式开发中FPGA的配合问题。
1、FPGA的设计流程
FPGA(Field Programmable Gate Array)是一种可编程的逻辑电路,可以通过硬件描述语言Verilog或者VHDL实现逻辑电路的设计。其设计流程如下:
系统设计->Verilog/VHDL实现->功能仿真->逻辑综合->布局布线->后仿真->在线系统测试。
其中,功能仿真又可以称为前仿真,主要验证所创建的逻辑功能是否正确。
后仿真为布局布线后的仿真,对应于门电路级别的仿真,与前仿真不同,这里可以看到具体电路的布局布线对时序上的影响。
参考:《FPGADesign Flow》Altera.com
2、FPGA与嵌入式开发
之前在实习时是用CPU控制FPGA内部逻辑,达到对接口时序进行控制,对应的原理框图如下:
上图中,CPU与FLASH,DDR及CPLD采用localbus总线方式进行连接。
在这里,CPLD在业务上除了对MCU与FPGA之间的数据进行透传之外,还起到PS加载的作用。很多人可能认为这样的设计可能会比较多余,因为CPU可以直接对FPGA进行PS加载,只要模拟加载的接口时序即可,同时,这样也可以达到对FPGA的直接操作。但是,这样的设计是为了能够提高PS加载的速度。
对于CPU来说,接口时序的模拟有一定的瓶颈,速度要具体参考对应GPIO的转换速度,一般不是专门设计用来加载的GPIO口,其高低电平转换速度有限,通常为kHz,这就导致了FPGA的加载速度取决于GPIO口的速度。但对于CPLD加载FPGA这样的方式来说,CPU只需要将数据通过localbus发送给CPLD,然后加载的过程由CPLD进行,对于localbus这样的总线,参考时钟通常在66MHz左右,所以CPU发送速度有所保障,大大提升PS加载的速度。更多的PS加载流程,可参考Aletra的手册。
此外,在业务中,CPU与FPGA的控制主要通过CPU->CPLD->FPGA进行,CPLD将数据从CPU端透传至FPGA端,从而CPU能够直接操作FPGA内部定义好的寄存器,实现对应操作。
参考:《Using CPLD Improve FPGA Loading Speed》李春雨,张丽霞