Xilinx PCIE IP modelsim 仿真
- UID
- 824598
|
Xilinx PCIE IP modelsim 仿真
以下是代码片段:
第一篇博文该写些什么,笔者思虑很久了,回想自笔者接触电子行业以来调过单片机,画过电路板,做个PCI,PCIE,嵌入式开发系统,处理器接口,但每每思之,都感觉各个项目只是浮光掠影,不敢在本论坛班门弄斧,但想到写总结一来可以巩固自己的知识,加深理解,二来可以给要做类似项目的同行一点点启示,三来可以和同行们交流,让大家批评指正,不亦说乎。
思之再三,还是从最近做的PCIE的项目开始,项目背景就不介绍了,有兴趣的可以私聊。好了,言归正传,介绍一下PCIE的Modelsim仿真。
PCIE的仿真难点应该就是PCIE传输层包的构建了,因为整个设计一端时2.5Gbps的差分信号,一端是你要仿真的用户逻辑,一种方法是用testbench模拟Xilinx IP 输出端并行总线的时序,这样要求设计者对PCIE的包结构非常熟悉,无疑这样工作量很大;方法二是将工程编译完成,用chipscope下到FPGA中,将板卡插入主机之上调试,这样比较耗时,而且也费力。以上两种方法笔者都试过,如果您也在这么做,那么恭喜你,现在不用这么做了,因为Xilinx已经把我们想做的都做了。下面笔者就介绍PCIE的modelsim仿真,这种方法是用逻辑构建2个PCIE设备,一个用于测试时模拟主机的行为,另一个就是您要测试的部分了。
1 编译xilinx库文件(13.2 modelsim仿真需要6.6d以上的modelsim版本)
开始->Design suite->ISE Design Tool –> Tool->Simulation Library Compilation Wizard编译xilinx库文件;
2编译好后,打开modelsim的ini文件,增加初始化库文件,并指定到编译好的库文件中。
其中lib名字一定要和Simulation Library Compilation Wizard生成的库文件名相同,否则modelsim编译时会显示找不到库的错误。
3 例化一个PCIE的IP,打开modelsim,改变文件夹到例化到的例子的simulation的functional文件夹,将ISE/verilog/src/文件中的glbl.v文件在work库中编译一下,并去掉simulate_mti.do文件中的glbl.v文件的加载,然后编译就可以了。
运行,过程中出现modelsim让终止的对话框选择no,运行结果如下:
经仿真,例子只给了链路训练的仿真。
仿真文档参考Virtex-6 FPGA Integrated Block for PCI Express User Guide(ug517)。 模块的结构图如下: Board为顶层模块,EP为用户例化PCIE PIO例子,实际调试中可以改为添加用户逻辑的PCIE代码,RP为测试模块代码,RP源文件在simulation的functional和dsport文件中。
Pci_exp_usrapp_rx/tx分别定义了用于仿真的package产生task,可以根据需要调用task进行测试。
//Test starts here
if (testname == "dummy_test")
begin
$display("[%t] %m: Invalid TESTNAME: %0s", $realtime, testname);
$finish(2);
end
`include "tests.v"
else begin
$display("[%t] %m: Error: Unrecognized TESTNAME: %0s", $realtime, testname);
$finish(2);
End
Pci_exp_usrapp_tx一段代码,测试程序可以在tests.v文件中通过调用task经行测试。实际测试中需要把用户测试代码添加到sample_test1文件中。
仿真的打印信息:
仿真首先要TSK_BAR_INIT,然后再进行其他操作,才会出来波形,否则只能进行链路训练。
仿真环境默认只支持一个bar,如果有多个bar可将pci_exp_usrapp_tx.v中的pio_check_design改为0(检测在TSK_BAR_INIT中完成)。
如果用户想实测带有用户逻辑的代码,需要在example design的基础上添加用户代码,但是要注意最好不要改变设计中顶层模块的名字以便simulation_mit.do文件找不到编译文件,如果改变了,用户可以通过修改.do文件的内容来仿真。
E:/loongson/PCIE/Xilinx_PCIe_V6/pcie_1x1_example/ipcore_dir/pcie/simulation/functional仿真PCIE PIO的例子
|
|
|
|
|
|