Сигналы и переменные в VHDL (порядок) - Проблема - PullRequest
0 голосов
/ 06 июня 2010

У меня есть сигнал, и этот сигнал является битовым вектором (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 ]

1 голос
/ 07 июня 2010

Похоже, вы пытаетесь изменить размер аппаратной шины в зависимости от результата расчета? Помните, что как только вы скомпилируете схему и запишете ее на FGPA, все ваши размеры шины будут фиксированными. Возможно, что FPGA изменит конфигурацию на лету, но я думаю, что это не нужно много времени. И я думаю, что это тоже сложно.

Возможно, объясните, что именно вы пытаетесь вычислить, и, возможно, мы можем придумать другой способ сделать это.

Несколько других вещей. Я не на 100% знаком с VHDL, но вам нужны двунаправленные порты (inout с)? Кроме того, вы, похоже, не используете BSD_BitComparator; или порты X, Y или FZ; или сигнал Z в описании вашей архитектуры.

0 голосов
/ 02 августа 2010

Универсальный исправляется во время компиляции / разработки.Переменная может измениться во время выполнения.Таким образом, то, к чему вы стремитесь, напрямую невозможно, так как вы пытаетесь это сделать.

Если вы хотите динамически указать какой-либо битовый фрагмент шины, вам нужно определить, что шина является самой большойэто может быть, а затем использовать ваш вычисленный n, чтобы мультиплексировать нужный вам фрагмент шины.

0 голосов
/ 08 июня 2010

Длина битового вектора зависит от вход n, он не зафиксирован.

Это исправлено , это общее. После того, как вы скомпилировали и разработали (т.е. создали) FPGA, n исправляется. И это нормально, вы можете использовать это для определения длин сигналов в архитектуре.

Как и в случае с другим респондентом, я не уверен, что вы пытаетесь сделать со своим процессом. Вы пытаетесь рассчитать длину, которой должен быть Z-сигнал?

Если это так, вы можете поместить его в функцию и использовать функцию в объявлении Z:

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

...