modelsim仿真vivado IP核(PLL为例)

在上一篇文中复制好库文件后:

在vivado中创建IP核。

在E盘的modelsim_project文件夹中建立testbench文件夹,run_simulation.bat文件,再将整个vivado工程复制过来,此时modelsim文件夹包括以下文件:

run_simulation.bat代码如下:

@echo off
@cls
title FPGA Auto Simulation batch script

echo ModelSim simulation
echo.
echo Press '1' to start pll_tb simulation  ** pll_tb:可更改,改成建立的modelsim工程的文件名
echo.

:input
set INPUT=
set /P INPUT=Type test number: %=%
if "%INPUT%"=="1" goto run1
goto end

:run1
@cls
echo Start pll_tb Simulation;    ** pll_tb:可更改,改成建立的modelsim工程的文件名
echo.
echo.
cd testbench/pll_tb              ** cd:打开包含四个文件的文件夹modelsim工程的文件名
vsim -do "do compile.do"
goto clean_workspace

:clean_workspace

rmdir /S /Q work
del vsim.wlf
del transcript.

:end

testbench文件夹中包含compile.do、glbl.v、testbench_top.v、wave.do  4个文件:

只列出需要更改的文件具体内容:

  • glbl.v文件是从vivado安装路径中复制的,路径: D:\vivado\Vivado\2019.2\data\verilog\src\glbl.v
  • compile.do:代码如下:
###  这是注释     **需要更改的地方

vlib work                  ### vlib为Modelsim命令,work是一个新建的文件夹名称,该命令将在compile.do所在文件夹中新建一个名为work的物理目录
vmap work work             ### vmap为Modelsim命令,后面两个work都是文件名,前面一个work是vlib命令所创建的文件夹,后面一个work表示在Modelsim的Library窗口中建立了一个名为work的库文件夹
vlog -work work glbl.v

#library(库)
### 所用的库已经编译好(即从vivado中复制过去的库文件)
#vlog  -work work ../../library/artix7/*.v

#IP
###  **改IP核的网表文件的地址:在复制过来的vivado工程中找srcs/sources_1/ip/.../...sim_netlist.v文件
vlog  -work work E:/modelsim_project/pll_t/PLL_t/PLL_t.srcs/sources_1/ip/clk_wiz_0/clk_wiz_0_sim_netlist.v

#SourceCode(设计文件)
#vlog  -work work ../design/vlg_design.v

#Testbench(测试文件)
vlog  -work work testbench_top.v 


###  调用modelsim工具,在其中打开测试文件脚本
vsim -voptargs=+acc -L unisims_ver -L unisim -L work -Lf unisims_ver work.glbl work.testbench_top

#Add signal into wave window
###  添加波形,自动弹出波形界面
do wave.do

###  直接运行
#run -all
  • testbench_top.v:代码如下:
`timescale 1ns/1ps
module testbench_top();
	

//参数定义

`define CLK_PERIORD		20		//时钟周期设置为20ns(50MHz)	


//接口申明
	
reg clk;
reg rst_n;

wire	clk_25m_out;
wire    clk_50m;   
wire    clk_75m;  
wire    clk_75m_out;
wire    clk_200m; 
wire 	locked;	

	
//对被测试的设计进行例化
	
  clk_wiz_0 utt_clk_wiz_0 //模块命名
   (
    // Clock out ports
    .clk_out1(clk_25m_out),     // output clk_out1
    .clk_out2(clk_50m),     // output clk_out2
    .clk_out3(clk_75m),     // output clk_out3
    .clk_out4(clk_75m_out),     // output clk_out4
    .clk_out5(clk_200m),     // output clk_out5
    // Status and control signals
    .reset(~rst_n), // input reset
    .locked(locked),       // output locked
   // Clock in ports
    .clk_in1(clk));      // input clk_in1	
	

//复位和时钟产生

	//时钟和复位初始化、复位产生
initial begin
	clk <= 0;
	rst_n <= 0;
	#1000;
	rst_n <= 1;
end
	
	//时钟产生
always #(`CLK_PERIORD/2) clk = ~clk;	


//测试激励产生

initial begin
	
	@(posedge rst_n);	//等待复位完成
	
	@(posedge clk);	

	repeat(300) begin
		@(posedge clk);
	end
	
	$stop;
end


endmodule

运行run_simulation.bat文件。

完成

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值