了解Zynq PS / PL接口之后;到目前为止,我们已经分析了Zynq All Programmable SoC芯片中的PS (处理器系统)与PL(可编程逻辑)之间的接口。我们已经使用Vivado设计套件创建了简单的外设,使用SDK与新外设连接,并且可以在外设上运行自检程序。但我们创建的外设功能不超过四个可读取和写入的寄存器。实际上,我们需要外设执行一些有效的功能。
我们将再次使用Vivado为这个外设添加实际的功能。
首先需要打开Vivado项目和框图,其中包含我们已创建的外设。右键点击“Peripheral”,选择“Edit IP Packager ”选项。随后IP Packager窗口将打开,可编辑和更新外设。
除Package IP 外设窗口外,这个窗口与标准项目流窗口相似。在设计源窗口下方有两个在外设创建过程中创建的文件。
这些文件被命名为:
Adams_Peripheral_V1_0_S00_AXI.vhd - RTL文件,其中包含函数AXI接口,包括初始创建的四个寄存器。
这两个文件中包括用户代码将插入地址的注解:
在这个例子中,我将介绍使用第一个寄存器作为控制寄存器。这个寄存器当中的特定位定义是否将寄存器2和3的目录进行相加、相减或相乘运算。运算结果将存储在第四个寄存器中。我们将设置与微处理器相关的第四个寄存器为只读状态,以确保微处理器不会影响运算结果。此外,如果激活控制寄存器,外围将生成一个中断。
定义中的第一步是声明四个寄存器,第3个寄存器为输出寄存器,最后1个寄存器为输入寄存器。(在这个步骤时我们可实现这一功能,但目前我正在顶层 *** 作演示实现更复杂功能所需要的步骤) 。
同时,我也编辑这个文件为只读文件,以防止处理器写入第四个寄存器。
在顶层文件我在该架构创建一个中断输出并添加简单功能代码以执行我们所要的 *** 作。
在所有必要的用户VHDL语言完成添加后,我处理该项目以确保在Vivado内打包IP并返回至项目前不会出现错误。但在打包器打包IP前,我增加IP版本号以表示代码变更。点击“re-package”将运行打包器,并关闭项目,返回至初始Vivado项目。
返回使用该外设的项目中,可以运行IP状态报告(Tools - >Reports - >Report IP status),显示在设计中所使用的更新版本。
在将项目导出至SDK前,需要重新构建项目。在SDK内,可使用之前使用的同一功能对这个外设进行写入和读取。但测试过程中最后一个寄存器不能写入时,自检程序将失败。
第一个测试是使用寄存器0中的命令1相加寄存器2和3内的目录:
在第二次测试中,我们使用寄存器0中的命令2将寄存器2和3内的目录相乘:
在最后的测试中,我们使用寄存器0中的命令3将寄存器2内的目录减去寄存器3的目录:
所有这些测试都使用轮询的方法。由于这些运算属于简单的加、减、乘函数,可在一个时钟周期内完成。但更复杂的多周期函数运算需要使用中断,我们将在另外的文章中说明。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)