Vivado 提高笔记1—SOC—快速入门(Zynq 7000系列)

Vivado与Modelsim仿真

1.添加modelsim路径:

Tool >options>

2. 安装编译仿真库

 使用modelSIm需要xilinx library被编译。

  运行1:

          report_property [current_project]

  运行2:Tcl Command

compile_simlib -help

compile_simlib -simulator modelsim  或

compile_simlib -simulator modelsim -arch all -language all

 或

  运行3:安装modelsim库到指定目录

      compile_simlib  -directory D:/modeltech64_10.1c/Xilinx_lib  -simulator modelsim

Vivado 提高笔记1—SOC—快速入门(Zynq 7000系列)

 3. Modelsim中添加xilinx安装的modelsim库目录:

在编译完成库后,生成了一个modelsim.ini文件。用记事本打开复制其安装目录信息到modelsim安装目录中modelsim自己的modelsim.ini文件中。(需要去掉modesim.ini的只读特性)重启modelsim,库自动添加到软件中。

 Vivado 提高笔记1—SOC—快速入门(Zynq 7000系列)

  4.测试:modelsim10.1c se

 行为层:通过

综合层:时序仿真,测试通过

功能仿真,测试通过

应用层:时序仿真,测试通过

功能仿真,测试通过

使用vivado 仿真工具更方便快捷

 5. Modelsim工程中添加仿真库的命令

vopt zynq.tb_simulator_all +acc -o zz1 -L simprims_ver -L unisims_ver -L xilinxcorelib_ver glbl

仿真预编译为库名zynq.tb_simulator_all(后缀tb_simulator_all为仿真testbench文件),添加simprims_ver、unisims_ver、xilinxcorelib_ver、glbl库即可。如提示不能编译的IP核,需将IP核生成的仿真文件加入工程。

 

Design Checkpoint

设计检查点(DCP):是指磁盘上保留存储器内设计准确表示的文件,可在每个步骤后(综合后、优化后、布局后)存储。可将检查点读回到Vivado工具中,用以恢复设计状态。

文件格式:.dcp

文件的产生:

.dcp: 工程synthesis后自动产生,在.runs\synth_1目录。

opt.dcp ,placed.dcp, routed.dcp :在工程implementation后自动产生,在.runs\impl_1目录。

作用:用于存储网表或布线。

如文件,

z_system_wrapper.dcp

z_system_wrapper_opt.dcp,

z_system_wrapper_placed.dcp,

z_system_wrapper_routed.dcp

 

文件的利用:

1. 减少综合、布线时间:每个模块在synthesis后,可以直接添加.dcp文件到工程中,第二次综合时将直接使用该综合后的文件,减少综合时间。  布线dcp也一样。

2. 直接替换对应的源程序,如此可防止源程序被泄露,同时该文件以黑箱形式出现,不能查看源程序。

文件的打开:File > Open Checkpoint, 以网表的形式打开。

 

 AXI总线

SpeedWay/zynqHW_2013_3_lab_5_v3.pdf

Pg059-axi-interconnect.pdf

使用AXI总线:AXI interconnect逻辑核

注意AXI总线分类:

  1. 普通AXI总线:GP AXI,仅支持32bits长度, 低速,单向(有主从之分)
  2. 高速AXI总线:HP AXI,32bits、64bits,高速,双向(没有主从之分)

 

AXI interconnect包含了多个LogiCORE IP。

  • 协议兼容性,可以被配置为支持AXI3,AXI4,AXI4-Lite
  • 接口数据宽度:AXI4和AXI3宽度:32,64,128,256,512,1024bits
  • AXI4-Lite宽度:32 or 64 bits
  • 接口地址宽度:可达到64bits
  • 支持只读、只写,以减少资源的使用。

功能:

     1. AXI Crossbar(交叉开关矩阵或纵横式交换矩阵)

每一个AXI Crossbar实例都包含了一个AXI Crossbar结构,但Crossbar不能直接被例化到没有AXI Interconnect的设计当中。

      2. Width Conversion

每一个在AXI Interconnect核的SI和MI都可以被单独配置为一个数据宽度32,64,128,256,512,1024bits。当接口的数据宽度与交换开关矩阵的数据不同时,这个Width Conversion模块会自动地根据路径实例化通路。

当设置不同宽度时,AXI Interconnect核可以通过多个SI时隙路径同时兼容收发数据包。

      3. 时钟转换

当使用同步转换机制时,必须使用同样的时钟源,在时钟转换核当中,所有的时钟域都会被同步化。

