优化与防止被优化.docx

上传人:b****6 文档编号:15734253 上传时间:2023-07-07 格式:DOCX 页数:28 大小:241.04KB
下载 相关 举报
优化与防止被优化.docx_第1页
第1页 / 共28页
优化与防止被优化.docx_第2页
第2页 / 共28页
优化与防止被优化.docx_第3页
第3页 / 共28页
优化与防止被优化.docx_第4页
第4页 / 共28页
优化与防止被优化.docx_第5页
第5页 / 共28页
优化与防止被优化.docx_第6页
第6页 / 共28页
优化与防止被优化.docx_第7页
第7页 / 共28页
优化与防止被优化.docx_第8页
第8页 / 共28页
优化与防止被优化.docx_第9页
第9页 / 共28页
优化与防止被优化.docx_第10页
第10页 / 共28页
优化与防止被优化.docx_第11页
第11页 / 共28页
优化与防止被优化.docx_第12页
第12页 / 共28页
优化与防止被优化.docx_第13页
第13页 / 共28页
优化与防止被优化.docx_第14页
第14页 / 共28页
优化与防止被优化.docx_第15页
第15页 / 共28页
优化与防止被优化.docx_第16页
第16页 / 共28页
优化与防止被优化.docx_第17页
第17页 / 共28页
优化与防止被优化.docx_第18页
第18页 / 共28页
优化与防止被优化.docx_第19页
第19页 / 共28页
优化与防止被优化.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

优化与防止被优化.docx

《优化与防止被优化.docx》由会员分享,可在线阅读,更多相关《优化与防止被优化.docx(28页珍藏版)》请在冰点文库上搜索。

优化与防止被优化.docx

优化与防止被优化

注册登录

*论坛

•搜索

•帮助

•导航

CEEZCSSoCVista--IC/FPGA设计家园?

30分钟必答-无限制提问专区?

设计未完成阶段进行面积评估如何防止被优化

|l2下一页

返回列表回复发帖

1#

打印

字体大小:

tT

mentorOO

超级通吃版主

□发表于2009-11-809:

48|只看该作者

设计未完成阶段进行面积评估如何防止被优化

