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

Posted

技术标签:

【中文标题】VHDL 中的信号和变量(顺序) - 问题【英文标题】:Signals and Variables in VHDL (order) - Problem 【发布时间】:2010-06-06 15:38:56 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

也许可以解释一下您要计算的确切内容,也许我们可以想出一种不同的方法。

其他一些事情。我不是 100% 熟悉 VHDL,但您需要双向端口(@98​​7654321@s)吗?另外,您似乎没有使用BSD_BitComparator;或端口XYFZ;或在您的架构描述中发送信号Z

【讨论】:

【参考方案2】:

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

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

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

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

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

以上是关于VHDL 中的信号和变量(顺序) - 问题的主要内容,如果未能解决你的问题,请参考以下文章

FPGA学习笔记03-VHDL语法基础-信号代入语句

VHDL:当涉及时钟信号时,多路复用器输出不跟随输入

VHDL 信号分配没有明显的原因不起作用

VHDL顶层原理图里输出信号仿真时出现Node missing source是啥意思?好像是输出信号里的定义有点问题

用VHDL设计正弦信号发生器

用VHDL设计信号发生器