软件环境:vivado 2017.4 硬件平台:XC7Z020
这个月的标题为啥要这样子起呢,是因为公司新入职了个同事,交流了以后才发现,卧槽!!!跟人家结构化的工程比起来,人家那模块搭的才叫真正的block_design啊,我自己工程之前一向都是牵扯到zynq核的,建一个block_design,zynq核之外的逻辑部分,都还是用.v写,然后写top组合到一起,所以今天就把这种结构化思想写一写,抛砖引玉,送给跟我之前编程习惯一样的朋友。
说明工程的思路是,从DDS产生正余弦数据,过DMA送给ZYNQ_PS端,PS端做回环,传出收到的DDS数据,而后再将SIN和COS数据在外部分离开,由于DDS与AXIS_FIFO接口不同,以及分离SIN和COS数据,所以需要自写两个.v模块分别实现对应功能。
这是还没开始模块化操作的原始工程,之前的习惯是牵扯ZYNQ的,用block design搭建好,而后其余的部分在逻辑实现,是要接口跟block design的对上就行了,或者用tools---create and package new ip封个新的IP,但是有更简单好用的方法。
首先将两个.v的模块写好, 而后右键,选择add module to block design,将两个模块加到block design中去。
这里需要注意,如果包含ila等IP,导入block design时候会报错,这里最简单的做法是,点击ila,然后把下面红框处generate_synth_checkpoint取消掉就行了,导入完毕后,模块如图右边所示,axis接口可以被直接识别出来。
接下来就可以重新修改block design,根据新添加的模块,更新链接关系及输入输出接口。这是修改过以后的block design,输入输出接口及连接关系比之前看起来好多了,也不用考虑外部的.v模块了。
然后根据系统结构,再做多一层包装,按住alt选取要包装到一起的模块,右键,选择create hierarchy。
然后起一个响亮的名字!
其他模块也完成与此类似的操作。全部完成以后,就可以看到如下终极简化模式。怎么样,是不是结构清晰的一批!
如果你的自定义模块需要查看代码或者需要更新,此时只需要对着你自定义模块右键,选择go to source,就能直接打开.v了。
最终,经过整理以后的工程,是不是宇宙超级无敌清创的一批。
都编好以后,SDK中基于之前写DMA的例子,稍微改一改,DDS源看起来没问题。
回环以后发出来的嘛,多少有点问题,但也无所谓啦,毕竟不是这篇重点,只是随便做的一个例子程序。