Штабскапитан Овечкин 0 18 января, 2014 Опубликовано 18 января, 2014 · Жалоба Чтобы можно было назначать на них сигналы в цикле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 18 января, 2014 Опубликовано 18 января, 2014 · Жалоба бился в свое время, но был послан, в итоге входные - выходные порты я сделал огромным одномерным вектором размера число_векторов * размер_вектора. В цикле их и заасийнил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Dimidrol 0 18 января, 2014 Опубликовано 18 января, 2014 · Жалоба Если я правильно понял, то можно и очень просто. Нужно объявить свой многомерный тип в package, и подключать его к каждому файлу где он будет использован. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 19 января, 2014 Опубликовано 19 января, 2014 · Жалоба Если я правильно понял, то можно и очень просто. Нужно объявить свой многомерный тип в package, и подключать его к каждому файлу где он будет использован. более того, можно объявить тип многомерного вектора, без ограничения размера и подставлять размер по месту, беря его например из параметра. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 19 января, 2014 Опубликовано 19 января, 2014 · Жалоба ISE и Verilog мне написали что входные - выходные порты не могут быть массивами. Может я его не так понял, или может это касается только верилога? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 19 января, 2014 Опубликовано 19 января, 2014 · Жалоба ISE и Verilog мне написали что входные - выходные порты не могут быть массивами. И правильно сделали. Verilog не имеет такой конструкции. Используйте более свежий SystemVerilog, там это есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Golikov 0 19 января, 2014 Опубликовано 19 января, 2014 · Жалоба а понятно... ну я не бедствую, массив векторов - суть длинный вектор, это все вопрос представления разница в индексах против [i*size -: size] Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Bad0512 2 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба И правильно сделали. Verilog не имеет такой конструкции. Используйте более свежий SystemVerilog, там это есть. Если речь идёт об ISE, то там этого (поддержки SV) никогда не было и уже не будет. Но эта проблема тоже решаема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Штабскапитан Овечкин 0 20 января, 2014 Опубликовано 20 января, 2014 (изменено) · Жалоба Бодрый день всем. Всех категорически благодарю за отвеы. Сабжевую задачу, кажется, решил. Не хочется заводить новую тему, поэтому попрошу вашей помощи в этой. В первую очередь обращаюсь к тем, у кого под рукой имеется XILINX ISE. Пожалуйста, посмотрите, что не так в коде. library IEEE; Library UNISIM; use UNISIM.vcomponents.all; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use UNISIM.vcomponents.all; package vector10x10 is type vect10 is array(9 downto 0) of std_logic_vector(9 downto 0); type vect10x10 is array(integer range 9 downto 0) of std_logic_vector(9 downto 0); end vector10x10; library IEEE; Library UNISIM; use UNISIM.vcomponents.all; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; use UNISIM.vcomponents.all; use vector10x10.all; entity ADC_147 is port( generator_p,generator_n:in std_logic; clkout_p,clkout_n: out std_logic_vector(9 downto 0); clkFromADC_p,clkFromADC_n: in std_logic_vector(9 downto 0); adc10in_p ,adc10in_n:in vect10x10; adc10out:out vect10x10 ); end ADC_147; architecture Behavioral of ADC_147 is signal clk:std_logic; signal tmp1, counter, ADCclk : std_logic_vector(9 downto 0); signal tmp : std_logic_vector(15 downto 0); signal input, average :vect10x10; begin process begin if clk'event and clk = '1' then counter <= counter+1; end if; end process; IBUFDS_inst : IBUFDS port map ( O => clk, I => generator_p, IB => generator_n ); qwe: for x in 9 downto 0 generate clkTO : OBUFDS port map ( O => clkout_p(x), OB => clkout_n(x), I => counter(1) ); clkFROM : IBUFDS port map ( O => ADCclk(x), I => clkFromADC_p(x), IB => clkFromADC_n(x) ); ewq: for y in 9 downto 0 generate inputs: IBUFDS port map ( O => input(x)(y), I => adc10in_p(x)(y), IB => adc10in_n(x)(y) ); end generate; process variable st: integer:=0; begin if ADCclk(x)'event and ADCclk(x) = '1' then st:=st+1; if st=64 then average(x) <= tmp(15 downto 6); st:=0; tmp <= (others => '0'); else tmp <= tmp + not input(x); end if; end if; end process; end generate; adc10out <= average; end Behavioral; Синтезатор утверждает, что Multi-source на сигнале tmp. При этом, если убрать последнюю строку, (adc10out <= average;), синтез проходит успешно. Не могу понять, каким образом эта строка портит сигнал tmp. И как вытащить наружу результат, полученный в процессе. Изменено 20 января, 2014 пользователем Штабскапитан Овечкин Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dworfik 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба При этом, если убрать последнюю строку, (adc10out <= average;), синтез проходит успешно. Ну конечно проходит, ведь синтезатор выкидывает весь неиспользуемый код. И дело сдесь скорее в generate. Я сомневаюсь, что там так просто можно писать tmp сигналы, скорее уж variable. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gin 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба более того, можно объявить тип многомерного вектора, без ограничения размера и подставлять размер по месту, беря его например из параметра. Удобная вещь, жаль, что Моделсим такое не поддерживает Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timmy 1 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба Сигнал tmp надо задекларировать внутри generate блока. Когда он снаружи, то его пытаются параллельно изменять несколько экземпляров generate, и, естественно, получается плохо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Штабскапитан Овечкин 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба Сигнал tmp надо задекларировать внутри generate блока. Когда он снаружи, то его пытаются параллельно изменять несколько экземпляров generate, и, естественно, получается плохо. Timmy, благодарю душевно!!! Кажется, полегчало!!! :beer: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 20 января, 2014 Опубликовано 20 января, 2014 · Жалоба Если речь идёт об ISE, то там этого (поддержки SV) никогда не было и уже не будет. Не было не в ISE, а в XST. Но им синтезировать, в общем то, никто насильно не заставляет.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться