I'm trying to merge 2 string type's associative arrays with foreach() https://stackoverflow.com/a/60496838/20066803
module test;
bit [31:0] arrayA[string];
bit [31:0] arrayB[string];
bit [31:0] arrayC[string];
initial begin
arrayA["GOOD_PKT"]=7;
arrayA["BAD_PKT"]=9;
arrayB = '{"apple":5 , "orrange":6};
foreach(arrayA[i]) begin
arrayC[i] = arrayA[i];
$display("arrayC[%0s]=%h", i, arrayC[i]);
end
foreach(arrayC[i]) begin
arrayC[i] = arrayB[i];
$display("arrayC[%0s] = %0h", i, arrayC[i]);
end
/* This not work.
foreach(arrayC[i]) begin
arrayC[i] = arrayB[i](arrayC);
$display("arrayC[%0s] = %0h", i, arrayC[i]);
end
*/
/* This not work.
arrayC = {arrayA,arrayB};
*/
I got only 2 elements
arrayC[BAD_PKT]=00000009
arrayC[GOOD_PKT]=00000009
but I expected 4 elements
arrayC[BAD_PKT]=00000009
arrayC[GOOD_PKT]=00000009
arrayC[apple]=00000005
arrayC[orange]=00000006
How to merge 2 associative arrays with foreach() in systemverilog?
There is a bug in your code, the second foreach
use arrayC
try this:
foreach(arrayA[i]) begin
arrayC[i] = arrayA[i];
$display("arrayC[%0s]=%h", i, arrayC[i]);
end
foreach(arrayB[i]) begin
arrayC[i] = arrayB[i];
$display("arrayC[%0s] = %0h", i, arrayC[i]);
end