modelsim一般都是仿真verilog
也可以用于网表仿真。
网表是综合工具(Design compiler / Genus)对Verilog编译后生成的文件,也是 .v 的形式。
1、首先介绍一下什么是网表文件。以一个并转串的代码为例:P2S.v
下面是代码的verilog描述(节选)
module P2S(
p_data,
clk,
rst_n,
s_data,
data_valid
);
input [DATA_LENGTHS-1:0] p_data; // MSB is the flag of starting P2S
input clk;
input rst_n;
output s_data;
output data_valid;
/*
省略部分代码
*/
reg data_valid_d2;
always @(posedge clk or negedge rst_n)
if(!rst_n)
data_valid_d2 <= 0;
else
data_valid_d2 <= data_valid_d1;
assign s_data = data_buffer[0];
assign data_valid = data_valid_d2;
endmodule
下面是综合后生成的网表文件描述:
module P2S (
p_data,
clk,
rst_n,
s_data,
data_valid);
input [16:0] p_data;
input clk;
input rst_n;
output s_data;
output data_valid;
wire FE_OFN1_n280;
wire FE_OFN0_rst_n;
wire N11;
/*
省略部分代码
*/
wire [16:1] data_buffer;
BUHDLLX12 CTS_ccl_a_buf_00003 (.A(clk),
.Q(CTS_1));
BUHDLLX1 FE_OFC1_n280 (.A(n280),
.Q(FE_OFN1_n280));
BUHDLLX1 FE_OFC0_rst_n (.A(rst_n),
.Q(FE_OFN0_rst_n));
SDFRRQHDLLX0 count_16_reg_0_ (.C(CTS_1),
.D(N11),
.Q(count_16[0]),
.RN(rst_n),
.SD(n240),
.SE(n240));
SDFRRQHDLLX0 count_16_reg_1_ (.C(CTS_1),
.D(N12),
.Q(count_16[1]),
.RN(rst_n),
.SD(n240),
.SE(n240));
............
endmodule
可以看出,综合后的网表只包含标准单元。3个Buffer和2个Reg。标准单元的功能有工艺库指定。如代码中的SDFRRQHDLLX0标准单元,实际上相当于我们写的一个module。其时序和功能在库中的描述如下:
2、如何进行网表仿真:
其实网表的仿真和Verilog仿真实际上是一样的,只要我们有里面所有标准单元的描述,就可以成功编译。这就是工艺库,一般综合的库里面会有一个.v结尾的标准单元库描述。我们需要把这个库添加到Modelsim的工程里面。如下图:
将库文件添加到modelsim里即可。
3、一般情况下,我们都是事先建好一个project,仿真完verilog之后进行综合在仿真网表。如果project里有同一个模块的verilog描述和网表描述,如上述代码块1和代码块2,都是对P2S模块的描述,只是一个是verilog写的,一个是综合工具综合出来的。那么编译仿真的时候modelsim将会调用那个呢?我们需要怎么设置才能让其调用我们需要的呢?
右键verilog写的那个模块文件,选中 properties… 勾选 Do Not Compile即可,如下图:
这样Modelsim就会调用综合后的网表文件。
4、怎么加延时?
GUI:在启动仿真的时候,有个SDF选项:
点击add添加延时文件。
在 2 处选择延时文件(例如 : /…/user/p2s_1_98V_m40C.sdf), 3 处选择该延时文件对应的模块(例如 : /TB_TOP/top/p2s)。
记得勾选最下面的 Disable SDF warnnings和Reduce SDF errors to warnnings
CMD:文章来源:https://uudwc.com/A/9qOW
vsim -gui -novopt \
-sdftyp {/TB_TOP/top/p2s=/..../user/p2s_1_98V_m40C.sdf} \
-sdfnoerror -sdfnowarn work.TB_TOP
# -sdftyp 表示延时实在正常工作情况下综合得到的延时;
# 也可以指定-sdfmin/-sdfmax,表示在延时最快和延时最慢的条件下得到的延时文件,用以分析hold time和setup time。
注意:综合后的网表的延时不包括线延时,只有标准单元的延时,因此不能算后仿。
经过后端布局布线工具(ICC/innovus)所生成的延时文件才是最终的真实的延时,延时文件都是sdf文件,因此方法都是一样的。文章来源地址https://uudwc.com/A/9qOW