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 

posted on 2012-09-15 06:59  单向度的人  阅读(598)  评论(0编辑  收藏  举报

导航