0

我有一个信号,这个信号是一个位向量(Z)。位向量的长度取决于输入 n,它不是固定的。为了找到长度,我必须进行一些计算。我可以在定义变量后定义一个信号吗?当我这样做时,它给了我错误。它工作正常如果我在变量之前保留信号(如下所示)..但我不想要那个.. Z 的长度取决于变量的计算。解决办法是什么 ?

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;


entity BSD_Full_Comp is
        Generic (n:integer:=8);
        Port(X, Y : inout  std_logic_vector(n-1 downto 0);
             FZ : out std_logic_vector(1 downto 0));
end BSD_Full_Comp;

architecture struct of BSD_Full_Comp is


Component BSD_BitComparator
    Port ( Ai_1  : inout  STD_LOGIC; Ai_0  : inout  STD_LOGIC;
           Bi_1  : inout  STD_LOGIC; Bi_0  : inout  STD_LOGIC;
           S1 : out  STD_LOGIC; S0 : out  STD_LOGIC
      );
END Component;



Signal Z : std_logic_vector(2*n-3 downto 0);



begin

    ass : process

Variable length : integer := n;
Variable pow : integer :=0 ;
Variable ZS : integer :=0;
begin
while length /= 0 loop
length := length/2;
pow := pow+1;
end loop;
length := 2 ** pow;
ZS := length - n;

wait;

    end process;



end struct;
4

3 回答 3

1

看起来您正在尝试根据计算结果更改硬件总线的大小?请记住,一旦您编译电路并将其烧录到 FGPA 上,您的所有总线尺寸都是固定的。FPGA 可以即时更改其配置,但我想很多时候都没有必要。而且我猜这也很棘手。

也许解释一下你到底想计算什么,也许我们可以想出一种不同的方法。

其他几件事。我不是 100% 熟悉 VHDL,但你需要双向端口(inouts)吗?此外,您似乎没有使用BSD_BitComparator; 或端口XYFZ;或Z在您的架构描述中发出信号。

于 2010-06-07T17:43:33.920 回答
0

位向量的长度取决于输入n,它不是固定的。

固定的,它是通用的。一旦您编译和详细说明(即构建)FPGA,它就n被修复了。这很好,您可以使用它来定义架构中信号的长度。

与其他受访者一样,我不确定您要如何处理您的流程。您是否尝试计算 Z 信号所需的长度?

如果是这样,你可以把它放在一个函数中,并在 Z 的声明中使用该函数:

signal Z:std_logic_vector(calc_z_high_bit(n) downto 0);

于 2010-06-08T15:13:53.077 回答
0

泛型在编译/细化时固定。变量可以在运行时更改。因此,您的目标并非直接可能,而是您尝试实现的方式。

如果要动态指定总线的某些位片,则需要将总线定义为最大的,然后使用计算出的 n 来复用所需的总线片。

于 2010-08-01T20:47:32.527 回答