是否有一种在矩阵中设置一行值的简便方法?我正在寻找一种功能/程序类型的解决方案。
只是澄清一下,通过矩阵,我不是指一个数组数组,而是一个二维数组。
我设法使用以下方式阅读特定行:
function extract_row(matrix : matrix_type; row_index : natural) return row_type is
variable res : row_type (matrix'range(2));
begin
for i in res'range loop
res(i) := matrix(row, i);
end loop;
return res;
end function;
现在我需要一种方法来设置一个类似于如何在数组数组中设置子数组的方式:
signal x : array_of_rows_type(range_a)(range_b);
signal y : row_type(range_b);
x(0) <= y;
我意识到速记不是必需的,并且可以使用循环和生成来解决它,但我有很多地方需要这样做,而且保持清晰的代码(和我的理智)变得越来越困难。
对于那些想知道的人,我使用矩阵方法而不是数组数组的原因是因为我需要在具有不同范围的多个实体中重用该类型。
如果解决方案允许我在端口映射中使用它,那么奖励点(尽管我意识到这是不可能的,除非我完全误解了VHDL)。即:
port map (
row_type_outport => row_insert_solution(matrix, row)
)
答案 0 :(得分:0)
我没有你的类型,所以我无法编译它以确保它有效,但这可能会帮助你关闭。
function row_insert_solution(matrix : matrix_type;
row_insert : row_type;
row_index : natural
) return matrix_type is
variable res : matrix_type := matrix;
begin
for i in row_insert'range loop
res(row_index, i) := row_insert(i);
end loop;
return res;
end function;
答案 1 :(得分:0)
我似乎认识到extract_row
函数的代码。也许您可以调整在同一个包中给出的函数replace_matrix_column
?
function replace_matrix_column(
input_matrix: bit_matrix;
new_column: bit_vector;
column_index: integer
) return bit_matrix is
variable output: bit_matrix(input_matrix'range(1), input_matrix'range(2));
begin
for i in input_matrix'range(1) loop
for j in input_matrix'range(2) loop
if j = column_index then
output(i, j) := new_column(i);
else
output(i, j) := input_matrix(i, j);
end if;
end loop;
end loop;
return output;
end;
然后你可以这样称呼它:
x <= replace_matrix_row(x, y, 0);
或者,为了更清晰:
x <= replace_matrix_row(input_matrix => x, new_row => y, row_index => 0);