sv绿皮书第三版练习
eg0210
initial begin
bit [31:0] src[5], dst[5];
for (int i = 0; i < $size(src); i++) src[i] = i; //初始化src数组
foreach (dst[j]) dst[j] = src[j] * 2; // dst 的值是 src 的两倍
end
仿真代码
initial begin
bit [31:0] src[5], dst[5];
for (int i = 0; i < $size(src); i++) src[i] = i; //初始化src数组
foreach (dst[j]) dst[j] = src[j] * 2; // dst 的值是 src 的两倍
$display("%p",src); //'{0,1,2,3}
$display("%p",dst); //'{0,1,2,3}
end
仿真结果
'{'h0, 'h1, 'h2, 'h3, 'h4}
'{'h0, 'h2, 'h4, 'h6, 'h8}
eg0211
int md[2][3] = '{'{0, 1, 2}, '{3, 4, 5}};
initial begin
$display("Initial value:");
foreach (md[i, j]) // 这是正确的语法格式
$display("md[%0d][%0d] = %0d", i, j, md[i][j]);
$display("New value:");
// 对最后三个元素重复赋值5
md = '{'{9, 8, 7}, '{3{5}}};
foreach (md[i, j]) // 这是正确的语法格式
$display("md[%0d][%0d] = %0d", i, j, md[i][j]);
end
仿真结果
eg0212
Initial value:
md[0][0] = 0
md[0][1] = 1
md[0][2] = 2
md[1][0] = 3
md[1][1] = 4
md[1][2] = 5
New value:
md[0][0] = 9
md[0][1] = 8
md[0][2] = 7
md[1][0] = 5
md[1][1] = 5
md[1][2] = 5
eg0213
仿真代码
initial begin
byte twoD[4][6];
foreach (twoD[i, j]) twoD[i][j] = i * 10 + j;
foreach (twoD[i]) begin // 遍历第一个维度
$write("%2d:", i);
foreach (twoD[, j]) // 遍历第二个维度
$write("%3d", twoD[i][j]);
$display;
end
end
仿真结果
0: 0 1 2 3 4 5
1: 10 11 12 13 14 15
2: 20 21 22 23 24 25
3: 30 31 32 33 34 35