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

 
 
14 страниц V  « < 8 9 10 11 12 > »   
Reply to this topicStart new topic
> "Схемотехнические трюки для ПЛИСоводов", создание аналога "Алгоритмические трюки для программистов"
des00
сообщение Feb 28 2012, 13:48
Сообщение #136


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(aosp @ Feb 28 2012, 07:20) *
Кто поделится мыслями или практикой реализации?

много раз обсуждалось, идея здесь



--------------------
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Feb 28 2012, 13:54
Сообщение #137


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(aosp @ Feb 28 2012, 17:20) *
Кто поделится мыслями или практикой реализации?

Самый быстрый – асинхронный; только при считывании из него кода, его надо остановить.
Еще быстрее - кольцевой на кодах Грея, но там потом надо пересчитывать в двоичную форму, и останавливать не надо. Последовательная цепочка на D-триггерах с кольцом обратной связи через инвертор.
Go to the top of the page
 
+Quote Post
des00
сообщение Feb 28 2012, 14:08
Сообщение #138


Вечный ламер
******

Группа: Модераторы
Сообщений: 7 248
Регистрация: 18-03-05
Из: Томск
Пользователь №: 3 453



Цитата(Serhiy_UA @ Feb 28 2012, 07:54) *
Самый быстрый – асинхронный; только при считывании из него кода, его надо остановить.
Еще быстрее - кольцевой на кодах Грея, но там потом надо пересчитывать в двоичную форму, и останавливать не надо.

ПСП счетчик и счетчик на кодах джонсона забыли %)


--------------------
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 2 2012, 06:39
Сообщение #139


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Собственно есть такая задача, думаю как раз для этого раздела: каждый такт выбираем индекс входных данных [15:0] для минимального значения (среди этих входных данных).
То есть имеем, например, такие входных данных: [порт№0] -> 7, [порт№1] -> 4, [порт№2] -> 1, [порт№3] -> 9,
И значит минимальный индекс будет 2 ([порт№2] -> 1). Значения произвольные (в смысле они не сортированы) и меняются каждый такт, выдавать индекс нужно тоже каждый такт.
Решение в лоб, говорит что максимум МГц так 35 можно для 16 входных 8битных портов на S6 (44 слоя комбинаторики). Ковыряние в умных книгах и поиск в инете выдал только такое заключение:
Цитата
If the arrays are unsorted then you must do a linear search to find the largest value in each.
. Что как то не радует.
Возможно у кого то появятся идеи как это сделать не прибегая к линейной проверке?
Go to the top of the page
 
+Quote Post
arexol
сообщение Oct 2 2012, 07:12
Сообщение #140


Местный
***

Группа: Свой
Сообщений: 317
Регистрация: 25-09-06
Пользователь №: 20 651



Цитата(Kuzmi4 @ Oct 2 2012, 09:39) *
Собственно есть такая задача, думаю как раз для этого раздела: каждый такт выбираем индекс входных данных [15:0] для минимального значения (среди этих входных данных).
То есть имеем, например, такие входных данных: [порт№0] -> 7, [порт№1] -> 4, [порт№2] -> 1, [порт№3] -> 9,
И значит минимальный индекс будет 2 ([порт№2] -> 1). Значения произвольные (в смысле они не сортированы) и меняются каждый такт, выдавать индекс нужно тоже каждый такт.
Решение в лоб, говорит что максимум МГц так 35 можно для 16 входных 8битных портов на S6 (44 слоя комбинаторики). Ковыряние в умных книгах и поиск в инете выдал только такое заключение: . Что как то не радует.
Возможно у кого то появятся идеи как это сделать не прибегая к линейной проверке?



Вроде вот такая регулярная структура родилась на вскидку (кружки это компараторы на больше - небыло сил бороться с виио sm.gif )

должно быть не более 16 уровней логики ... при 16 значениях
поправте если не прав




Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Oct 2 2012, 07:29
Сообщение #141


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Цитата(Kuzmi4 @ Oct 2 2012, 09:39) *
Возможно у кого то появятся идеи как это сделать не прибегая к линейной проверке?

1. пузырьковая сортировка на конвейере... Использовал при медианной фильтрации.
2. ассоциативный спецвычислитель...

Не понятно, что такое линейная проверка. Какое требуется быстродействие?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 2 2012, 08:01
Сообщение #142


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Данные для сравнения и вычисления индекса для минимальног опорта меняются каждый такт, то есть индекс нужно вычислять тоже за 1 такт. Желательно бы получить частоту хоть в 100МГц. Как вы понимаете, конвеер здесь не получится сделать.
Линейная проверка - это как в оригинале - берём и влоб перебираем/сравниваем все значения сразу.
Go to the top of the page
 
+Quote Post
ISK
сообщение Oct 2 2012, 08:09
Сообщение #143


Участник
*

Группа: Свой
Сообщений: 59
Регистрация: 9-06-05
Из: Киев
Пользователь №: 5 857



