所以,我开始编写一个简单的4x4矩阵乘法代码。此时代码非常粗糙,我将在最后尝试改变,但我只想看看它是否有效。 它使用直接分配来自8位输入的矩阵的2位元素。类似地,通过连接所得矩阵的每行的4个元素来创建4个输出。您可以在下面看到代码。
我遇到的问题是,在运行代码之后,我会收到大约100个类型的警告 "有一个' |' X' |' W' |' Z' |' - &# 39;在算术操作数中,结果将是' X'(es)。" 我究竟做错了什么?变量A,B,temp或其他东西的初始化是否有问题?
FCGI_stdout
答案 0 :(得分:0)
问题是这些初始化是在进程中的变量声明
VARIABLE A : matrix_2b_4x4 := (others => (others => (others => '0')));
VARIABLE B : matrix_2b_4x4 := (others => (others => (others => '0')));
VARIABLE temp : matrix_4b_4x4 := (others => (others => (others => '0')));
当进程执行第一次时,只进行一次 。
您还没有发布您的测试平台,但我怀疑a
和b
未在那里的声明中初始化。因此,当第一次执行该过程时,它们都是'U'
。因此,temp
被分配了一些/所有'X'
es。在测试平台中为a
和b
分配了一些有效值后,将再次执行该过程,但仍会为temp
分配上次运行时的值并包含{{ 1}} es并将保留它们。
这不是你想要的矩阵乘法。您已经描述了一个组合过程,因此,您必须初始化过程中每次运行的所有变量。这样,它不依赖于先前的运行,因此,累积从'X'
= 0开始。您已在此过程中正确分配temp
和A
,但缺少B
。只需在temp
循环之前初始化它:
for
进行此更改后,您可以在变量声明中删除变量初始化。