[转] 用ModelSim仿真PLL模块

摘要:
由于要对FPGA读写SDRAM的工程进行调试,第一步就是验证PLL模块的功能,故结合网上找的一些资料,进行了如下PLL仿真实验。下面,新建一个Modelsim的工程。modelsim会自动帮您把所有事情搞定。下面可以放大来看一下从放大的图片可以看出,两个100m的时钟之间确实存在相位差,换算成时间约为2ns,这也就验证了我的PLL模块的功能。

由于要对FPGA读写SDRAM的工程进行调试,第一步就是验证PLL模块的功能,故结合网上找的一些资料,进行了如下PLL仿真实验。

下面是仿真的全过程

  • 首先,看一下Quartus中的PLL模块:
  • [转] 用ModelSim仿真PLL模块第1张
  • [转] 用ModelSim仿真PLL模块第2张

从上面图中可以看出:我的FPGA输入时钟是20MHZ,该PLL有三个输出,其中

C0:5倍频,100MHZ

C1:1倍频,20MHZ

C2:5倍频,100MHZ,同时相对于C0延时2ns,也就是72度的相位差。

  • 下面,新建一个Modelsim的工程。然后在工程目录下新建两个文件夹,分别为src以及modelsim,如图所示[转] 用ModelSim仿真PLL模块第3张
  • 下面,给工程添加库文件,源文件以及激励文件:
首先,添加库文件,在quartus目录下(E:\Altera\quartus\eda\sim_lib),即sim_lib文件夹中复制两个库文件:
altera_mf.v 和 220model.v,把它们复制到src目录下
然后,找到Quartus工程中生成的pll模块的文件,我的是clk_ctrl.v(第一幅图可以看出),把它复制到src目录下;
然后新建一个pll_module.v文件,对PLL模块进行一次小包装,代码如下:
`timescale 1 ps / 1ps

modulepll_module(
clk,
reset,
clk_20m,
clk_100m,
sdram_clk,
sys_reset
);

inputclk;
inputreset;
outputclk_20m;
outputclk_100m;
outputsdram_clk;
outputsys_reset;



clk_ctrl clk_ctrl_u1 (
.areset(reset),
.inclk0(clk),
.c0(clk_20m),
.c1(clk_100m),
.c2(sdram_clk),
.locked(sys_reset)
);

endmodule
接下来,编写testbench文件,pll_module_tb.v
<span style="font-size: 13px; "><span style="font-family:'Microsoft YaHei';">`timescale 1 ps / 1ps  
modulepll_module_tb;  
  
regclk;  
regreset;  
wireclk_100m;  
wireclk_20m;  
wiresdram_clk;  
wiresys_reset;  
  
pll_module    u1(  
     .clk(clk),  
     .reset(reset),  
     .clk_20m(clk_20m),  
     .clk_100m(clk_100m),  
     .sdram_clk(sdram_clk),  
     .sys_reset(sys_reset)  
     );  
   
 initial  
 beginclk = 0;  
     reset=0;  
 end  
   
 always #25000 clk = ~clk;  
   
  
 endmodule</span></span> 

由于仿真以ps为单位,而FPGA的输入时钟为20MHZ,即每周期50ns=50000ps,所以上面代码中的clk每25000个仿真时间进行一次翻转。

完成后的src目录下现在应该有5个文件:
[转] 用ModelSim仿真PLL模块第4张
  • 下面,我们可以开始准备仿真了。通常我们都是先编译,然后在添加波形文件,然后run xxxxxx ;这样比较繁琐,其实用命令往往比较方便快捷。
在工程的modelsim目录下新建文件pll.do,并写入如下代码
<span style="font-size: 13px; "><span style="font-family:'Microsoft YaHei';">#Creat a work lib  
vlib work   
#Map the work lib to current lib  
vmap work work  
   
#Compile the source files  
vlog E:/Project/ModelSim/sdram_test/src/altera_mf.v  
vlog E:/Project/ModelSim/sdram_test/src/220model.v  
vlog E:/Project/ModelSim/sdram_test/src/clk_ctrl.v  
vlog E:/Project/ModelSim/sdram_test/src/pll_module.v  
vlog E:/Project/ModelSim/sdram_test/src/pll_module_tb.v  
   
#Start simulation  
vsim  -novopt work.pll_module_tb  
   
#add wave  
add wave -hex /*
run 500000000</span></span>  
上面这段代码完成了以下事情:
1.建立了一个工作lib
2.使该lib成为当前lib
3.编译工程中的文件
4.开始仿真,其中 -novopt是禁止优化的意思
5.添加波形文件
6.仿真 500000000个时间单位
  • 现在,整个modelsim工程的文件结构如下:

[转] 用ModelSim仿真PLL模块第5张

下面,右键点击pll.do,选择execute就可以执行该脚本了。modelsim会自动帮您把所有事情搞定。(这一过程时间比较长,请耐心等待一会),结果如下图:

[转] 用ModelSim仿真PLL模块第6张

不难看出,从波形上看,是满足预先的设想的。下面可以放大来看一下

[转] 用ModelSim仿真PLL模块第7张

从放大的图片可以看出,两个100m的时钟之间确实存在相位差,换算成时间约为2ns,这也就验证了我的PLL模块的功能。

免责声明:文章转载自《[转] 用ModelSim仿真PLL模块》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇docker安装启动、配置MySqlLoadRunner之检查点下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Delphi 文件操作资料

var file_name:string; file_name:='c:\luther.gliethttp.txt'; FileWrite(com.log_fd, PChar(file_name)^, length(file_name)); 文件是同一种类型元素的有序集合,是内存与外设之间传输数据的渠道。文件的本质是一个数据流,所有的文件实际上是一串二进...

pll的ip核调用

Quartus ii的pll ip核调用: 1、先建立好工程。点击“Tools”,接着点击“Mega Wizard Plug-In Manager”。 2、创建一个新的ip核: 2、这里需要的是pll的ip核,所以就搜索“pll”,并选中“ALTPLL”,接着修改成fpga芯片型号,Verilog HDL,还有设置好pll ip核的路径和名称,这里的名称...

【ORACLE】调整序列的当前种子值

【ORACLE】调整序列的当前种子值 --必须用SYS用户执行脚本;或具有SYSDBA角色登录; CREATE OR replace PROCEDURE seq_reset_startnum(v_seqname varchar2, v_startnum number) AS n number(10); v_step number(10):=1;...

Normalize.css用法

1 Normalize.css用法 重置样式非常多,Normalize.css和reset是两个常用的重置 CSS 文件  http://necolas.github.io/normalize.css/ 可以用来作为项目的基础CSS Normalize 相对reset更加平和,注重通用的方案,重置掉该重置的样式,保留有用的 user agent 样式,同时...

java之Matcher类详解

在JDK 1.4中,Java增加了对正则表达式的支持。 java与正则相关的工具主要在java.util.regex包中;此包中主要有两个类:Pattern、Matcher。 Matcher 声明:public final classMatcherextendsObjectimplementsMatchResult Matcher类有final 修饰,可...

DSPBuilder Matlab安装教程说明

在安装DSPBuilder时遇到了几个小问题,让我心绪颇有感触:版本一定要用对呀!! 在本人安装的软件版本: QII11.0+DSPB11.0+Matlab2011b+Questa10.0(Modelsim的10.0版)+Win7系统 由于DSPB在安装前必须要事先安装好QII11.0+Matlab2011b+Questa10.0(或者Modelsim的其...