system Verilog 中generate语法的灵活使用、例化多个模块

一、generate语法举例

        generate

                genvar i;

                 for(i=0;i<=9;i=i+1) begin

                        assign D[i] = A[i];

                end

        endgenerate

上述语句实现将assign D[0]=A[0];assign D[1]=A[1];assign D[2]=A[2];·····assign D[9]=A[9];

二、generate的灵活使用

        当赋值语句较多,且具备一定的规律时,可以灵活使用取整 /、取余 %等语句实现。

举例如下:

module map(
    input  [63:0] A [3:0],//A0、A1、A2、A3的[3:0]为无用数值,不考虑
    
    output [11:0] D [19:0] //ADC0通道A采样点0-19

    );

//下述代码拆分如下:
//assign D[0] = A[3][63:52];
//assign D[1] = A[2][63:52];
//assign D[2] = A[1][63:52];
//assign D[3] = A[0][63:52];
//assign D[4] = A[3][51:40];
//assign D[5] = A[2][51:40];
//assign D[6] = A[1][51:40];
//assign D[7] = A[0][51:40];
//..........
//assign D[18] = A[1][15:4];
//assign D[19] = A[0][15:4];

//上述代码可以简化写为:
generate
    genvar j;
    for(j=0;j<=19;j=j+1) begin
        //从帧格式中划分出每个点(12bits),其中"/"为向下取整操作,%为取余
        assign D[j] = A[3-j%4][(63-12*(j/4)) : (52-12*(j/4))];
    end
endgenerate
              
endmodule

        正常情况下赋值语句越多,使用generate越能使程序清晰明了。

三、generate例化多个模块

        设计一个加法器IP,8个输入A和8个输入B,输出8个C,利用generate模块减少代码量,使代码更加清晰明了。示例如下:

module TOP(
    input CLK,//输入时钟
    
    input [15:0] A [7:0],//输入8个16bits数据
    input [15:0] B [7:0],//输入8个16bits数据
    
    output [15:0] S [7:0]//输出8个16bits数据  
    );
    
    
//模块例化
genvar index;
generate
    for(index=0; index<8; index=index+1) //例化8个模块
    begin:  exam//块名称
        adder adder_inst (
          .A(A[index]),      // input wire [15 : 0] A
          .B(B[index]),      // input wire [15 : 0] B
          .CLK(CLK),  // input wire CLK
          .S(S[index])      // output wire [15 : 0] S
        );
    end
endgenerate
    
    
    
endmodule

        TOP模块在工程中例化形式如下,可以看到成功例化了8个加法器IP核。

         其RTL图如下,可以看到结果符合预期,同时例化了8个输入A与8个输入B相加,分别输出给8个C。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值