在vhdl中警告inmatrix乘法

时间:2016-01-15 21:05:13

标签: matrix vhdl multiplication

所以,我开始编写一个简单的4x4矩阵乘法代码。此时代码非常粗糙,我将在最后尝试改变,但我只想看看它是否有效。 它使用直接分配来自8位输入的矩阵的2位元素。类似地,通过连接所得矩阵的每行的4个元素来创建4个输出。您可以在下面看到代码。

我遇到的问题是,在运行代码之后,我会收到大约100个类型的警告 "有一个' |' X' |' W' |' Z' |' - &# 39;在算术操作数中,结果将是' X'(es)。" 我究竟做错了什么?变量A,B,temp或其他东西的初始化是否有问题?

FCGI_stdout

1 个答案:

答案 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')));
当进程执行第一次时,

只进行一次

您还没有发布您的测试平台,但我怀疑ab未在那里的声明中初始化。因此,当第一次执行该过程时,它们都是'U'。因此,temp被分配了一些/所有'X' es。在测试平台中为ab分配了一些有效值后,将再次执行该过程,但仍会为temp分配上次运行时的值并包含{{ 1}} es并将保留它们。

这不是你想要的矩阵乘法。您已经描述了一个组合过程,因此,您必须初始化过程中每次运行的所有变量。这样,它不依赖于先前的运行,因此,累积从'X' = 0开始。您已在此过程中正确分配tempA,但缺少B。只需在temp循环之前初始化它:

for

进行此更改后,您可以在变量声明中删除变量初始化。