реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> generate
artur
сообщение Apr 14 2017, 20:34
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 11-09-15
Пользователь №: 88 369



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

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

имеется н-число счетчиков которые соеденены последовательно, каждый счетчик выдает свое актуальное число на отдельный вектор, чтобы не писать кучу текста хочу решить эту проблему при помоши "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 - Apr 14 2017, 20:36
Go to the top of the page
 
+Quote Post
dm.pogrebnoy
сообщение Apr 14 2017, 21:34
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 704
Регистрация: 11-04-07
Пользователь №: 26 933



Код
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),
....


--------------------
Go to the top of the page
 
+Quote Post
Александр77
сообщение Apr 15 2017, 09:03
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 554
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(artur @ Apr 14 2017, 23:34) *
загвоздка состоит в том как описать чтобы каждый счетчик выдавал число на отельный вектор?

Делаю ровным счетом на оборот. Задаю на все выходы повторяющихся узлов один вектор длинной в 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.
Go to the top of the page
 
+Quote Post
artur
сообщение Apr 15 2017, 12:24
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 11-09-15
Пользователь №: 88 369



Цитата(dm.pogrebnoy @ Apr 14 2017, 23:34) *
Код
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),
....


спасибо, работает!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2017 - 14:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016