2010-06-06 2 views
0

У меня есть сигнал, и этот сигнал является битвектором (Z). Длина битвектора зависит от входа n, он не фиксирован. Чтобы найти длину, я должен выполнить некоторые вычисления. Могу ли я определить сигнал после определения переменных? Это дает мне ошибки, когда я это делаю. Он работает нормально. Если я сохраняю сигнал перед переменными (это то, что показано ниже) .. но я не хочу этого .. длина Z зависит от вычислений переменных. Каково решение ?Сигналы и переменные в VHDL (заказ) - Проблема

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

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

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

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

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

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

1

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

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

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

0

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

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

Смежные вопросы