Перейти к содержанию
    

generate

Доброе время суток,

 

помогите решить проблему

 

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

 

спасибо

 

signal cnt_0, cnt_1, cnt_2, cnt_3, cnt_4, cnt_5, cnt_6 : std_logic_vector(3 downto 0);
    signal cin    : std_logic_vector(n-1 downto 0);
    
    component counter is port(
    reset, dir, clk        : in std_logic;
    carry                        : out std_logic;    
    resut                        : out std_logic_vector(3 downto 0));
    end component;
    
    
    begin
    
    
gen: for i in 0 to n-1 generate
    gen1: if (i = 0) generate
        begin
            i1: counter port map
                (reset => rst,
                 dir => dir,
                 clk => a,
                 resut => cnt(i),
                 carry => cin(0)
                );
        end generate gen1;
    
    gen2: if (i /= 0) generate
        begin
            i2: counter port map
                (reset => rst,
                 dir => dir,
                 clk => cin(i-1),
                 resut => cnt(i),
                 carry => cin(i)
                );
        end generate gen2;
end generate gen;

Изменено пользователем artur

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

type tCNT_ARRAY is array(n-1 downto 0) of std_logic_vector(3 downto 0);
signal cnt_array : tCNT_ARRAY := (others=>(others=>'0'));

....
resut => cnt_array(i),
....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

загвоздка состоит в том как описать чтобы каждый счетчик выдавал число на отельный вектор?

Делаю ровным счетом на оборот. Задаю на все выходы повторяющихся узлов один вектор длинной в n*m бит, где n- число узлов из generate, а m - длина вектора у одного узла. А дальше простая арифметика

result=> vector((i+1)*m-1 downto i*m) в случае когда i от 0 до n-1

или

result=> мусещк(i*m-1 downto (i-1)*m) когда счет от 1 до n.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

type tCNT_ARRAY is array(n-1 downto 0) of std_logic_vector(3 downto 0);
signal cnt_array : tCNT_ARRAY := (others=>(others=>'0'));

....
resut => cnt_array(i),
....

 

спасибо, работает!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...