我有一个信号,这个信号是一个位向量(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;
答案 0 :(得分:1)
看起来您正在尝试根据计算结果更改硬件总线的大小?请记住,一旦您编译电路并将其刻录到FGPA,您的所有总线大小都是固定的。有可能让FPGA动态改变它的配置,但我猜想在很多时候都没有必要。而且我猜这也很棘手。
也许可以解释一下你究竟想要计算什么,也许我们可以采用不同的方式来做到这一点。
其他一些事情。我不是100%熟悉VHDL,但你需要双向端口(inout
s)?此外,您似乎没有使用BSD_BitComparator
;或端口X
,Y
或FZ
;或在您的体系结构描述中发出Z
信号。
答案 1 :(得分:0)
位向量的长度取决于 输入
n
,它不是固定的。
已修复,它是通用的。一旦编译并精心制作(即构建)FPGA,n
就会得到修复。这很好,你可以使用它来定义架构中的信号长度。
与其他受访者一样,我不确定您要对您的流程做些什么。您是否想要计算Z信号需要的长度?
如果是这样,你可以将它放在一个函数中,并使用Z:
声明中的函数 signal Z:std_logic_vector(calc_z_high_bit(n) downto 0);
答案 2 :(得分:0)
在编译/精化时修复泛型。变量可以在运行时更改。所以,你所追求的目标并不是你想要的方式。
如果要动态指定总线的某些位片,则需要将总线定义为最大的总线,然后使用计算出的n来复用所需的总线片。