zoukankan      html  css  js  c++  java
  • mips core仿真

    mips core simulation

    1. RTL 设计

    遵照MIPS五级流水(IF, ID, EX, MEM, WB)体系结构进行相应的RTL设计。

    包含ROM(或者I cache, 在IF_stage),regfile,RAM(或者是D cache,在MEM_stage)。 

    2.  仿真

    Xilinx的memory interface 可以分为三种:intereface, coregen, primitive

    三种形式的可控性由低到高,interface 是auto-infer出来的,coregen是使用 IP tool来创建,primitive是直接使用相应的module primitive 来得到。

    相应的三种方式的平台移动性是由高到低。

    这里就interface 和coregen两种方式谈谈。

    a. interface

     在使用这种方式的时候,顶层的verilog 采用readmemb从预编译好的程序二进制文件中读取数据。 

    $readmemb("http://www.cnblogs.com/bench/mips_16_core_top/test1.prog",uut.IF_stage_inst.imem.rom);

    b. 如果是使用coregen的方式生成rom

    其中就会涉及coe file的编写。.coe 文件的格式如下。

    ; Sample initialization file for a
    ; 32-bit wide by 16 deep RAM(这是注释说明性文字)
    memory_initialization_radix = 16;(2,10,16,分别表示2进制,10进制,16进制)
    memory_initialization_vector =
    0, 1, 2, 3, 4, 5, 6, 7, (中间分号隔开)

    8, 9, A, B, C, D, E, F;(最后用“;”结尾) 

    这里分别使用了 memory_initialization_radix 和 memory_initialization_vector来作为radix value 和data value的关键词。

    reference: http://www.xilinx.com/itp/xilinx10/isehelp/cgn_r_coe_file_syntax.htm 

    像是波形生成一般可以使用matlab来产生,当然,如果是编译过的程序二进制文件。也可以编写perl或python脚本来进行批处理。

     不过在综合的过程中,需要注意的是应该在Implement> Translate> Process Properties下面设置Macro Search Path,找到生成IP的路径。否则便会报出ERROR:NgdBuild:604的错误(reference)。

    3. 评注

    a. MIPS core post layout sim没有意义,重要的是资源分析, timing/power analysis

    和Multiplier的post-layout不同,MIPS core的顶层如下

    // Instantiate the Unit Under Test (UUT)
    mips_16_core_top uut (
    .clk(clk), 
    .rst(rst), 
    .pc(pc)

    ); 

    只能是控制clk, rst, pc。并不能得到很有意义的结果,并且在modelsim下面,(add wave sim:/mips_16_core_top_tb_0_v/uut/*)uut下面的信号也并没有很强的逻辑关联。于此不同,

    Multiplier Multiplier_U(.rst(rst), .clk(clk), .multiplier_in(multiplier), .multiplicand_in(multiplicand), .product(product)) ;

    却能很好地反映信号关系。 这也是层次化设计testbench,自底向上逐层验证模块的验证思想所在。

    b.  memory有关的验证

    在验证方法学中,和memory有关验证有两种方式,一种是frontdoor,消耗仿真时间,一种是backdoor不消耗仿真时间。两种方式的区别在于,前者是按照时序往memory中进行数据设置,后者是直接强制设置。

    c. defs. package

    在验证方法学中,一般会加入package file来进行一些宏定义对仿真验证进行控制,或者对设计参数进行调整。

    而在这里的从仿真到综合的统一设计中,也可以加入宏定义进行控制,极大地方便设计。例如

    in def file 

    `define SIMULATION_MODE

    in src file

    `ifdef SIMULATION MODE

    XXX

    `endif

    OR

    `ifndef SIMULATION_MODE

    XX

    `endif 

  • 相关阅读:
    Tree UVA
    stringstream的使用
    Trees on the level UVA
    strchr和strstr函数
    sscanf的用法
    Dropping Balls UVA
    Boxes in a Line UVA
    Broken Keyboard (a.k.a. Beiju Text) UVA
    Matrix Chain Multiplication (堆栈)
    出栈次序
  • 原文地址:https://www.cnblogs.com/chenrui/p/2685936.html
Copyright © 2011-2022 走看看