找回密码
 注册
关于网站域名变更的通知
查看: 352|回复: 1
打印 上一主题 下一主题

转——generate之战

[复制链接]
  • TA的每日心情
    开心
    2019-11-20 15:00
  • 签到天数: 2 天

    [LV.1]初来乍到

    跳转到指定楼层
    1#
    发表于 2019-4-11 10:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

    EDA365欢迎您登录!

    您需要 登录 才可以下载或查看,没有帐号?注册

    x
    转——generate之战

    ; s( p0 L4 O* Z! c; G3 N
    & f- {& o; T9 p$ X( I4 I- R
    generate的主要功能就是对modulenetregparameterassignalwaystaskfunction进行复制,在这里,我们这主要是介绍generatefor的搭配使用。
    1.   generate_for
           使用generate_for的时候,必须要注意以下几点要求:
    l  必须使用genvar申明一个正整数变量,用作for的判断变量;
    l  for里面的内嵌语句,必须写在begin_end里面;
    l  begin_end需要一个名字。
                                   1:利用generate_for来复制assign
    其中
           generatefor(i=0; i<4; i=i+1)                                 
                  begin: gfor_block                                            
                         assigntemp = indata[2*i+1:2*i];      
                  end
           endgenerate
    等同于以下四句话:
           assigntemp[0] = indata[1:0];         
           assigntemp[1] = indata[3:2];         
           assigntemp[2] = indata[5:4];         
           assigntemp[3] = indata[7:6];         
    9 Z: ^& r( U, M5 u6 @, ~
      2:利用generate_for来复制always
    其中
           generatefor(i=0; i<4; i=i+1)                                 
                  begin: gfor_block  
                         always@ (*)
                                temp= indata[2*i+1:2*i];
                  end      
    endgenerate
    等同于以下八句话:
    always @ (*)
    temp[0] = indata[1:0];
    always @ (*)
    temp[1] = indata[3:2];
    always @ (*)
    temp[2] = indata[5:4];
    always @ (*)
    temp[3] = indata[7:6];

    7 z& q' W! |8 I0 Z
    ( r% }& c( F# c& C% B
    5 ?1 w* F6 h2 U% z
    4 a5 V( m3 o) x2 l5 ?- l, y
    7 s9 W$ w  M/ Y* ~5 @
      3:利用多个generate_for来实现复制模块

    - H& P/ v0 F+ v) T% B# g9 i3 E
    其中
           generatefor(i=0; i<4; i=i+1)                                 
                  begin: gfor_block_a                  
                         for(j=0;j<2; j=j+1)  
                                begin: gfor_block_b
                                       assigntemp[j] = indata[2*i+j];
                                end
                  end
           endgenerate
    8 q3 i5 d, `" x! _

    ( @. ]5 g; }2 |3 p3 i% R3 N
    等同于以下八句话:
           assigntemp[0] [0]= indata[0];
    assign temp[0] [1]=indata[1];        
           assigntemp[1] [0]= indata[2];        
           assigntemp[1] [0] = indata[3];              
           assigntemp[2] [0] = indata[4];              
           assigntemp[2] [1] = indata[5];      
           assigntemp[3] [0] = indata[6];      
    assign temp[3] [1]= indata[7];      
    4 y/ _' ?( O" }: F
    2.   generate_if
    generate_for是用于复制模块,而generate_if则是根据模块的参数(必须是常量)作为条件判断,来生产满足条件的电路。
      例子如下:
    上述代码生产的RTL电路图如下:
    5 R, k3 _  r( |) N! D
             当把WIDE改成等于12的时候,代码如下:
    当把WIDE改成等于12的时候,RTL电路图如下:
    ( O! h% c) ~0 {7 T2 }$ ^

    - o' t, o# J( ]3 n, u3 f/ X- d7 u) s4 U' H% |$ R
    3.   generate_case
    generate_case其实跟generate_if一样的,都是根据模块的参数(必须是常量)作为条件判断,来生产满足条件的电路,不同的地方仅仅是改成使用case 的语法而已。
             例子如下:
      其中RTL图如下:

    * [0 S/ Z. v* A4 \
      当把WIDE改成等于1的时候:
           WIDE等于1的时候,RTL图如下:
    ) m1 J& Z" e) i$ H$ D- P8 T( G9 y1 Q
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

    推荐内容上一条 /1 下一条

    EDA365公众号

    关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

    GMT+8, 2025-7-31 10:57 , Processed in 0.124023 second(s), 24 queries , Gzip On.

    深圳市墨知创新科技有限公司

    地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

    快速回复 返回顶部 返回列表