CycloneV SERDES仿真
【时间:2013 年 11 月 15 日, 来源:本站原创, 作者:杨森】
骏龙科技 杨森
在QII中调用CycloneV的SERDES和reconfig模块时,IPCore会自动生成以子目录形式存储相关仿真文件(ArriaV和StratixV也是一样的)。按照Altera提供的相关文档,可以通过执行自动生成的脚本文件,或者自己编写脚本文件,实现对SERDES的仿真。对于第一种方法,需要使用quartus_sh的命令执行脚本文件。其实在Modelsim下自行创建do文件的方式,可以更容易理解需要哪些仿真文件,并且这种方式会更加通用,适用于所有的仿真流程。
仿真所用到的软件环境包括Modelsim SE10.0e和QII 12.0 SP1。
1. 调用CycloneVCustom PHY和TransceiverReconfiguration Controller
在例化PHY IPCore时,使能“Enableembedded reset controller”,PHY自带reset模块,“tx_ready”和“rx_ready”状态输出指示。
在例化PHY IPCore时,可以发现下面信息栏有提示需要与2个reconfiguration模块相连,一个是连接到transceiver channel,一个是连接到transmitPLL。所以在例化reconfiguration模块时,在“Number of reconfiguration interfaces”栏内填写的参数为2,这样才可以保证PHY与reconfiguration模块的“reconfig_to_xcvr”和“reconfig_from_xcvr”两个信号的数据位宽相匹配。(PHYIPCore仅例化了一个SERDES通道)
Custom PHY的相关参数设置,是需要通过Avalon-MM PHY Management Interface进行访问的,参数的设置都是以寄存器方式进行读写。参照“Altera Transceiver PHY IP Core User Guide”,设置SERDES自回环,使能RX字节对齐模块。对应地址偏移为0x061,“phy_mgmt_writedata”设为32’d1;地址偏移为0x085,“phy_mgmt_writedata”设为32’d1。
2. 生成Custom PHY和Reconfiguration IPCore之后,在工程目录下会分别生成两个不同的目录,包括IPCore的设计和仿真文件。
3. 在工程当前目录下新建Modelsim文件夹,相关test bench和仿真产生的文件都会存于此目录下。
4. 创建simlib.do文件,对除了工程相关文件之外的所需仿真文件,进行编译。文件内容如下:
set LIBPATH c:/altera/12.0/quartus/eda/sim_lib/
#指定sim_lib目录
set PHYPATH ../gxb_1g25_sim/altera_xcvr_custom_phy
#指定Custom PHY目录
set RECONFPATH ../gxb_reconf_sim/alt_xcvr_reconfig
#指定Reconfiguration目录
vlib sim_lib
vmap sim_lib sim_lib
#创建sim_lib仿真库,将相关仿真库文件编译至此库中
vlog -work sim_lib $LIBPATH/220model.v
vlog -work sim_lib $LIBPATH/altera_mf.v
vlog -work sim_lib $LIBPATH/sgate.v
vlog -work sim_lib $LIBPATH/altera_primitives.v
#添加常规需要的仿真库文件之外,其中下面5个文件,是CycloneV系列在Modelsim下推荐编译的仿真库文件
vlog -work sim_lib $LIBPATH/altera_lnsim.sv
vlog -work sim_lib $LIBPATH/mentor/cyclonev_atoms_ncrypt.v
vlog -work sim_lib $LIBPATH/cyclonev_atoms.v
vlog -work sim_lib $LIBPATH/mentor/cyclonev_hssi_atoms_ncrypt.v
vlog -work sim_lib $LIBPATH/cyclonev_hssi_atoms.v
#以下仿真库文件为当前工程调用PHY和Reconfiguration IP Core的相关文件
#header file
vlog -work sim_lib $PHYPATH/alt_xcvr_csr_common_h.sv
vlog -work sim_lib $PHYPATH/*_h.sv
#common function
vlog -work sim_lib $PHYPATH/altera_xcvr_functions.sv
#low latency phy
vlog -work sim_lib $PHYPATH/*.v
vlog -work sim_lib $PHYPATH/*.sv
# compile simulation files for reconfig instance
vlog -work sim_lib $RECONFPATH/alt_xcvr_reconfig_h.sv
vlog -work sim_lib $RECONFPATH/*.v
vlog -work sim_lib $RECONFPATH/*.sv
5. 创建sim.do文件,将工程相关文件进行编译。文件内容如下:
#do simlib.do
vlib work
vmap work work
#创建work仿真库,将工程相关仿真库文件编译至此库中
vlog +acc -work work -incr -f run.f
#将工程相关带路径的文件名存放在run.f的文件中,对其进行编译。Run.f为任意命名的文件
vsim -novopt -L sim_lib -lrun_modelsim.log \
+transport_int_delays +transport_path_delays \
work.tb_top
#对work仿真库的tb_top模块进行仿真,其中tb_top为test bench中的module名称,仿真记录信息存放于run_modelsim.log日志文件中,“+transport_int_delays +transport_path_delays”参数建议添加,表示当前为高速信号仿真
6. 创建run.f文件,将工程相关文件名称存放在此文件中,并带有相对路径。文件内容如下,除了tb_top.v的testbench文件在当前所建的modelsim目录下,其余文件都在上一级,即当前工程目录下。
../gxb_1g25.v
../gxb_reconf.v
../mayuan.v
../phy_mgmt_ctrl.v
../top.v
tb_top.v
7. 创建wave.do文件,执行上一步创建的sim.do文件,并将需要观察的信号置于wave窗口,并运行仿真。文件内容如下:
quit -sim
do sim.do
add wave sim:/tb_top/u1_top/*
add wave -divider phy_mgmt_ctrl
add wave sim:/tb_top/u1_top/phy_mgmt_ctrl_inst/*
radix -hex
run 50us
8. 打开Modelsim,通过File->Change Directory命令将工作目录指定到创建的modelsim目录下。由于是第一次运行仿真,可以先执行一次“do simlib.do”命令,即编译除工程文件之外的仿真库文件。以后再次运行仿真时,即可跳过此步骤。直接执行“do wave.do”命令,因为wave.do文件中已经嵌套了sim.do文件。
9. 仿真结果
可以看到程序中在tx_ready信号变高之后,开始发送数据。在rx_ready信号变高之后一段时间,开始接收到正确的数据。