judyzhong 的blog

Xilinx SDK 初学之——PS对PL寄存器的读写控制

对于FPGA编程时的v文件中的寄存器,在SDK编程时需要一些读写操作,以实现PS与PL部分的信息交换。下面用一具体例子记录所需要的步骤 。如若有误请指正。

首先需要将v文件代码封装为带有AXI总线的IP,才能实现PS与PL的通信。步骤如下:
1、vivado中打开工程,Tools->Create and Package IP,下一步;
2、选择封装带有AXI4总线的,如下图:

3、next,填写名称等信息,注意IP保存路径。
4、next,选择总线相关信息,Number of Registers选项为一共需要几个寄存器的信息交换,根据实际情况修改;
5、next,选择Edit IP选项,点击完成,自动打开Package IP界面。
6、此时打开了IP模板,主要有2个v文件,如下图:

Vivado使用技巧(12)——设置DCI与内部参考电压

DCI与内部参考电压
Xilinx FPGA提供了DCI(Digitally Controlled Impedance)技术,包括两个功能:(1).控制驱动器的输出阻抗;(2).为驱动器或发送器添加一个并行端接,在传输线上得到精确的特征阻抗匹配,以提高信号完整性。DCI会主动调整I/O bank内的阻抗,以调整放在VRN和VRP管脚之间的外部精准参考电阻,这样可以补偿由于工艺变化、温度变化和电源电压抖动引起的I/O阻抗变化。每个I/O bank内都有两个复用引脚来控制该bank内所有I/O的阻抗或并行端接值。

带有差分输入缓冲区的单端I/O需要一个参考电压Vref,可以使用专用的Vref管脚为每个I/O bank提供参考电压。另外也可以使用INTERNAL_VREF约束来生成内部参考电压,这样PCB上就不需要为Vref提供电源线,也可以释放Vref管脚作为通用I/O使用。每个bank都可以设置一个可选的内部参考电压。

Ug471和ug571分别介绍了7系列和UltraScale系列中DCI和INTERNAL_VREF的详细信息。本文将介绍在Vivado中设置与之相关的DCI_CASCADE和INTERNAL_VREF属性。

创建DCI_CASCADE约束

Vivado及Zynq使用经验

1.添加debug核的合理方法是在源代码中添加(*mark_debug="true"*),综合后,打开综合结果,set debug内这些标记的信号全部在网标内,不会被优化掉。如果不在代码里加这些标记,直接在综合结果里添加net,很多感兴趣的信号会被优化掉,且残缺不全。

2.若果debug核使用的时钟是zynq ps端输出的时钟,那么烧录完bit文件后,是不会自动弹出debug界面的,需要在软件工程里,debug软件工程,让cpu跑起来,产生时钟信号,再回vivado内refresh device,即可弹出debug界面。

3.自定义IP内代码被改动后,Block Design内会提醒刷新IP路径,然后在窗口下方勾选改动的IP,点击UPDATE IP按钮,即可更新IP核。

4.重新生成bit文件后,建议关闭eclipse软件工程,vivado内file-> export hardware,重新输出.hdf等硬件信息文件,然后重新打开eclipse软件工程,eclipse会自动更新硬件信息,并重新编译整个工程。

Xilinx SDK 初学之——API函数笔记(GPIO函数)

初学Xilinx SDK的开发,下面记录使用到的API函数及自己的理解。若有误,还请指教。

xgpio函数
1、int XGpio_Initialize(XGpio * InstancePtr, u16 DeviceId)

名称 代码 解释
函数名 XGpio_Initialize 初始化GPIO
参数1 XGpio * InstancePtr 指向GPIO实例的指针
参数2

学会System Generator(11)——Black Box调用HDL代码

本文是该系列的第11篇。从前面的设计中可以看出,System Generator最适合的是完成DSP系统的设计,可以大大提高设计效率,而其它设计任务通常仍需要使用HDL模型来设计。

但是System Generator提供了一个特性:可以通过black box这个block将其它HDL文件以黑盒的形式封装到System Generator设计中,在仿真时使用Simulink+Vivado Simulator(或ModelSim)协同仿真的方法,在Simulink环境中完成设计的仿真测试。

在本系列的第2篇中,我们用Digital FIR Filter这个block完成了数字滤波器的设计。本文设计将把其中的滤波模块改为由HDL实现,借此介绍上述功能。

本设计使用到的block
1.Xilinx block:
Black Box(->Basic Elements):调用HDL文件

2.其它block:
Step(Simulink->Sources):生成阶跃信号

这里给出了设计中用到的所有block在库中的路径,后文不再提及(前文用过的block没有给出;同一block会包含在多个库中,为了方便只列出一个路径)。