Так всё равно непонятно, почему нельзя сделать конвейер. Результат будет выдаваться тоже каждый такт, только с задержкой в N тактов. Или это критично?
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 2 2012, 08:15
Сообщение #144


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Может, это очевидно, но нужно сравнить сначала соседние пары - 8 сравнений параллельно, проходят те, что меньше. Затем среди новых кандидатов попарно проводить 4 сравнения. Затем 2 сравнения. И, наконец, одно, завершающее.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 2 2012, 08:25
Сообщение #145


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 ISK
это сравнение, только часть глобального вычисления - потому нужно считать каждый такт. Если есть уверенность что за N тактов не будет повторяющегся значения то можно и конвеер, но уверенности нет - изначально задано что данные идут произвольные и нет гарантии что они не будут одинаковые.

2 ViKo
arexol уже ранее предложил такую идею laughing.gif
Go to the top of the page
 
+Quote Post
ViKo
сообщение Oct 2 2012, 08:34
Сообщение #146


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Kuzmi4 @ Oct 2 2012, 11:25) *
2 ViKo
arexol уже ранее предложил такую идею laughing.gif

Наверное. Только на картинке это трудно понять. laughing.gif И... "16 уровней логики" wacko.gif
Go to the top of the page
 
+Quote Post
ISK
сообщение Oct 2 2012, 08:41
Сообщение #147


Участник
*

Группа: Свой
Сообщений: 59
Регистрация: 9-06-05
Из: Киев
Пользователь №: 5 857



Цитата(Kuzmi4 @ Oct 2 2012, 11:25) *
2 ISK
Если есть уверенность что за N тактов не будет повторяющегся значения то можно и конвеер, но уверенности нет - изначально задано что данные идут произвольные и нет гарантии что они не будут одинаковые.



Всё равно не могу понять, какое отношение имеет повторение/неповторение данных для конвейера. В упрощённом виде для этого достаточно поставить регистр после мультиплексора на каждом уровне вычислителя.
Go to the top of the page
 
+Quote Post
Serhiy_UA
сообщение Oct 2 2012, 08:47
Сообщение #148


Знающий
****

Группа: Свой
Сообщений: 721
Регистрация: 23-10-08
Из: next to Odessa
Пользователь №: 41 112



Хотя можно по arexol и ViKo...
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Oct 2 2012, 08:50
Сообщение #149


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 ISK
глобальная идеология там мутноватая, я сам не сразу въехал, но в 2х словах вот так оно выглядит:
приходят данные, делается их кодирование, параметр кодирования изменяется от 0 до 15, для каждого параметра - свой счётчик он считает общую длинну закодированных данных для своего К-параметра, высчитывается индекс счётчика с минимальной длинной, это индекс и будет К-параметр, который будет использоваться для кодирования следующих данных в следующем такте. Ну и так по кругу - адаптивный механизм. Потому находить минимальный индекс, когда значения могу повторяться нужно каждый такт.
Go to the top of the page
 
+Quote Post
ISK
сообщение Oct 2 2012, 09:32
Сообщение #150


Участник
*

Группа: Свой
Сообщений: 59
Регистрация: 9-06-05
Из: Киев
Пользователь №: 5 857



Была у меня похожая задача, на 100 МГц на циклоне 3 схема работала.

Код
        process (add_sub_res,point_cnt,cmp_res) begin        
            for j in 15 downto 0 loop
                for i in 15 downto 0 loop
                    if ((j = i) or (i > point_cnt)) then cmp_res(j)(i) <= '1';
                    elsif (j > point_cnt) then cmp_res(j)(i) <= '0';
                    else
                        if (j > i) then cmp_res(j)(i) <= not cmp_res(i)(j);
                        else
                            if (add_sub_res(j) < add_sub_res(i)) then cmp_res(j)(i) <= '1'; else cmp_res(j)(i) <= '0'; end if;
                        end if;
                    end if;
                end loop;
            end loop;
        end process;

        cmp_res_reg <= cmp_res;    

    --    process (cmp_res_reg) begin                    -- определение: единица, если все биты cmp_res(i) == единицы
          
and_loop:        for i in 0 to 15 generate
                      cmp_res_and(i) <=    cmp_res_reg(i)(0) and cmp_res_reg(i)(1) and cmp_res_reg(i)(2) and cmp_res_reg(i)(3) and cmp_res_reg(i)(4) and cmp_res_reg(i)(5) and cmp_res_reg(i)(6) and cmp_res_reg(i)(7) and
                            cmp_res_reg(i)(8) and cmp_res_reg(i)(9) and cmp_res_reg(i)(10) and cmp_res_reg(i)(11) and cmp_res_reg(i)(12) and cmp_res_reg(i)(13) and cmp_res_reg(i)(14) and cmp_res_reg(i)(15);                    
            --end loop;
        end generate;
        

s1: with cmp_res_and select
    point_find_result <= 0 when "0000000000000001",
                1 when     "0000000000000010",
                2 when    "0000000000000100",
                3 when    "0000000000001000",
                4 when    "0000000000010000",
                5 when    "0000000000100000",
                6 when    "0000000001000000",
                7 when    "0000000010000000",
                8 when    "0000000100000000",
                9 when    "0000001000000000",
                10 when    "0000010000000000",
                11 when    "0000100000000000",
                12 when    "0001000000000000",
                13 when    "0010000000000000",
                14 when    "0100000000000000",
                15 when others;
Go to the top of the page
 
+Quote Post

14 страниц V  « < 8 9 10 11 12 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 22:47
Рейтинг@Mail.ru


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