Verilog基础 generate语句

#学习记录#

1  generate语句简述

generate语句通常用在RTL设计中,常用于编写许多结构相似但参数不同的赋值语句或者逻辑语句,方便参数化模块的生成。下面以一个格雷码转二进制编码的电路为例加以说明。

module gray2bin1(bin,gray);
parameter SIZE = 8;
output[SIZE-1:0]bin;
input [SIZE-1:0]gray;
assign bin[0] = ^gray[7:0];
assign bin[1] = ^gray[7:1];
assign bin[2] = ^gray[7:2];
assign bin[3] = ^gray[7:3];
assign bin[4] = ^gray[7:4];
assign bin[5] = ^gray[7:5];
assign bin[6] = ^gray[7:6];
assign bin[7] = ^gray[7:7];
endmodule

上述代码共有8条assign语句,可以用generate-for语句进行简化,如下:

module gray2bin1(bin,gray);
parameter SIZE = 8;
output[SIZE-1:0]bin;
input [SIZE-1:0]gray;
genvar i;
generate
    for(i=0;i<=SIZE;i=i+1)begin:bit
        assign bin[i]=^gray[SIZE-1:i];
    end
endgenerate
endmodule

2  generate语句主要有3种结构

2.1  generate for循环语句

genvar i;
generate
    for(i=0;i<=SIZE;i=i+1)
        begin:名字
            循环执行代码;
        end
endgenerate

(1) generate for语句需要定义循环索引,关键字为genvar,索引名字任意。索引可放于generate外部或者是generate内部,当定义在generate外部时可以被多个generate使用,但可能引起冲突,最好一个generate对应一个索引。

(2) for循环结构括号内的变量只能是常量(genvar、parameter、lacalparam)。

(3) begin后边若不跟名字可能会报错,名字任意。

2.2  generate if条件分支语句

generate
    if(condition1)begin:name
        code1;
    end
else if(condition2)begin:name
        code2;
    end
else begin:name
    code;
end
endgenerate

(1) 不需要索引变量。

(2) condition中的参数必须是parameter或者是lacalparam类型。

2.3  generate case条件分支语句

generate
    case condition1:begin:name
        code1;
    end
    case condition2:begin:name
        code2;
    end
    default:begin:name
        code;
    end
    endcase
endgenerate

(1) 不需要索引变量。

(2) condition中的参数必须是parameter或者是lacalparam类型。

参考文献

[1] generate在verilog中的用法.xswznb.P10 generate在verilog中的用法_哔哩哔哩_bilibili

[2] Verilog语法之generate(for、if、case).C.V-Pupil.Verilog语法之generate (for、 if、 case)用法_generate if_C.V-Pupil的博客-CSDN博客

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值