Zynq中包含了一个FPGA内核和两个Cortex-A9内核,尽管功能十分的强大,又非常的时髦,但是本质上讲和之前Xilinx的FPGA 硬核PowerPC没什么区别,无非是PowerPC换成了更加有前景的ARM,因此我很自然的想法是以前在ARM上、在FPGA上做过的东西那个再Zynq上必然也是可以上实现的。
因为之前一直在跟图像处理算法有关的学习,从Matlab到OpenCV、Directshow,从PC到STMF407再到ARM9(Linux),一直都是做跟图像处理有关的,直到开始接触FPGA,才解决了最困扰我的问题--运算速度问题。图像处理需要的高速的运算和大量的资源,刚好FPGA以其并行性以及流水线的思想很适合进行图像处理算法的高速实现,于是我毅然改变方向了选择了FPGA作为新的平台。
进行图像处理个人以为算法始终是核心,平台其次。很喜欢System Generator 的Model Based Design的思想,将人从重复劳动中解救出来,专心于算法,毕竟工具是服务于人的。因此我非常喜欢用System Generator,从接触FPGA开始,大部分的时间都花在了SysGen上。
之前一直是在ML605开发板上进行算法的测试,SysGen构建模型-->Hardware Co-Simulatuon,模型构建完成之后直接在板子上进行硬件协仿真,这样做一是仿真的速度大大的提高,在板子上free running的速度大概是在PC跑的10倍,二是算法完全是在FPGA上跑的,跑完对算法那叫一个放心。
拿到ZedBoar之后我自然也希望在这个板子上也这么做,但是我错了,经过多少次的尝试之后发现"xc7z020-1clg484" is not supported for JTAG co-simulation.”,我在14.1下失败之后换到14.2和14.3下都进行了测试,发现它确实不是因为板子导致工具不支持,因为14.3中对更新的芯片都支持比如ZC702,ZC705等,那么我分析是因为PL PS的架构下由于JTAG要做的事变多了,因此就失去了Hardware Co-Simulatuon这项功能。
虽然SysGen在ZedBoard上不支持Hardware Co-Simulatuon,但是我还是希望能够利用SysGen,起码我使用SysGen构建的模型转化为ISE工程后我希望它是可以使用的。因此就做了一个简单的测试。
大致思路是在SysGen下构建一个最简单的模型,生成HDL Netlist,在ISE下打开工程,添加UCF代码,编译生成Bitstream,iMPACT下载。
1、构建模型LEDSysGen
没 有输入,只有一个输出,是一个常数25
常数配置为UFIX_8_0
2、生成HDL Netlist
打开System Generator模块,简单配置一下
时钟按照ZedBoard的时钟10ns,Clock Pin 是Y9,Generate
2、ISE中编译
这是在netlist文件夹下多出一个ISE 的工程,ISE打开,修改ledsysgen_cw.ucf文件。
NET "clk" LOC = Y9 | IOSTANDARD=LVCMOS33; # "GCLK"
NET "ce" LOC = P16 | IOSTANDARD=LVCMOS18; # "BTNC"
NET "gateway_out1[0]" LOC = T22 | IOSTANDARD=LVCMOS33; # "LD0"
NET "gateway_out1[1]" LOC = T21 | IOSTANDARD=LVCMOS33; # "LD1"
NET "gateway_out1[2]" LOC = U22 | IOSTANDARD=LVCMOS33; # "LD2"
NET "gateway_out1[3]" LOC = U21 | IOSTANDARD=LVCMOS33; # "LD3"
NET "gateway_out1[4]" LOC = V22 | IOSTANDARD=LVCMOS33; # "LD4"
NET "gateway_out1[5]" LOC = W22 | IOSTANDARD=LVCMOS33; # "LD5"
NET "gateway_out1[6]" LOC = U19 | IOSTANDARD=LVCMOS33; # "LD6"
NET "gateway_out1[7]" LOC = U14 | IOSTANDARD=LVCMOS33; # "LD7"