Moselsim仿真:

    

    EP为Endpoint部分实现代码,即例程主代码。其他的是搭建的仿真环境,主要目的是仿照驱动的行为,将PCIE软核用起来,主要是做PC端的行为仿真,如DMA配置,DMA读写操作及主时钟,复位等。加入testbench后结构如上图。

    board:顶层文件+系统复位

    RP:Root complex的部分。其中rport就是PCIE端口部分;rx_usrapp是RX部分,负责发送数据;tx_usrapp是TX部分,负责接收数据;cfg_usrapp是配置部分,配置读写使能,错误控制等,还有一些常用的任务方便其他模块调用;com_usrapp是加载RX/TX文件,把RX/TX的数据以dat文件形式保存,需要时加载/覆盖。pl_usrapp物理层控制和状态部分。

    CLK_GEN_RP/EP:分别是两个端口的时钟产生信号。

    其实EP和RP的结构很像的,基本都是对应的关系,所以理解起来工作量不是很大。

语法笔记:

    因为CLK_GEN_RP/EP很简单,没有什么扒的必要,所以分分钟掠过了。接下来是对RP(testbench)的一些平时没见过的语法的笔记。

    1.module xxx #(

              parameter  xxxx1 = xx,

              parameter      xxxx2 = xx,

              ......

            )

            (

              input          xxxxxx,

              output        xxxx,

               .......

            );

      这个是正常的模块定义。其中前面一个括号是为参数传递准备的定义,后面那个括号就是常见的输入输出端口定义。

     xxx #(

              .xxxx1 ( xx),

              .xxxx2 (xx),

              ......

            )

            module_usrname(

              .xxxxxx(xxxxxxx),

              .xxxx(xxxx),

               .......

            );

      这个是调用模块xxx的语句,其中前面一个括号用于参数传递,后面一个括号用于输入输出端口的引用。

     2.rport中,对RP的BAR0-BAR5有明确的定义需要记录下:      

      BAR0 = 32'hffffff00,
      BAR1 = 32'hffff0000,
      BAR2 = 32'hffff000c,
      BAR3 = 32'hffffffff,
      BAR4 = 32'h00000000,
      BAR5 = 32'h00000000,

     3.rx_usrapp中的output分别是trn_rdst_rdy_n和trn_rnp_ok_n,这两个信号是由ramdom产生的。不过原来的代码里面trn_rdst_rdy_n是始终为0的,实际加入DMA操作的时候可以用trn_rdst_rdy_toggle_count来控制使其有效。其中的状态机通过调用usrapp_com中的任务来进行RX中数据的store。

     4.调用TASK方法:

      eg: board.RP.com_usrapp.TSK_READ_DATA(0, `RX_LOG, trn_rd, trn_rrem_n);——是指调用board-RP-com_usrapp里面的 TSK_READ_DATA任务,其中括号里面的是传递变量,按照usrapp里面TSK_READ_DATA定义里面的input顺序来传递变量。

     5.$value$plusargs:将运行命令(run-options)中的参数值传递给指定的信号或者字符
      用法:

        if ($value$plusargs("TESTNAME=%s", testname))
        $display("Running test {%0s}......", testname);

        则,当使用的运行命令为:<run-options>+TESTNAME=tst_name时,运行结果为:Running test {tst_name}......

      6.如果想把DMA功能用起来,自行调用pci_exp_usrapp_tx.v中的函数,往DMA控制寄存器中写入地址、长度等数据,然后启动DMA读或者写。

PCIE_DMA:xapp1052学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. 实验1 GIT代码版本管理

    (一)实验目的: 1)了解分布式分布式版本控制系统的核心机理: 2) 熟练掌握git的基本指令和分支管理指令: (二)实验内容: 1)安装git 2)初始配置git ,git init git sta ...

  2. 【代码总结】MYSQL数据库的常见操作

    ============================== MYSQL数据库的常见操作 ============================== 一.mysql的连接与关闭 -h:指定所连接的服 ...

  3. vscode vue js 开发插件配置

    安装 vetur { // 自动补全触发范围---双引号内的字符串也可以触发补全 "editor.quickSuggestions": { "other": t ...

  4. idea 配置JVM参数

    -Dfile.encoding=UTF-8 -Xms512m -Xmx3072m -XX:PermSize=512m

  5. Maven____笔记摘抄

    1 1.maven的作用 i.增加第三方Jar (spring-context.jar spring-aop.jar ....) ii.jar包之间的依赖关系 (spring-context.jar ...

  6. 线程池三种队列使用,SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue

    使用方法: private static ExecutorService cachedThreadPool = new ThreadPoolExecutor(4, Runtime.getRuntime ...

  7. 关于Java大整数是否是素数

    题目描述 请编写程序,从键盘输入两个整数m,n,找出等于或大于m的前n个素数. 输入格式: 第一个整数为m,第二个整数为n:中间使用空格隔开.例如: 103 3 输出格式: 从小到大输出找到的等于或大 ...

  8. Docker 之registry私有仓库搭建

    Docker 之registry私有仓库搭建 官方提供的私有仓库docker registry用法 https://yeasy.gitbooks.io/docker_practice/reposito ...

  9. Unity3D~纹理格式

    因为之前自己从来没有好好看过这部分,一直都是用的DXT压缩图片,结果发现原来ios是不支持DXT的, 还不知道我项目那么卡是不是这部分引起的, 但愿是~这样应该就可以解决游戏在ios上只有6.8帧的问 ...

  10. Linux下清空文件的3种方法

    1.echo -n > test.log #-n选项可以去掉空行 2.cat /dev/null > test.log 3.truncate -s 0 test.log