(本文来自anthonyyi的来信。

请大家一起来解答。

为了对整个设计进行性能和面积的评估

在模块尚未全部完成的阶段进入FPGA综合阶段

在顶层设计中instance了所有已完成的模块

但这些模块中有的由于后续模块没有完成,其输出悬空,即没有load

在Synplify下使用Syn_noprune属性

发现在compile阶段能保留上述模块,其RTLview显示模块存在

在map之后观测Technologyview发现上述模块已经被优化掉

只剩下输入端口,且无drive

故综合报告无实际意义和参考价值

想请教在如何不改变顶层模块的输出管脚而使综合保留上述无输出的模块

个人想到一种,用syn_probe将输出netprobe出来,但这样会有风险

因为综合工具似乎只会保留这些与该输出有关的逻辑而优化掉其他的部分

而且该步骤没有进行实战确认:

本主题由admin于2009-12-207:

56力卩入精华

收藏分享评分

回复引用

订阅TOP

2#

£3发表于2009-11-810:

04|只看该作者

我想可以参考一下下面的转载内容

提问:

我使用的是synplifypro综合verilog语言,例化了一个BUF,在综合结果里也看到了这个BUF,

mentorOO

超级通

吃版主

但是在MAP是这个BUF还是被优化掉了,请问用什么方法将这个BUF保留下来?

解答:

在这个BUF两端的信号线上加上下面的属性一一

wirebufin/*synthesissyn_keep=1xc_props="X"*/;

wirebufout/*synthesissyn_keep=1xc_props="X"*/;

解释下:

1、syn_keep=1就是保留这个信号线,是它成为一个instance(synplify的),然后就可以对

它添加XILINX的约束属性;

2、xc_props=""是synplify为XILINX保留留的约束属性,可以透传到ISE的实现中去,从

而约束实现过程。

3、“X”属性是在MAP时识别的KEEP属性,如果用XST综合就只需要在信号线的两端加上X属性就可以透传到MAP中去。

但是synplify并不能识别,因此需要通过以上的方法将X属性透传

至UMAP中去。

回复引用

TOP

3#

□发表于2009-11-810:

04|只看该作者

如果是VHDL可以这样来解决

LIBRARYieee;

USEieee.std_logic_1164.all;

USEieee.std_logic_arith.all;

librarysynplify;

USEsynplify.attributes.all;

ENTITYdelay_cellIS

PORT(

mentorOO

超级通

吃版主

dly_in:

INSTD_LOGIC;

dly_out:

OUTSTD_LOGIC

);

ENDdelay_cell;

ARCHITECTUREarchiOFdelay_cellIS

--attributesyn_keep:

boolean;

SIGNALtemp01,temp02,temp03,temp04,temp05,temp06,temp07,temp08,temp09,temp10,temp11,temp12,temp13:

STD_LOGIC;

attributesyn_keepoftemp01,temp02,temp03,temp04,temp05,temp06,temp07,temp08,temp09,temp10,temp11,temp12,temp13:

signalistrue;

attributexc_propsoftemp01,temp02,temp03,temp04,temp05,temp06,temp07,temp08,temp09,temp10,temp11,temp12,temp13:

signalis"X";

BEGIN

temp01<=NOTdly_in;

temp02<=NOTtemp01;

temp03<=NOTtemp02;

temp04<=NOTtemp03;

temp05<=NOTtemp04;

temp06<=NOTtemp05;

temp07<=NOTtemp06;

temp08<=NOTtemp07;

temp09<=NOTtemp08;

tempIO<=NOTtemp09;templl<=NOTtempIO;

temp12<=NOTtempll;temp13<=NOTtemp12;dly_out<=NOTtemp13;

ENDarchi;

回复引用

TOP

vimicro

通吃版

4#

□发表于2009-11-820:

38|只看该作者

对一些buffer设置setdonttouch

回复引用

TOP

5#

□发表于2009-11-821:

42|只看该作者

以下是我根据mentor00老师的帖子进行实验的一个小例子

anthonyyi

通吃版

moduletest(clk,rst_n);

inputclk;

inputrst_n;

counteru_counter/*synthesissyn_noprune=1*/(

.clk(clk),

.rst_n(rst_n),

.p0(p0),

.p1(p1)

);

endmodule

modulecounter(

clk,

rst_n,

p0,

p1

);

inputclk;

inputrst_n;

outputp0;

outputp1;

wirep0/*synthesissyn_keep=1xc_props="X"*/;

wirep1;

reg[3:

0]counter;

assignp0=counter[2];

assignp1=counter[3];

always@(posedgeclkornegedgerst_n)

if(!

rst_n)

counter<=4'h0;

else

counter<=counter+1'b1;

endmodule

从综合的结果来看,发现添加syn_keep和xc_props的P0端口在mapping之后保留

其technologyview可以看到综合结果包括三个寄存器counter[0:

2]

未添加约束的counter[3]被优化掉了

按照这种方法需要将所有需要保存模块输出加上syn_keep属性

此外根据synplify最新版本的提示

@W:

FX350|xc_propsattributeisobsoleteandwillnotbesupportedinafuture

release.Pleaseusetheattributesinsidethexc_propsstringdirectlyor

generics/parametersiftheyareavailable

这个属性要改成个什么样子呢

回复引用

TOP

anthonyyi

通吃版

6#

□发表于2009-11-821:

43|只看该作者

原帖由vimicro于2009-11-820:

38发表©

对一些buffer设置setdonttouch

HowcanIdoit,whereisthekeypositionformetofindthebuffer

回复引用

TOP

□发表于2009-11-822:

03|只看该作者

此外由于希望在整个评估过程中尽量不改动模块级的RTL代码

anthonyyi

通吃版主

顶层的syn_noprone属性一定需要添加

否则compile都过不了,直接就被优化掉了

而且syn_keep的属性必须放在wire定义的那行,放在assign的位置也会被优化掉

并且由于syn_keep属性只能针对wire类型

必须从rtlview中找到对应的线添加到sdc文件中才行:

请大家一起试试,看看有没有别的方法

回复引用

mentor00

超级通吃版

TOP

8#

乙发表于2009-11-907:

45|只看该作者

谢谢anthony的及时反馈与共享。

回复引用

TOP

9#

ineedpower

管理员

□发表于2009-11-909:

46|只看该作者

原帖由anthonyyi于2009-11-822:

03

发表

而且syn_keep的属性必须放在wire定义的那行,放在

assign的位置也会被优化掉

一直以来都以为对于wire和reg类型都可以使用的

回复引用

TOP

anthonyyi

通吃版主

#

10

□发表于2009-11-910:

20|只看该作者

寄存器用syn_preserve

syn_preserveensuresthatregistersarenotoptimizedaway

回复发帖

#

11

ineedpower□发表于2009-11-910:

37|只看该作者

官理员4-Verilog开发仿真»SynplifySCOPE属性高手的秘密

©©曲

可惜好像还是tobecontinued

回复引用

TOP

12#

vimicro

通吃版

0右金

□发表于2009-11-1109:

57|只看该作者

回复6#的帖子

不太明白你的意思我的意思是直接在例化的modulename上面设

对了我是说DC是ASIC流程,FPGA上面我不知道能否这样做

shared]Verilog综合时wire与reg如何防止被优化

