Lattice库联合ModelSim仿真FIFO

news2024/9/22 21:18:01

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/verilog

vlib 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 xp2

vlog -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 ps
    module 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)
        );
    
        initial
        begin
           Data <= 0;
          #100;
          @(Reset == 1'b0);
          for (i1 = 0; i1 < 515; i1 = i1 + 1) begin
            @(posedge WrClock);
              Data <= Data + 1'b1;
            @(posedge WrClock);
          end
        end
        always
        #5.00 WrClock <= ~ WrClock;
    
        always
        #5.00 RdClock <= ~ RdClock;
    
        initial
        begin
           WrEn <= 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;
          end
           WrEn <= 1'b0;
           #200;
           $stop;
        end
        initial
        begin
           RdEn <= 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;
          end
           RdEn <= 1'b0;
           #200;
           $stop;
          
          
        end
        initial
        begin
           Reset <= 1'b1;
          #100;
           Reset <= 1'b0;
        end
        initial
        begin
           RPReset <= 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延迟了两个周期生效

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/57662.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA社区疫情防控系统毕业设计,社区疫情防控管理系统设计与实现,毕设作品参考

功能清单 【后台管理员功能】 关于我们设置&#xff1a;设置学校简介、联系我们、加入我们、法律声明、学校详情 广告管理&#xff1a;设置小程序首页轮播图广告和链接 留言列表&#xff1a;所有用户留言信息列表&#xff0c;支持删除 会员列表&#xff1a;查看所有注册会员信…

b站黑马JavaScript的Ajax案例代码——新闻列表案例

目录 目标效果&#xff1a; 重点原理&#xff1a; 1.js中art-template标准语法的循环输出 2.js中split方法——转换字符串为数组 3.js中art-template标准语法的过滤器 4.js中Date内置对象——getFullYear() 5.js中Date内置对象——getMonth() 6.js中Date内置对象——ge…

简单认识一下HotSpot 垃圾收集器

前言 HotSpot 虚拟机提供了多种垃圾收集器&#xff0c;每种收集器都有各自的特点&#xff0c;虽然我们要对各个收集器进行比较&#xff0c;但并非为了挑选出一个最好的收集器。我们选择的只是对具体应用最合适的收集器。 新生代垃圾收集器 Serial 垃圾收集器&#xff08;单线…

java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver解决方案

&#x1f31f;问题解析 首先&#xff0c;此报错会出现在两种情况&#xff0c;并且有各自的解决方法。 如果在Java程序中报错&#xff0c;那么我们就参考方法1&#xff08;单Java程序&#xff09;&#xff1a; 如果你是在Tomcat中报错&#xff0c;那么我们可以参考方法2&#…

[附源码]JAVA毕业设计交通事故档案管理系统(系统+LW)

[附源码]JAVA毕业设计交通事故档案管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…

微信小程序实现微信支付的相关操作设置

本文不涉及相关API的实现&#xff0c;旨在记录实现微信支付需要在微信公众平台和微信支付的商户平台需要进行的操作。 1.首先需要用户申请了微信小程序和入驻微信商户平台 2.获取小程序的appid 设置AppSecre小程序密钥 3.微信支付获取商户号&#xff0c;在认证的时候设置操…

基于JavaSwing的员工工资管理系统

开发环境 eclipsejdk1.8mysql5.7 系统简介 本项目是主要功能有员工信息管理&#xff0c;部门信息管理&#xff0c;员工工资设定&#xff0c;系统设置等&#xff0c;员工不需要登录系统&#xff0c;可以直接查询自己的工资&#xff0c;具体项目操作及项目结构请看演示视频&am…

架构解析:Dubbo3 应用级服务发现如何应对双 11 百万集群实例

继业务全面上云后&#xff0c;今年双 11&#xff0c;阿里微服务技术栈全面迁移到以 Dubbo3 为代表的云上开源标准中间件体系。在业务上&#xff0c;基于 Dubbo3 首次实现了关键业务不停推、不降级的全面用户体验提升&#xff0c;从技术上&#xff0c;大幅提高研发与运维效率的同…

【POJ No. 1019】数字序列 Number Sequence

【POJ No. 1019】数字序列 Number Sequence 北大OJ 题目地址 【题意】 给出单个正整数i &#xff0c;编写程序以找到位于数字组S 1 , S 2 , …, Sk 序列中第i 位上的数字。每个组Sk 都由一系列正整数组成&#xff0c;范围为1&#xff5e;k &#xff0c;一个接一个地写入。 序…

Sass扫码点餐源码 单门店多门店餐饮连锁扫码点餐外卖自提系统源码

智慧餐厅扫码点餐小程序系统源码 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 原生小程序 4. Sass 模式 5. 带调试视频 本套扫码点餐小程序系统支持多店铺&#xff0c;支持外卖&#xff0c;堂食&#xff0c;扫码点餐、预约桌号、订单语音提醒、会员营销、…

viewport视口的概念

viewport视口的概念 概念详见 MDN&#xff0c;我摘出来对比了下&#xff0c;如下图&#xff1a; 总结&#xff1a; viewport就是当前窗口的可视部分Visual Viewport 视觉视口 就是视口viewport中的可见部分 比如在mobile浏览器中&#xff0c;输入时&#xff0c;弹出的键盘&am…

屏幕开发学习 -- 迪文串口屏

一 前言 最近学习了一款基于图形化开发的屏幕&#xff0c;在摸索一周后&#xff0c;基本熟悉了这款产品的一个开发过程&#xff0c;今天给大家分享一下迪文串口屏和STM32如何建立通讯&#xff0c;有不足之处&#xff0c;还请见谅&#x1f601; 二 迪文屏介绍 1.选型 我用到的…

Ubuntu 20.04 安装NVIDIA显卡驱动+cuda 11.7+cudnn

Ubuntu 18.04 安装NVIDIA显卡驱动cuda 10.2cudnn本机环境1 相关查询命令一、Ubuntu 18.04 安装NVIDIA显卡驱动1、查看本机显卡能够配置的驱动信息2、安装显卡驱动3、测试nvidia driver是否安装成功二、Ubuntu 20.04 安装cuda 11.71、安装显卡驱动检查2、安装CUDA10.23、配置CUD…

了解世界杯赔率,让您运气更‘好‘(个人分享)

足球世界杯买球赢面计算前言理论基础实际计算用例&#xff1a;代码实现真实数据前言 此文是个人关于世界杯的一些浅显的看法&#xff0c;实际统计结果和计算方法有出入&#xff0c;可能原因&#xff1a;1&#xff09;数据量不够。2&#xff09;比赛双方差距够大导致的。但在双…

前端如何实现网页变灰功能?

今天来从前端的角度看看网页置灰是如何实现的&#xff0c;以及相关使用技巧&#xff01; 实现思路 先来看看一些主流网站是如何实现置灰的&#xff1a; BiliBili&#xff1a;淘宝&#xff1a;京东&#xff1a;掘金&#xff1a;可以看到&#xff0c;这些网站实现置灰的方式都…

计算机网络学习笔记(Ⅰ):计算机网络体系结构

目录 1 概述 1.1 基础概念 1.计算机网络 2.功能 3.组成 4.分类 1.2 标准化工作及相关组织 1.标准化工作 2.相关组织 1.3 性能指标 1.速率 2.带宽 3.吞吐量 4.时延 5.时延带宽积 6.往返时延RTT 7.利用率 2 计算机网络结构 2.1 分层结构 1.分层原则 2.分层结…

专业/户籍不限!腾讯/华为招聘提到的PMP证书!多行业适用

很多有项目管理需求的小伙伴&#xff0c;不知道学PMP到底需要了解些啥&#xff0c;除了考什么&#xff0c;还有就是在报考以及后续续证方面都是需要具体了解清楚的&#xff0c;特别是想要自学PMP的宝子们。这些一定要了解清楚。 这篇直接告诉你PMP的全部相关内容&#xff01;&…

[附源码]Python计算机毕业设计Django良辰之境影视评鉴系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;我…

Python实战案例,Streamlit+Plotly模块,Python制作销售数据可视化看板,展示分析一步到位

前言 今天给大伙介绍一个用Python制作销售数据大屏的方法。 Let’s start happily 开发工具 Python版本&#xff1a; 3.6.4 相关模块&#xff1a; Streamlit模块 Plotly模块 pandas模块 环境搭建 安装Python并添加到环境变量&#xff0c;pip安装需要的相关模块即可。…

【大数据入门核心技术-Zookeeper】(一)Zookeeper基本原理

目录 一、Zookeeper是用来做什么的 二、Zookeeper的角色 1、Leader 2、Follower 3、Observer 一、Zookeeper是用来做什么的 首先需要了解zookeeper是什么&#xff0c;zookeeper是一个分布式协调服务。所谓分布式协调主要是来解决分布式系统中多个进程之间的同步限制&#…