System Generator设计流程

静态时序分析初步认识

静态时序分析是学习FPGA必须学习的一个知识点,通过一段时间的学习,先将自己所学到的一点静态时序分析的基础稍作总结。

这是一张再熟悉不过的图形,以及两个基础公式
Tperiod>Tcko+Tlogic+Tnet+Tsetup-Tclk_skew (1)
Tcko+Tlogic+Tnet>Thold+Tclk_skew (2)

这里,为了得到更加简单的理解,忽略两项Tnet和Tclk_skew。原因在于Tnet通常太小,而Tclk_skew还牵扯到时钟uncertain,暂时可以不考虑skew的影响。简化后如下:
Tperiod>Tcko+Tlogic+Tsetup (3)
Tcko+Tlogic>Thold (4)

学会System Generator(10)——支持的MATLAB语法

本文是该系列的第10篇,上一篇介绍了在System Generator设计中使用MCode模块调用MATLAB代码来完成逻辑控制。本文将介绍System Generator支持的所有MATLAB语法。

限于篇幅,本文只记录了经常用到或相对重要的内容,更详细的信息可以参考xilinx官方文档ug958->第一章->MCode小节。

MCode block特性
MCode用于在Simulink环境下执行MATLAB函数。MCode的名称与管脚即为函数名称与函数接口。在将System Generator设计导出到FPGA时,软件会将MATLAB代码转换为对应的HDL模型。MCode经常用于实现一些简单的算法功能、有限状态机和控制逻辑。

调用的MATLAB函数必须遵循以下三条基本规则:

  • 所有的输入和输出必须是Xilinx的定点数据类型(xfix);
  • 至少包含一个输出;
  • M文件应在MATLAB的搜索路径下,或与slx模型文件在同一目录。
  • 当初次使用MCode时,会自动调用一个示例文件xlmax.m。博主建议先在slx文件目录下创建好新的m文件,再用Browse定位。

    支持的MATLAB语法
    1.所支持的MATLAB语法结构包括:

    简介
    本篇博客大部分内容前三篇博客都已经包含了,此处重点叙述不同之处,主要对比Tcl命令的不同和解决SDSoc程序找不到基地址的问题。

    使用ZedBoard开发板,SDSoc 2017.4, Win10系统;此处通过AXI_GPIO点亮ZedBoard板子上连接在PL端的8个LED灯。

    Tcl命令
    搭建平台的步骤在 SDSoc学习(二)中进行了较为详细的描述,同时也可以参见官方文档 ug1146 和 ug1236 。

    VIVADO工程如下:

    AXI_GPIO设置如下:

    部分Tcl命令如下:

    学会System Generator(9)——MCode调用MATLAB代码

    本文是该系列的第9篇。FPGA设计中经常用到一些控制逻辑,如有限状态机(FSM),如果用各种block搭建一个FSM比较麻烦。System Generator支持调用MATLAB代码,通常可以编写MATLAB代码来实现FSM等控制逻辑,通过MCode block调用到System Generator设计中。

    本文将使用MATLAB代码设计一个FSM,对“1011”这个序列进行检测。序列检测应该是很多Verilog/VHDL学习者在学习FSM时接触到的一个简单设计。本文将以该设计在System Generator中的实现为主题,介绍MCode的使用。

    本设计使用到的block
    1.Xilinx block:
    MCode(->Index):调用MATLAB函数

    2.其它block:
    Repeating Sequence Stair(Simulink->Sources):生成序列

    这里给出了设计中用到的所有block在库中的路径,后文不再提及(前文用过的block没有给出;同一block会包含在多个库中,为了寻找方便这里只列出一个路径)。

    System Generator设计流程

    SDSoc学习(三):用户自定义开发板搭建平台

    简介
    前段时间买了一块米联客的7010开发板,打算尝试为这块开发板搭建一个简单平台。

    用户自定义开发板与SDSoc直接支持的开发板的区别在于,直接支持的开发板已经根据板子上的硬件完成了一系列重要配置(如时钟、DDR型号),所以在为用户开发板搭建平台时,只需要根据该开发板的硬件实际情况进行相应的配置即可。

    这里先尝试着点亮一个直接连在MIO(MIO7)上的LED。

    第一步:搭建平台

    平台地搭建在SDSoc学习(二)中已经进行了较为详细的描述,且大部分操作的是一样的,所以这里就着重叙述不同之处。

    不同一:在SDSoc学习(二)中使用的是ZedBoard开发板,所以在Default Part界面中选择Boards下的ZedBoard;在这里要选择Parts,然后根据自己板子上的芯片型号进行选择,我板子上的芯片型号是xc7z010clg400-1,然后点击Next直到Finish。

    同步内容