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

本文详细介绍了如何在ModelSim中进行Verilog代码的仿真,以及如何处理网表文件。重点讲解了网表文件的结构,如何配置使用工艺库进行仿真,并提到了如何避免编译混淆,通过设置DoNotCompile选项来选择仿真源。还涉及了如何添加延迟,包括GUI和CMD方式,以及SDF文件的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文件,因此方法都是一样的。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值