主要用到 vivado 2103.4,vivado sdk 开发。
Vivado 2103.4 建立硬件工程描述。为vhdl工程。
Vivado sdk 包括下面三个包:
硬件开发包-为vivado 2013.4 建立工程导出的bitstream 。包括ps 配置,pl逻辑,以及互连。
板级支持包-建立是需要添加PL逻辑driver ,之后可以方便调用其提供的功能。
开发包-包含测试文件和common.h头文件。
一。 硬件工程描述
开始建立xilinx microzed 工程。可用sourceps.Tcl直接建立,也可以按照图形界面一步步建立。主要分为PS和PL部分。
Ps 为zynq 7000 ip核,可直接添加;
然后添加 ps msater接口。方便后面的连线。其中ps不需要过多的设置,保持系统默认即可。
PL为自建立的AXI14 lite 逻辑外设;
为外设添加vhdl语言描述,建立逻辑。
分别编辑了两个文件来描述PL的逻辑功能。
Fileone MYIP_v1_0.vhd
FileTwo MYIPv1_0_S00_AXI.vhd
其中主要实现了
四个寄存器:
为寄存器实现运算其部分代码描述:
即是 cx2+bx+a
其中A,B,C 为
CONSTANT c : signed(16 DOWNTO 0) :=to_signed(-577,17);
CONSTANT b : signed(16 DOWNTO 0) :=to_signed(57910,17);
CONSTANT a : signed(16 DOWNTO 0) :=to_signed(33610,17);
规格化格式方式如下:
测试开始的时候可以写入寄存器一个值,即是上式中的X值。然后可以对比输出的计算结果和希望结果,如果出错则输出。
然后验证设计正确性。依次进行仿真,执行设计,产生bitstream,用于以后的工作。
二。 具体实现
1.Ps测试
l Cpu测试,大量操作寄存器(数据访问的时候不需要访问内存),以汇编代码实现。
然后比较输入结果和希望得到的结果,如果不一样,则说明在操作寄存器的过程中出现错误或寄存器出现问题。
l Memory测试,
分两部分DDR和RAM。
测试DDR从0x00100000测试采用方式测试,
同理测试RAM从0xFFFF0000。
注入一些数值。
如出错则输出错误结果。
l Cache 测试
系统函数中加入如果出错,则显示出错数据。然后调用自写函数,覆盖系统函数。
主要思想是:
先写data到cache,flush一下写到内存;然后修改data在cache中
,然后关闭写到内存。
因为你关闭了cache的写回功能,
所以cache的内容改变了但并不写回,即如果是原来的值就是正确的,如果值改变就打印出改变的值,并且状态为failure。
说明cache的无效功能并不能正常工作。
l DMA测试
利用系统函数并重写系统函数,显示出错数据。
搬运数据,然后比较原数据和目的数据,如果不相等,则说明出现错误。然后打印出出错的数据。
l ALU ,FPU测试
Alu主要测试逻辑,递归,普通计算。
FPU主要测试 FFT ,回归运算。
利用FFT计算的复杂性验证FPU。
l 然后其他的 GIC QSPI DMA(启动 )测试直接调用功能化函数,判断输出状态
如
如果成功则说明功能性没有问题,否则说明硬件中出现问题。在测试的时候需要注意硬件的初始化顺序,因为如果硬件初始化过程中影响到其它硬件,也可能出现错误。
2 PL测试
底层参见第一部分,SDK中主要包括
可大量输入i值
PL会进行事先设计的运算,在验证数据的时候,事先记录一些正确的数据。
接着
拿之前记录的数据和此次在试验中得到的数据进行比较,
如果出错则输出。
项目参见: https://github.com/gaoloudushang点击打开链接