0前言这段时间例化了挺多mem,过程中也了解到了一些新的东西,在这里记录一下
1for循环方式例化方法先给出sub_module
modulesub(input[7:0]din,outputlogic[7:0]dout);assigndout=din;module
要将这个module分别例化成u_sub_0和u_sub_1,并且每个都例化四次
for循环的实现方式如下
moduletop(input[8*4-1:0]din0,input[8*4-1:0]din1,outputlogic[8*4-1:0]dout0,outputlogic[8*4-1:0]dout1);genvari;generatefor(i=0;i4;i++)begin:instsubu_sub_0(//(dout0[i*8+:8]),//(din0[i*8+:8]));subu_sub_1(//(dout1[i*8+:8]),//(din1[i*8+:8]));generatemodule
来看看例化后的效果

可以看到,总共4组inst,每组inst中存在两个u_sub
接下来点开inst[0]中的u_sub_0,看看它的信号是什么样的
此时可以清晰的看到,这个din信号是来自哪里,这也体现了,在begin后命名block的重要性
2数组的方式例化同样的sub_module,同样的例化要求,这次改用数组的方式进行例化
moduletop(input[8*4-1:0]din0,input[8*4-1:0]din1,outputlogic[8*4-1:0]dout0,outputlogic[8*4-1:0]dout1);subu_sub_0(//(dout0),//(din0));subu_sub_1(//(dout1),//(din1));module
来看看这次的例化效果
在打印出这种方式的层次化结构
同样有清晰的辨识效果
4一些其他的技巧对于二维数组而言,如果想在verdi中将二维数组展开,那么我们需要在dump波形是加上这句话
$fsdbDumpMDA;
这样就可以在verdi中展开二维数组
当一个数组范围比较大不方便分析,可以将数组进行分段,操作如下
比如我要将32bits位宽的din0信号分成8bits位宽,可以这样设置
效果如下
实现了对信号的拆分
对于一些信号,在这种例化方式下拉信号的波形不是很容易(这个例子一时没想起来_)
要拉出确定的波形可以这样操作
在波形界面按g,会弹出下面这个框
让后需要哪个信号选中即可添加