EDN首页   博客首页 用户登陆  |  注册

日志档案

发表于 2009/1/7 21:53:23

2

标签: FPGA  LCELL  

【原创】如何使组合逻辑节点不被优化

FPGA中一般采用同步时序设计,比如在延时设计中,一般都是设计成延时几个时钟周期,这样程序可移植性比较好,多次编译的结果也相同,不过有时候为了满足时序条件,比如建立时间,保持时间等不满足条件,需要适当做调整,调整的时间可能比一个时钟周期小,可能的一种方法是在节点处加入若干的BUFLCELL),引入延迟。不过这样做也有一个缺点是每次布局布线后延迟的时间会有细微的变化。默认情况下,QuartusII会优化掉无用的LCELL,比如如下的程序:

module demo(input a,input b,output out);

wire t1;

wire t2;

assign t1=a&b;

assign t2=t1;

assign out="t2";

endmodule

该程序的本意是将ab相与后经过t1t2后再输出,不过QuartusIIt1t2视为多余节点,在综合时优化了,产生如下结果:

about的延时为11.632ns,逻辑单元使用数为1

       为了保留用户有意加入的LCELL,以达到延时的目的,需要在程序中加入特定的指令以避免被优化,下面的程序基于Verilog-2001标准。关于在QuartusII中选择何种标准请参考我的另一篇文章【原创】Verilog-2001新增特性(实例分析)

       module demo(input a,input b,output out);

(* keep="1" *)wire t1;

(* keep="1" *)wire t2;

assign t1=a&b;

assign t2=t1;

assign out="t2";

endmodule

这里加入了指令(* keep="1" *),以防止将组合逻辑节点t1t2优化掉。综合后的RTL视图为:

点击看大图

此时about的延时为12.188ns,逻辑单元使用数为2

       可以看到,此时的t1t2没有被综合掉,并且使about的传输时延有少许增加。

 

系统分类: CPLD/FPGA   |   用户分类: FPGA   |   来源: 整理   |   【推荐给朋友】   |   【添加到收藏夹】

该用户于2009/1/7 21:53:29编辑过该文章

阅读(1395)  |  评论(3)  |  收藏(18)  |  举报  

投一票您将和博主都有获奖机会!

最新评论

  • zhaolipingyy

    2009/1/11 10:08:26

    有用。

  • ilove314

    2009/1/8 20:01:06

    是个好方法

  • chactor

    2009/1/7 22:37:35

    另一种加LCELL的方法是:在RTL视图或者Technology Map视图中直接选中某个节点,locate到Assignment editor中,选择Logic Cell insert,综合后,在Technology map视图中就会加入一个LCELL。