(1)

2009-11-2914:

14

Abstract

撰寫Verilog時,雖然每個module都會先用ModelSim或QuartusII自帶的simulator仿真過,但真的將每個module合併時,一些不可預期的『run-time』

 

問題可能才一一浮現,這時得靠SignalTapII來幫忙debug。

Introduction

使用環境:

QuartusII8.0+DE2-70(CycloneIIEP2C70F896C6N)

實際使用SignalTapII時,會發現有些reg與wire可以觀察,有些又無法觀察,

在(原創)如何使用SignalTapII觀察reg值?

(ICDesign)(QuartusII)

(SignalTapII)(Verilog)中,我利用將reg接到topmodule的方式來觀察reg,雖然可行,但老實說並不是很好的方式。

當初有網友發表評論,說這是因為reg

被QuartusII優化掉不見了,導致無法使用SignalTapII觀察,本文整理出完整的reg與wire觀察方法。

觀察reg

如同(原創)如何使用SignalTapII觀察reg值?

(ICDesign)(QuartusII)(SignalTapII)(Verilog)的範例,我再重複一次。

SSignalTapll_register_not_preserve.v/Verilog

1/*

2(C)OOMusou2008

3

3Filename:

SignalTapll_register_not_preserve.v

4Compiler:

QuartusII8.0

5Description:

DemohowtopreserveregisterwithSingalTapII

6Release:

10/17/20081.0

7*/

9

8moduleSignalTapll_register_not_preserve(

9inputiCLK,

10inputiRST_N

11);

14

12reg[3:

0]cnt;

16

13always@(posedgeiCLK,negedgeiRST_N)begin

14if(!

iRST_N)

15cnt<=4'h0;

16else

17cnt<=cnt+4'h1;

18end

23

19endmodule

這是個很簡單的計數器,我故意讓cnt不做output,而想用SignalTapII去觀

察ent這個reg的值

ent都是0,顯然不合理,表示SignalTapII無法captureent這個reg的值為什麼會這樣呢?

若我們將SignalTapII拿掉,重新用QuartusII編譯,觀察其compilation

report,顯示register為0。

flawStatus

Successful-FriOct172213:

132008

Quartu^HVersion

GOBuild21505/29/2008SJFullVersion

RevisionName

SigrialTapH_regiater_nGt_preseive

Top-levelEntityName

SignalTdpH_regitter_notjareserve

Family

CycloneU

Device

EP2C70FS96C6

TimingModels

Final

Mettimingrequirements

Yes

Totallogicelements-

0/68.416(0%)

TotalcoonbinationaHunclions

口edicatedlogicreaisteri

0/68,416(0%]

Io^aTregister^

Totalpins

■^7622(<1%)

Totalvirtualpins

0

TotalmemQtybits

0/1,15^000(0%)

EmbeddedMultiplier9-bitelements

0/300(0%)

TotalPLL$

0/4(096)

觀察RTLViewer的合成結果,真的沒有register!

!

iRST_NfGhJD)l>

iCLK(GND)r>

這證明了一件事情,QuartusII在合成時,發現ent並沒有需要output,而自動最佳化不合成ent,導致SignalTapII無法觀察reg,不過有時為了debug

方便,我們就是想觀察這種reg,有辦法讓QuartusII暫時不要啟動最佳化嗎?

使用SynthesisAttribute避免最佳化

SignalTapll_register_preserve.v/Verilog

