VHDL中的信号和变量(顺序) - 问题

时间:2010-06-06 15:38:57

标签: vhdl fpga

我有一个信号,这个信号是一个位向量(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;

3 个答案:

答案 0 :(得分:1)

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

也许可以解释一下你究竟想要计算什么,也许我们可以采用不同的方式来做到这一点。

其他一些事情。我不是100%熟悉VHDL,但你需要双向端口(inout s)?此外,您似乎没有使用BSD_BitComparator;或端口XYFZ;或在您的体系结构描述中发出Z信号。

答案 1 :(得分:0)

  

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

已修复,它是通用的。一旦编译并精心制作(即构建)FPGA,n就会得到修复。这很好,你可以使用它来定义架构中的信号长度。

与其他受访者一样,我不确定您要对您的流程做些什么。您是否想要计算Z信号需要的长度?

如果是这样,你可以将它放在一个函数中,并使用Z:

声明中的函数

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

答案 2 :(得分:0)

在编译/精化时修复泛型。变量可以在运行时更改。所以,你所追求的目标并不是你想要的方式。

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