Lattice库联合ModelSim仿真FIFO
创始人
2024-04-16 10:18:12

Lattice联合ModelSim仿真FIFO

  • 前言
  • 一、添加IP
  • 二、库文件添加
    • (一)方式一:添加器件库到ModelSim
    • (二)方法二:直接添加器件库到Libray,和tb.v在同一个目录下仿真
  • 三、仿真
    • (一)仿真文件
    • (二)仿真结果

前言

本实验FPGA基于LFE5U—25F一6BG256C,软件Lattice Diamond 3.10 (64-bit)ModelSim SE-64 10.5
掌握基本使用方法后,调用FIFO的IP核,用Lattice联合ModelSim仿真。


一、添加IP

1.项目器件设置
具体参考02_LATTICE入门篇之新建项目
在这里插入图片描述


2.IP核配置
具体参考05_LATTICE入门篇之IP核
在这里插入图片描述



二、库文件添加

(一)方式一:添加器件库到ModelSim

此处参考Modelsim添加Lattice库
1.在modelsimF:\modeltech64_10.5目录下,新建一个文件夹,比如lattice,并进入此文件夹
2.新建一个名为sim.tcl的文本文件,输入如下脚本:

set DIAMOND_PATH F:/lscc/diamond/3.10_x64/cae_library/simulation/verilogvlib work
vlib ec
vlib ecp
vlib ecp2
vlib ecp3
vlib ecp5u
vlib lptm
vlib lptm2
vlib machxo
vlib machxo2
vlib machxo3l
vlib pmi
vlib sc
vlib scm
vlib xp
vlib xp2vlog -work ec       $DIAMOND_PATH/ec/*.v
vlog -work ecp      $DIAMOND_PATH/ecp/*.v
vlog -work ecp2     $DIAMOND_PATH/ecp2/*.v
vlog -work ecp3     $DIAMOND_PATH/ecp3/*.v
vlog -work ecp5u    $DIAMOND_PATH/ecp5u/*.v
vlog -work lptm     $DIAMOND_PATH/lptm/*.v
vlog -work lptm2    $DIAMOND_PATH/lptm2/*.v
vlog -work machxo   $DIAMOND_PATH/machxo/*.v
vlog -work machxo2  $DIAMOND_PATH/machxo2/*.v
vlog -work machxo3l $DIAMOND_PATH/machxo3l/*.v
vlog -work pmi      $DIAMOND_PATH/pmi/*.v
vlog -work sc       $DIAMOND_PATH/sc/*.v
vlog -work scm      $DIAMOND_PATH/scm/*.v
vlog -work xp       $DIAMOND_PATH/xp/*.v
vlog -work xp2      $DIAMOND_PATH/xp2/*.v

3.运行脚本
打开命令提示符进入sim.tcl 所在F:\modeltech64_10.5\lattice目录下
运行脚本

vsim -do sim.tcl

4.回到modesim主目录:F:\modeltech64_10.5,找到modelsim.ini文件,右键->将“只读”属性去掉。
在这里插入图片描述


5.然后再打开modelsim.ini,在[Library]这个标签后,添加如下:

ec       = $MODEL_TECH/../lattice/ec       
ecp      = $MODEL_TECH/../lattice/ecp      
ecp2     = $MODEL_TECH/../lattice/ecp2     
ecp3     = $MODEL_TECH/../lattice/ecp3     
ecp5u    = $MODEL_TECH/../lattice/ecp5u    
lptm     = $MODEL_TECH/../lattice/lptm     
lptm2    = $MODEL_TECH/../lattice/lptm2    
machxo   = $MODEL_TECH/../lattice/machxo   
machxo2  = $MODEL_TECH/../lattice/machxo2  
machxo3l = $MODEL_TECH/../lattice/machxo3l 
pmi      = $MODEL_TECH/../lattice/pmi      
sc       = $MODEL_TECH/../lattice/sc       
scm      = $MODEL_TECH/../lattice/scm      
xp       = $MODEL_TECH/../lattice/xp       
xp2      = $MODEL_TECH/../lattice/xp2      

6.保存modelsim.ini,然后关闭刚modelsim重启,看到库的情况如下:
在这里插入图片描述


7.回到modesim主目录:F:\modeltech64_10.5,找到modelsim.ini文件,右键->增加“只读”属性。

:这个方法添加了器件库后,编译没有问题,但是新建库仿真跑波形又会报错提示找不到对应的库对应.v了,很奇怪。猜测可能是添加的库文件.v和需要仿真的.v不在同一个Libray中,也可能是其他.所以用了下面的方法,解决。


(二)方法二:直接添加器件库到Libray,和tb.v在同一个目录下仿真

此处参考Lattice Diamond与modelsim联合仿真环境设置

1… 选中空库(work))

2.点击modelsim的菜单栏中选择Compile >> Compile
3.找到F:\lscc\diamond\3.10_x64\cae_library\simulation\verilog目录下对应器件库ecp5u下的所有.vCtrl+A全选点击Complie,编译完成点击Done

在这里插入图片描述


5.完成后可以看见库文件和tb文件全在同一个Library下了,再仿真,没有报错了。
在这里插入图片描述
在这里插入图片描述

除了找仿真文件tb.v的时候有点麻烦,其他的没什么问题。


三、仿真

下面是利用脚本进行仿真

(一)仿真文件

1.再添加ip时,Diamond会自动添加仿真文件,只需略微修改即可或者不修改也行。
在这里插入图片描述


2.tb文件,放到项目仿真目录下
在这里插入图片描述

`timescale 1 ns / 1 psmodule tb;GSR GSR_INST (.GSR(1'b1));PUR PUR_INST (.PUR(1'b1));reg [7:0] Data = 8'b0;reg WrClock = 0;reg RdClock = 0;reg WrEn = 0;reg RdEn = 0;reg Reset = 0;reg RPReset = 0;wire [7:0] Q;wire Empty;wire Full;integer i0 = 0, i1 = 0, i2 = 0, i3 = 0, i4 = 0, i5 = 0, i6 = 0, i7 = 0, i8 = 0, i9 = 0;fifo u1 (.Data(Data), .WrClock(WrClock), .RdClock(RdClock), .WrEn(WrEn), .RdEn(RdEn), .Reset(Reset), .RPReset(RPReset), .Q(Q), .Empty(Empty), .Full(Full));initialbeginData <= 0;#100;@(Reset == 1'b0);for (i1 = 0; i1 < 515; i1 = i1 + 1) begin@(posedge WrClock);Data <= Data + 1'b1;@(posedge WrClock);endendalways#5.00 WrClock <= ~ WrClock;always#5.00 RdClock <= ~ RdClock;initialbeginWrEn <= 1'b0;#100;@(Reset == 1'b0);for (i4 = 0; i4 < 515; i4 = i4 + 1) begin@(posedge WrClock);#1  WrEn <= 1'b1;@(posedge WrClock);#1  WrEn <= 1'b0;endWrEn <= 1'b0;#200;$stop;endinitialbeginRdEn <= 1'b0;@(Reset == 1'b0);@(WrEn == 1'b1);@(WrEn == 1'b0);for (i5 = 0; i5 < 515; i5 = i5 + 1) begin@(posedge RdClock);#1  RdEn <= 1'b1;@(posedge RdClock);#1  RdEn <= 1'b0;endRdEn <= 1'b0;#200;$stop;endinitialbeginReset <= 1'b1;#100;Reset <= 1'b0;endinitialbeginRPReset <= 1'b1;#100;RPReset <= 1'b0;end
endmodule

3.脚本文件top.do

vlib work
vmap work work#编译testbench文件
vlog ../sim/tb.v#编译 	设计文件
vlog ../ip/Clarity/fifo/fifo.v#添加库文件#指定仿真顶层
vsim -novopt work.tb
#添加信号到波形窗 	
add wave -position insertpoint sim:/tb//*

(二)仿真结果

对照参考Lattice系列内存时序
六、双端口FIFO(FIFO_DC) – 基于 EBR 或 LUT

1.写入第一个数据
WrEn=1:Wrclock上升沿写入第一个数据Data=8’d1

在这里插入图片描述


2.读出数据
RrEn=1:Rrclock上升沿写入第一个数据Q=8’d1

在这里插入图片描述


3,关于empty
empty延迟了两个周期生效

在这里插入图片描述
在这里插入图片描述

相关内容

热门资讯

demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...