Modelsim 网表仿真(加sdf延时)+ 后仿【入门简单教程】

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:

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

原文地址:https://blog.csdn.net/GTTTONG/article/details/124820519

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

上一篇 2023年06月16日 04:17
下一篇 2023年06月16日 04:18