Verilog中generate语句

  1. generate语句的概念:
    生成语句主要用在对矢量、数组多个位或元素操作、连续assign赋值、重复例化模块等使用,主要是为了简化代码。
  2. 语法:
  • 定义genvar,作为generate种的循环变量,可以在外面也可以在里面。

  • generate语句中定义的for语句,必须要有begin,为后续增加标签做准备。

  • begin必须要有名称,也就是必须要有标签,因为标签会作为generate循环的实例名称。

  • 可以使用在generate语句中的类型主要有:
    module(模块)
    UDP(用户自定义原语)
    门级原语
    连续赋值语句
    initial或always语句

  • 主要有三种语句:
    // generate循环语句 for

    // generate 条件语句 if

    // generate 分支语句 case

    // 嵌套的generate语句

  1. generate在综合后本质上就是赋值了多个类似的电路,每个电路操作不同的数据,genvar i一般就是指重复的次数,在综合后该变量不在电路中出现。 举个例子:

    assign:
    module test(bin,gray);
    parameter SIZE=3;
    output [SIZE-1:0] bin;
    input [SIZE-1:0] gray;
    genvar i; //genvar i也可以定义到generate语句里面
    generate
    for(i=0;i<SIZE;i=i+1)
    begin:bit
    assign bin[i]=^gray[SIZE-1:i];
    end
    endgenerate
    endmodule
    等同于下面语句
    assign bin[0]=^gray[SIZE-1:0];
    assign bin[1]=^gray[SIZE-1:1];
    assign bin[2]=^gray[SIZE-1:2];

    always:
    generate
    genvar i;
    for(i=0;i<SIZE;i=i+1)
    begin:shifter
    always@(posedge clk)
    shifter[i]<=(i==0)?din:shifter[i-1];
    end
    endgenerate
    相当于
    always@(posedge clk)
    shifter[0]<=din;
    always@(posedge clk)
    shifter[1]<=shifter[0];
    always@(posedge clk)
    shifter[2]<=shifter[1];
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值