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

转——generate之战

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

    [LV.1]初来乍到

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

    EDA365欢迎您登录!

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

    x
    转——generate之战

    6 B. C  z3 I* W- C9 V/ ~5 M# E- ^$ c6 j+ v  |* }; s
    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 F8 S: T1 |9 J/ k7 v3 _3 y
      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];

    1 }# U' ]: T! `( f0 N; s7 @# V4 z: x# K
    4 ~3 n* Y1 N. f( h

    : _+ w2 }  V6 G6 J% J: y/ U- ?. {: p/ V% `1 b  ?6 j8 f" l1 N. d
      3:利用多个generate_for来实现复制模块

    * ~* N! V( C. S+ I
    其中
           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
    + t" j$ j7 w5 j+ _4 z5 ]

    % [) N2 E3 g8 r- ?% w
    等同于以下八句话:
           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];      

      m) F+ c0 {, d0 w: @* @
    2.   generate_if
    generate_for是用于复制模块,而generate_if则是根据模块的参数(必须是常量)作为条件判断,来生产满足条件的电路。
      例子如下:
    上述代码生产的RTL电路图如下:

    . {8 V0 b& F6 E3 {6 c* k
             当把WIDE改成等于12的时候,代码如下:
    当把WIDE改成等于12的时候,RTL电路图如下:
    # G# i+ ~9 [! H* ]
    6 j2 L- G- k+ u- L6 r( ?" s4 |- z
    , d1 d5 ^. r6 x$ ~! H
    3.   generate_case
    generate_case其实跟generate_if一样的,都是根据模块的参数(必须是常量)作为条件判断,来生产满足条件的电路,不同的地方仅仅是改成使用case 的语法而已。
             例子如下:
      其中RTL图如下:
    9 O0 \4 P2 w$ j% W, q
      当把WIDE改成等于1的时候:
           WIDE等于1的时候,RTL图如下:
    0 Q; m# q$ q! T( l
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    关闭

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

    EDA365公众号

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

    GMT+8, 2025-10-9 11:00 , Processed in 0.140625 second(s), 23 queries , Gzip On.

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

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

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