当使用异步模式时,所有的时钟域交叉会被运行在FIFO核当中。这样读写时钟域可以异步。

     4. Protocol Conversion

每一个SI和MI在AXI Interconnect当中的都可以被独立配置为AXI4,AXI3或AXI4-Lite协议,当协议接口被配置时,AXI Protocol Converter核自动在路径上实现。

      5.AXI Register Slices

可以选择插入AXI寄存器。可以打破关键的时间路径获得更高的时钟频率。对于每一个Register Slice,你可以选择性地在任意AXI 通道中使能流水线。

将会引入一个时钟周期的延时。

两种模式使用AXI Register Slices

FULLY_REFISTERED: 使用了2级深度的FIFO buffer来实现。

LIGHT_WEIGHT: 简单使用一级流水线寄存器来实现。

    6. AXI Data FIFO

可选择插入AXI Data FIFO核心来提供数据buffer以获得更高的数据传输率。对于每一个FIFO实例,你可以选择使能写通道或读通道或两者都使用buffer。

AXI Data FIFO不支持缓存AXI4-Lite协议。

对于缓存,在AXI4-Lite下不支持FIFO,支持Register Slices

 

 PL:配置AXI interconnect

  1. 32b GP AXI Master Ports,选择M AXI GP0 Interface
  2. 选择Clock Configuration,使能FCLK_CLK0,设置为50MHz
  3. 选择PS-PL Configuration,在General的时钟复位中使能FCLK_RESET0_N
  4. 添加IP核,axi_interconnect,并连接

(注意M00_AXI端口,需要打开进行协议设置和位宽、时钟设置)

Vivado 提高笔记1—SOC—快速入门(Zynq 7000系列)

 

Vivado 提高笔记1—SOC—快速入门(Zynq 7000系列)

    5. 配置AXI地址,Address Editer—>Auto Assign Address

Vivado 提高笔记1—SOC—快速入门(Zynq 7000系列)

 

    6.  使用axi4lite2abus_v1_0_AXI.v

     最多只使用了2级触发器,接口转换。

 将AXI总线简化为仅有数据、地址和使能信号,axi-4lite协议。

 处理器作为Master对总线进行读与写。此时PL完全被动。如需通知处理器读取数据,需要PL部分加入中断。

Vivado 提高笔记1—SOC—快速入门(Zynq 7000系列)

 

PS:访问AXI interconnect

PS部分查找AXI接口:

1. AXI访问地址确认

访问地址查看PL对AXI的配置( 3.2.5 )

AXI1接口地址:p_send_1=(long *)0x43c10000;

AXIO接口地址:p_send_0=(long *)0x43c00000;

2. ​​​​​​​SDK下访问:

(1) 声明地址:

static long *p_send0=(long *)0x43c00000;

static long *p_send1=(long *)0x43c00004;

注意地址必须是4的倍数,是否默认值为8位需要留出4个8bits作32bits。

p_send0+1时,按32位地址进行计算,因地址已经占用4byts,所以加1的结果为地址0x43c00004

即:p_send0+1=43c10004 != 43c10001。

即:32bit的子帧加1值为4,32bits的常数加1值为1

(2) 写AXI,直接向地址进行赋值:

*p_send0=0xAAAAAAAA;

*p_send1=0x55555555;

(3)  读AXI,直接从对应地址读出数据

     地址必须为4的倍数,

 

(4)  读写参考axi_bram_ctrl_0的例程文件

从bsp库中调用库函数:#include "xil_io.h"

读AXI总线:

u32 Xil_In32(u32 Addr)

{

return *(volatile u32 *) Addr;

   }

AXI总线:

void Xil_Out32(u32 OutAddress, u32 Value)

{

*(volatile u32 *) OutAddress = Value;

}​​​​​​​

问题:

1.处理器读AXI死机,是在等候PL响应。时序问题。

Bd文件中,M00_AXI端口设置需要配置为AXI4lite协议

2.处理器只能读得1bit?

to AXI_bus:  3

from AXI_bus:   reg43C00008= 1

to AXI_bus:  4

from AXI_bus:   reg43C0000C= 0

to AXI_bus:  5

from AXI_bus:   reg43C00010= 1

to AXI_bus:  6

from AXI_bus:   reg43C00014= 0

 未知原因?建议使用例程。在例程中重新建立ARM_system, 和AXI总线,同样的程序,能够正常运行。

测试工程: Note/zynq_test/AXI_BUS_TEST.rar