记录一下verilog重复例化的两种方式

文章目录

      • 0 前言
      • 1 for循环方式例化方法
      • 2 数组的方式例化
      • 4 一些其他的技巧

0 前言

这段时间例化了挺多mem,过程中也了解到了一些新的东西,在这里记录一下

1 for循环方式例化方法

先给出 sub_module

module sub(
    input [7:0] din,
    output logic [7:0] dout
);
    assign dout = din;
endmodule

要将这个module分别例化成u_sub_0u_sub_1,并且每个都例化四次

for循环的实现方式如下

module top(
    input [8*4-1 : 0] din0, 
    input [8*4-1 : 0] din1,
    output logic [8*4-1 : 0] dout0,
    output logic [8*4-1 : 0] dout1
);
    genvar i;
    generate for(i=0; i<4; i++) begin:inst
        sub u_sub_0 (
            		//output
            		.dout(dout0[i*8 +: 8]),
            		//input
            		.din(din0[i*8 +: 8])
        			);
        
        sub u_sub_1 (
            		//output
            		.dout(dout1[i*8 +: 8]),
            		//input
            		.din(din1[i*8 +: 8])
        			);
    end
    endgenerate
endmodule

来看看例化后的效果

记录一下verilog重复例化的两种方式_第1张图片

可以看到,总共4组inst,每组inst中存在两个u_sub

接下来点开inst[0]中的u_sub_0,看看它的信号是什么样的

记录一下verilog重复例化的两种方式_第2张图片

依次点击,然后到shell界面粘贴内容

记录一下verilog重复例化的两种方式_第3张图片

此时可以清晰的看到,这个din信号是来自哪里,这也体现了,在begin后命名block的重要性

2 数组的方式例化

同样的 sub_module,同样的例化要求,这次改用数组的方式进行例化

module top(
	input [8*4-1 : 0] din0, 
    input [8*4-1 : 0] din1,
    output logic [8*4-1 : 0] dout0,
    output logic [8*4-1 : 0] dout1
);
    sub u_sub_0 (
    			//output
        		.dout(dout0),
        		//input
        		.din(din0)
    			);
    
    sub u_sub_1 (
    			//output
        		.dout(dout1),
        		//input
        		.din(din1)
    			);
endmodule

来看看这次的例化效果

记录一下verilog重复例化的两种方式_第4张图片

在打印出这种方式的层次化结构

记录一下verilog重复例化的两种方式_第5张图片

记录一下verilog重复例化的两种方式_第6张图片

同样有清晰的辨识效果

4 一些其他的技巧

对于二维数组而言,如果想在verdi中将二维数组展开,那么我们需要在dump波形是加上这句话

$fsdbDumpMDA;

这样就可以在verdi中展开二维数组

当一个数组范围比较大不方便分析,可以将数组进行分段,操作如下

记录一下verilog重复例化的两种方式_第7张图片

比如我要将32 bits位宽的din0信号分成8 bits位宽,可以这样设置

记录一下verilog重复例化的两种方式_第8张图片

效果如下

记录一下verilog重复例化的两种方式_第9张图片

实现了对信号的拆分

对于一些信号,在这种例化方式下拉信号的波形不是很容易(这个例子一时没想起来 >_<)

要拉出确定的波形可以这样操作

在波形界面按g,会弹出下面这个框

记录一下verilog重复例化的两种方式_第10张图片

让后需要哪个信号选中即可添加

记录一下verilog重复例化的两种方式_第11张图片

记录一下verilog重复例化的两种方式_第12张图片


你可能感兴趣的:(IC学习,fpga开发)