EDK之路(7)——创建用户IP的补充说明及chipscope的添加
0赞写在前面——在写前面的博客时,对EDK还有很多认识不清的地方,现在随着工程经验的增多,对EDK也有了更深的认识,本来想在之前的《EDK之路》系列中修改认识有误的地方,但是修改了一点后发现这样容易引起文章的混乱。所以还是另起一篇补充说明,并增加edk下chipscope的添加说明。
补充说明:FPGA部分,或者说硬件部分其实就像搭建一个单片机,而在SDK中写的C程序就像给单片机写程序一样。
工程目的
本次所挂载的IP是TS流解码器(这个是什么东西不是重点,是个IP就行)。目的是为了让大家了解寄存器配置,以及chipscope添加。
IP说明
其中,需要注意的是rec_mode和div_num端口,这2个端口都将在SDK中由寄存器配置,从而控制IP的接收模式以及同步时钟。另外,rst复位端口也不仅可以硬件复位,还可以通过寄存器软件复位,这样的好处在于:1,有些板子没有复位按钮,这样我们可以通过软件来复位;2,这样每次跑软件时,硬件也同时复位,避免因为上次操作时的数据残留导致错误。
IP创建补充说明
关于用户IP的创建流程,已经在之前的博客中有了详细的说明,这里只补充说明一下一些不同的步骤。
首先,由于我们需要用寄存器来配置一些端口。因此在下面的界面我们需要选择User logic software register. 而其他2个不用选,对于Software reset, 选择后硬件上好像没什么区别,只是软件上多了一个复位函数。但这里我们还是通过User logic software register连接到硬件复位端口来执行复位操作。
在下面的界面中填写需要的寄存器数量,本IP只需要2个寄存器,但是为了以后方便IP的修改,建议多创建几个寄存器,比如我这里填写的是8,多余的作为保留寄存器。甚至对于纯硬件IP,也还是设置几个寄存器,以便日后的修改。
接着有所区别的就是user_logic.v的修改。主要在于IP的实例化与寄存器的连接。
可以看到,rst连接到slv_reg[0], 则当在slv_reg[0]中写入1时,将会执行IP复位操作。
rec_mode->slv_reg1[0], div_num->slv_reg1[2:1], 则可以通过向slv_reg1中写入不同值来控制IP的接收模式以及同步时钟频率。
chipscope添加
要添加chipscope, 需要添加2个IP,一个是icon, 一个是ila, 如下:
其中,icon的control0与ila的CHIPSCOPE_ILA_CONTROL相连接。
接着就是所需观测信号的连接,有多种方法:
1,在mhs文件中按照图上格式编写相关信号的连接
2,在PORT界面进行信号连接(不推荐)
3,选择Debug->Debug Configuration
左侧选择chipscope_ila_0, 右侧可以选择IP,然后把信号添加到不同的触发端口。
SDK中的操作以及chipscope的使用将在下一篇文章中介绍