1/*

2(C)OOMusou2008

3

3Filename:

SignalTapll_register_preserve.v

4Compiler:

QuartusII8.0

5Description:

DemohowtopreserveregisterinSignalTapII

6Release:

10/17/20081.0

7*/

10moduleSignalTapII_register_preserve(

11inputiCLK,

12inputiRST_N

13)

14

15reg[3:

0]cnt/*synthesisnoprune*/;

16

17always@(posedgeiCLK,negedgeiRST_N)begin

18if(!

iRST_N)

19cnt<=4'h0;

20else

21cnt<=cnt+4'h1;

22end

23

24endmodule

15行

reg[3:

0]cnt/*synthesisnoprune*/;

多了/*synthesisnoprune*/這個synthesisattribute,指示QuartusII不要

對cnt做最佳化,保留此register以供SignalTapII觀察,注意必須寫在分

號前面,不能如下寫在分號後面。

reg[3:

0]cnt;/*synthesisnoprune*///錯!

!

編譯後,SignalTapII就能順利的觀察到cnt的值!

!

重點是不需改topmodule的interface,只需對想觀察的reg加上synthesisattribute即可。

 

SQuartusH-D:

/r0Clare/DE2-70/Q80/Signa[Tapn_regi5ter_pre5en/e/Signal

FileEditViewProjectProcessinqToolsWindow

■Acquisitioninprogress

 

y>SOFManagei:

log.2005/10/1723:

02.05#0

Cl

国Data皋ISetup

HierarchyDisplay

XrrataLoc:

171♦SignalTap11_registei_pies6rve

■—|SIauto_signaltap_0

團auto_signaltap_0ForHelp,pressFl

QuartusII也支援Verilog2001的語法

1/*

2(C)OOMusou2008

3

3Filename:

SignalTapll_register_preserve.v

4Compiler:

QuartusII8.0

5Description:

DemohowtopreserveregisterinSignalTapII

6Release:

10/17/20081.0

7*/

9

8moduleSignalTapII_register_preserve(

9inputiCLK,

10inputiRST_N

11);

14

12//Verilog2001

13//(*noprune*)reg[3:

0]cnt;

17

14always@(posedgeiCLK,negedgeiRST_N)begin

15if(!

iRST_N)

16ent<=4'hO;

17else

18ent<=ent+4'h1;

19end

24

20endmodule

16行

(*noprune*)reg[3:

0]ent;

這是Verilog2001的語法,QuartusII8.0也能看得懂。

放在

若希望整個module的reg都不被最佳化,可將synthesisattributemodule。

1/*

2(C)OOMusou2008http:

//oomusou.enblogs.eom

3

3Filename:

SignalTapll_register_preserve.v

4Compiler:

QuartusII8.0

5Deseription:

DemohowtopreserveregisterinSignalTapII

6Release:

10/17/20081.0

7*/

9

8moduleSignalTapII_register_preserve(

9inputiCLK,

10inputiRST_N

11)/*synthesisnoprune*/;

14

12reg[3:

0]ent;

16

13always@(posedgeiCLK,negedgeiRST_N)begin

14if(!

iRST_N)

15ent<=4'h0;

16else

17ent<=ent+4'h1;

18end

23

19endmodule

13行

moduleSignalTapll_register_preserve(

inputiCLK,

inputiRST_N

〃);

)/*synthesisnoprune*/;

將/*synthesisnoprune*/放在module,這樣整個module的reg將不被最佳化,

不用再一一指定。

另外一個與reg相關的SynthesisAttribute:

/*synthesispreserve*/

跟reg相關的attribute/*synthesispreserve*/

,除了/*synthesisnoprune*/可用,還有一個

可用,兩者的差異在於:

/*synthesisnoprune*/

避免QuartusII優化掉沒output的reg。

/*synthesispreserve*/reg。

避免QuartusII將reg優化為常數,或者合併重複的

也可以使用Verilog2001

的寫法

//(*preserve*)reg[3:

0]cnt;

或者整個module的寫法

moduleSignalTapll_register_preserve(inputiCLK,inputiRST_N

)/*synthesispreserve*/;

类别:

Ic|转贴卜"|添加到搜藏|分享到i贴吧|浏览(329)|评论(0)ffi

上一篇:

[shared]Ubuntu下安装Cadenee51...下一篇:

[shared]Verilog综合时wire与reg...mi最近读者:

kimi169coffindidijadekung盖塔Qpeipeiha

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2