原创 For...Loop可综合性分析

2009-1-11 23:23 4864 4 5 分类: FPGA/CPLD

VHDL的循环语句有三种:for循环、while循环和无限循环loop  end loop,实际上,1oop…end  loop可以看作是循环条件永远为真的while循环。在行为综合中,循环语句的处理是极其复杂的。


在寄存器级进行综合,要求for循环的上下界必须是静态已知,否则是不可综合的。VHDL定义了nextexit语句来中断循环的正常执行,现在的综合工具都可以处理这两种语言结构。


注意:FOR ...GENERATE FOR...LOOP的语句不同,在FOR ...GENERATE语句中所列举的是并行处理语句。因此,内部语句不是按书写顺序执行的,而是并行执行的,这样的语句中就不能使用EXIT语句和NEXT语句。


通过综合下面这段代码来了解FOR...LOOP的可综合性:


entity loop_syn
is


 
port (


    sel  
: in  std_logic_vector(1 downto
0);


    din  
: in  std_logic_vector(15 downto
0);


    dout 
: out std_logic_vector(3 downto 0);


    din1 
: in  std_logic_vector(15 downto
0);


    dout1 : out std_logic_vector(3 downto
0));


end
loop_syn;


 


architecture synlogic of loop_syn
is


 


begin  -- synlogic


 


 
loop1 : process (din, sel)


 
begin  -- process
loop1


    for i in 0 to 3 loop


      dout <= din((i+1)*4 - 1 downto
i*4);


      exit when sel = i;


    end loop; 
-- i


 
end process loop1;


 


 
case1 : process (din1, sel)


 
begin  -- process
case1


    case (sel) is


      when "00" =>


        dout1 <= din1(3 downto
0);


      when "01" =>


        dout1 <= din1(7 downto
4);


      when "10" =>


        dout1 <= din1(11 downto
8);


      when "11" =>


        dout1 <= din1(15 downto
12);


      when others =>


        dout1 <= (others =>
'0');


    end case;


 
end process case1;


end
synlogic;


case1loop1用两种不同的风格描述了两种相同功能,首先我们可以观察一下RTL Viewer,如下图:


点击开大图
case1
进程就是4四选一的复选器,分别对应输出“dout1(0)”“dout1(1)”“dout1(2)”“dout1(3)”


loop1进程由于使用了for...loop,所以对应RTL Viewer就比较复杂,但是我们可以基本猜出QuartusII综合器的综合流程:


1、有4等于比较器,分别对应Sel输入和常量值;


2dout(*)输出由4二选一的复选器,选择信号是4等于比较器的输出;


有一个有趣的现象(RTL Viewer)sel = 0时,对应的din[0..3]输出至dout的逻辑延迟最长,sel = 1次之,依次类推...。到次为止,可能很多人会觉得loop1进程所需要的逻辑门比case1的逻辑门多很多,最开始我也这么认为,但是不着急,我们接着看一下Technology Viewer,如下图:

点击开大图

我们可以看到“sel din dout”“sel din1 dout1”都是各用了8LUT,逻辑延迟均为2LUT。由此我们知道:RTL Viewer从某种程度上告诉我们综合器的从RTL代码到基本算法及逻辑单元的算法行为,而Technology Viewer告诉我们综合器的逻辑行为到LC单元的映射。所以,从RTL Viewer判断一个VHDL的描述代码的好坏是有误的。造成上述现象的原因,从我个人的观点,一个4输入LUT,可以描述任何4输入的逻辑表达式,如果用与或门描述各种4输入表达式,相对应的门数和逻辑延迟都不尽相同,但是当最小单元是LUT,则相对应的门数和逻辑延迟都可以认为是一致的,这也许就是ASICFPGA的最根本的区别。


最终我的观点是:


1、利用for...loop对设计FPGA IP的参数化配置是有很大帮助的,但是如果在ASIC设计中,设计需求已经确定,for...loop的描述由于其综合过程的复杂性,应该尽量避免;


2、当一个组合逻辑的输入数确定,不论用何种描述方式,其所用的LUT数也就基本确定,这应该是由聪明的综合器决定的;


3RTL Viewer可以帮助你理解你设计的算法,Technology Viewer查看LUT的工作方式。


希望大家一起讨论,及时指证文章中的错误及不易理解的地方,谢谢!





PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

coyoo 2009-5-22 12:19

还有 for loop循环中一个时钟周期完成。
相关推荐阅读
用户1122702 2015-12-20 21:29
在Emacs中应用Ctags
适宜人群 具备Emacs使用经验的程序员 什么是Tag? Tag,即标记,记录了程序重要信息(如函数、变量、宏定义等)的位置和相应的文件,方便程序浏览器进行跳转。 ...
用户1122702 2015-12-13 22:23
可综合的SystemVerilog:命名空间
关键名词解释: 编译单元(compilation unit):SystemVerilog 源代码的集合 编译单元域(compilation-unit scope):即编...
用户1122702 2015-12-13 22:15
可综合的SystemVerilog:参数化函数/任务
在Verilog中,参数化模块被广泛应用。参数可重新定义保证模块的可配置性及可复用性。但是,函数及任务并无法像模块一样被参数化,减弱了Verilog的描述化能力。 SystemVer...
用户1122702 2010-10-28 11:34
基于SOPC下RapidIO调试方法
RapidIO的一个难点在于地址转换方法,即将远端的Memory映射到当前Avalon-MM总线,所以地址需要一个转换过程——Local Avalon-MM<->RapidIO Addr&...
用户1122702 2010-08-24 14:22
西行重庆
八月初时离开生活并工作四年的深圳,来到求学四年的重庆。已经过去三周时间,对自己的将来也随之变的不可琢磨。重庆的生活水平并不如想象的低,除了房价不像沿海城市高企,其他诸如公共交通,生活日常用品基本都是一...
用户1122702 2010-07-07 18:05
Tcl用后感
                    Tcl用后感 (by Wind330)    Tcl - Tool Command Language近期做了一个Tcl脚本用于Modelsim仿真,完成如下功能...
EE直播间
更多
我要评论
1
4
关闭 站长推荐上一条 /3 下一条