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

转——generate之战

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    转——generate之战

      H! b/ E. x# h6 \- y
    4 C  q+ E3 Z7 |, o/ |4 f1 k2 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];         

    8 D+ E2 s! T$ B/ I9 d8 N9 b+ D
      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];

    0 T& l  @% l/ ]8 J
      N# S  \7 g0 k2 _& Q1 j/ o
    ; S3 {) v9 `! l4 v. D! L2 E
    8 b/ v4 L2 @- R, Z6 Q3 e2 r
    - t# f8 @0 d4 [: D! X
      3:利用多个generate_for来实现复制模块
    1 g& k" ]/ U1 J- h. _( n9 D
    其中
           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
    6 p1 f' x( M. H# a& ^

    ) g: ]( N. ^, L% S9 y
    等同于以下八句话:
           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];      

    + f$ L! a$ \* ?. J: t* {+ d- e
    2.   generate_if
    generate_for是用于复制模块,而generate_if则是根据模块的参数(必须是常量)作为条件判断,来生产满足条件的电路。
      例子如下:
    上述代码生产的RTL电路图如下:

    . u$ c7 P  U! Q: N1 p
             当把WIDE改成等于12的时候,代码如下:
    当把WIDE改成等于12的时候,RTL电路图如下:

    , _1 O8 V/ H; U7 x6 b: u, W+ |; p) \4 W1 r9 I; }" k& ]
    ( z2 E0 @0 P$ j' }4 M
    3.   generate_case
    generate_case其实跟generate_if一样的,都是根据模块的参数(必须是常量)作为条件判断,来生产满足条件的电路,不同的地方仅仅是改成使用case 的语法而已。
             例子如下:
      其中RTL图如下:
    " @7 I( D: d! b! {" J6 }
      当把WIDE改成等于1的时候:
           WIDE等于1的时候,RTL图如下:

    * D: v  x! F) r+ ]8 e3 g2 ]
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-7-29 23:56 , Processed in 0.125000 second(s), 23 queries , Gzip On.

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

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

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