agate 0 December 11, 2012 Posted December 11, 2012 · Report post agate, тот же алгоритм на VHDL чуть выше, результат синтеза - 3 уровня логики, Симплифай для 6 виртекса, 500МГц. Подскажите, как вы получаете 2 уровня? Вы правы - не будет 2 Quote Share this post Link to post Share on other sites More sharing options...
amelyutin9 0 December 11, 2012 Posted December 11, 2012 · Report post agate, тот же алгоритм на VHDL чуть выше, результат синтеза - 3 уровня логики, Симплифай для 6 виртекса, 500МГц. Подскажите, как вы получаете 2 уровня? Gold777 Умножитель в поле Галу был сделан путем генерации кода в Матлабе по неким хитрым матрицам. Делаось по статье "Low Complexity Bit Parallel Architectures for Polynomial Basis Multiplication over GF(2m)" То есть на HDL прямо описывается комбинационная логика на всех этих и-или-не этот провод воткнуть сюда.Думаю, вы тоже делали этим путем. Но была попытка решить эту задачу "в лоб". поскольку умножитель есть просто комбинационная схема, то можно сгенерить таблицу истинности. Эта таблица содержала 2^16 строк, что конечно оказалось непосильной задачей для синтезатора. Даже 6000 строк таблицы истинности оказались чрезмерными. А вот 256 строк очень даже. Вы вот как делали блок нахождения обратного к данному члену? Тоже использовал эту статью, только она подходит не для всех примитивных полиномов. Создал блочную память на 256 ячеек со значениями обратных элементов, деление соответственно делал через умножение на элемент из этой таблицы. Но думаю можно и без блочной памяти обойти и сделать деление на логике. Есть статьи по реализации делителей на плис. Quote Share this post Link to post Share on other sites More sharing options...
Muscat 0 December 12, 2012 Posted December 12, 2012 · Report post Ну если поставлена задачи реализации кода Рида-Соломона только в виде коэффицентов (K,N), то можно выбрать хороший полином. Там ведь рассмотрено довольно много разных полиномов. Касаемо Рида-Соломона, там метод "отдать на откуп синтезатор" хорошо работает в двух местах. 1) Делитель реализуется таблицей истинности, я генерил этот код в Матлабе, но понятное дело можно сделать это из любой другой среды, где вы моделируете свои алгоритмы. begin rez<= "10000000" when inp="10000000" else "01110001" when inp="01000000" else ................. "01000000" when inp="01110001" else "00000000"; (кому очень надо - пришлю полный код). Получаем комбинационную схему 8 входов, 8 выходов. Критикал-пасом она не стала, так что делать эту схему на ROM мне кажется нецелесообразно. 2) "Умножитель на константу" - используем полный умножитель, в качестве одного входа указана константа. Синтезатор это чует и значительно оптимизирует этот полный умножитель до простой схемы. То есть рисовать ручками схему конкретного константного умножителя (как это делалось во время схемного ввода) нет никакого смысла. Quote Share this post Link to post Share on other sites More sharing options...
amelyutin9 0 December 13, 2012 Posted December 13, 2012 · Report post 1) Делитель реализуется таблицей истинности, я генерил этот код в Матлабе, но понятное дело можно сделать это из любой другой среды, где вы моделируете свои алгоритмы. begin rez<= "10000000" when inp="10000000" else "01110001" when inp="01000000" else ................. "01000000" when inp="01110001" else "00000000"; (кому очень надо - пришлю полный код). Получаем комбинационную схему 8 входов, 8 выходов. Критикал-пасом она не стала, так что делать эту схему на ROM мне кажется нецелесообразно. Видимо вы говорите про таблицу обратных элементов, а не о самом делителе. Возможно ваш метод тоже годится, но учитывая, что в декодере и так основная нагрузка ложится на логику я реализовал на блочной памяти. Для циклона 3 занимает 1 блок M9k. В добавок если декодер не один, а например 16 или 64 параллельно работающих. А вот для Рида-Соломона GF(2^10) все-таки лучше через ROM т.к. логики сожрет немерянно. Quote Share this post Link to post Share on other sites More sharing options...
Muscat 0 December 13, 2012 Posted December 13, 2012 · Report post Я признаться по прежнему не понимаю, в чем преимущество делать на ROM памяти такие операции. Элемент на нахождение обратного -> триггер -> полный умножитель. Теряем за счет такого конвейера 1 такт. Для РС это уж точно не смертельно. Критической логикой все равно остается полный умножитель, а не нахождение обратного. Это справедливо и для 10 разрядов и для 12. Если вы уже потратили гору ресурсов на полные умножители, то какой смысл экономить их на одном несчастном (1/a) и использовать вместо него другие, более дефицитные ресурсы? И такое решение для параллельный декодеров как раз будет даже лучше, поскольку логики в ПЛИСе всяко больше, чем памяти. Подскажите, а в какую ПЛИС у вас влезает 64 декодера РС на 10 разрядов? Quote Share this post Link to post Share on other sites More sharing options...
amelyutin9 0 December 13, 2012 Posted December 13, 2012 (edited) · Report post Я признаться по прежнему не понимаю, в чем преимущество делать на ROM памяти такие операции. Элемент на нахождение обратного -> триггер -> полный умножитель. Теряем за счет такого конвейера 1 такт. Для РС это уж точно не смертельно. Критической логикой все равно остается полный умножитель, а не нахождение обратного. Это справедливо и для 10 разрядов и для 12. Если вы уже потратили гору ресурсов на полные умножители, то какой смысл экономить их на одном несчастном (1/a) и использовать вместо него другие, более дефицитные ресурсы? И такое решение для параллельный декодеров как раз будет даже лучше, поскольку логики в ПЛИСе всяко больше, чем памяти. Подскажите, а в какую ПЛИС у вас влезает 64 декодера РС на 10 разрядов? У меня проект 16 декодеров на 10 разряда, должен влезть в плис циклон 3 (EP3C80) на 80000 логических элементов и около 300 элементов М9K, под декодер где-то 50-60% логики может немного больше. Память можно использовать почти всю, поэтому для меня дефицитной является логика. Точно не скажу сейчас сколько занимает т.к. еще не до конца доделал. Сколько логики займет ваш делитесь для поля GF(2^8),GF(2^10)?Что-то мне кажется таблица 1024 элемента по 10 бит для GF(2^10) много логики съест, хотя возможно я ошибаюсь. Вы на каком плисе свой декодер делали? Если плис можный стоит, например stratix 4 gt, то я думаю не принципиально как делать. Edited December 13, 2012 by Gold777 Quote Share this post Link to post Share on other sites More sharing options...
LV26 0 December 13, 2012 Posted December 13, 2012 · Report post Что за колхозные термины? Плисоводы... овцеводы, свиноделы? Вам Ваша профессия нравится? Вы из Росии? Я с Украины - очень приятно. Можете изъясняться по-русски? Quote Share this post Link to post Share on other sites More sharing options...
crono 0 December 13, 2012 Posted December 13, 2012 · Report post Что за колхозные термины? Плисоводы... овцеводы, свиноделы? Вам Ваша профессия нравится? Вы из Росии? Я с Украины - очень приятно. Можете изъясняться по-русски? Аффиксоиды Термином «аффиксоид» обозначаются такие словообразовательные части слов, которые занимают промежуточное положение между корневыми и аффиксальными морфемами. Аффиксоиды – это морфемы переходного типа. Они аффиксоподобны, но не тождественны ни аффиксам, ни корням. К ним, например, можно отнести: вод- вед- рез- и др. Каждый такой аффиксоид формирует вполне самостоятельный, достаточно большой и весьма продуктивный словообразовательный тип. В этом смысле аффиксоиды очень близки аффиксам. Подтверждением этому служит синонимичное употребление аффиксоидов и аффиксов в русском языке, например: славяновед и славист, садовод и садовник, волнообразный и волнистый. «Язык – живой организм. Он не должен быть безупречным, иначе не будет живым». Лев Рубенштейн. Quote Share this post Link to post Share on other sites More sharing options...
Muscat 0 December 14, 2012 Posted December 14, 2012 · Report post Gold777,Ох.... Один опыт я ставлю выше, чем тысячу мнений, рожденных только воображением Достал с высокой полки пыльную папку, раскочегарил синтезатор и убедился, что был не прав. Вопрос про влезаемость видимо был некорректный, признаюсь. Влезает с избытком. Здесь и далее результаты для поля GF(2^8) Синтез под 4 Виртекс, ЛХ200 (самый логически емкий из 4 виртексов). Selected Device : 4vlx200ff1513-11 Number of Slices: 2109 out of 89088 2% Number of Slice Flip Flops: 811 out of 178176 0% Number of 4 input LUTs: 3928 out of 178176 2% Number of IOs: 84 Number of bonded IOBs: 83 out of 960 8% Number of FIFO16/RAMB16s: 1 out of 336 0% Number used as RAMB16s: 1 Number of GCLKs: 1 out of 32 3% Синтез умножителя под Виртекс 4, Selected Device : 4vlx200ff1513-11 Number of Slices: 31 out of 89088 0% Number of 4 input LUTs: 54 out of 178176 0% А вот с делителем и правда косяк. Ваша правда, на ROM действительно лучше. Больше того, в последней ревизии под Xilinx у меня именно ROM 0_o Синтез делителя Target Part: A3P1000L_PQFP208_Std Report for cell GF_DIV.archi Core Cell usage: cell count area count*area AO1 2 1.0 2.0 AO1A 1 1.0 1.0 AO1C 2 1.0 2.0 ------............ ----- ---------- TOTAL 565 563.0 Синтез умножителя Актель под ту же плису Target Part: M1A3P1000L_FBGA144_-1 Report for cell GF_FULL_MULT.archi Core Cell usage: cell count area count*area AX1E 20 1.0 20.0 GND 1 0.0 0.0 ............... XOR3 20 1.0 20.0 ----- ---------- TOTAL 97 95.0 То есть делитель сожрал почти в 5 раз больше логики. Короче не прав я был да, надо делать делитель на ROMe. Но задается он таблицей истинности ;-) Victor®, словаря Ожегова что ли нет? Я открыл, у меня есть. Нормальное словарное слово, что не нравится? плисовод -a,м - человек занимающийся разведением плисов, специалист по плисоводству. плисоводство - a, с. - разведение плисов, как отрасль радиоэлекронной промышленности. пример - Высокоскростное пл. Мясошубное о. плис - а.ж - программируемое в полевых условиях логическое устройство. Имеет высокое хозяйственное значение Не понимаю сути претензий. И кстати, вы в одном из своих последних сообщений употребили странное словечко девайс. Девайс это, простите, что такое? Вы ,уважаемый, в каком словаре слово девайс-то вычитали? Или у вас теперь так принято? У нас, у интеллигентных людей, не принято как-то пользоваться варваризмами, а принято употреблять термин "устройство". PS Какая приятная неожиданность, что теме про синтез логических схем появляется упоминание восхитительного Льва Рубинштейна :-) Quote Share this post Link to post Share on other sites More sharing options...
Kuzma1 0 December 20, 2012 Posted December 20, 2012 · Report post Скажите, а если вот так написать: function count_ones(s : std_logic_vector) return natural is variable temp : natural := 0; begin for i in s'range loop if s(i) = '1' then temp := temp + 1; end if; end loop; return temp; end function count_ones; Чем плохо? Работает вроде быстро. Quote Share this post Link to post Share on other sites More sharing options...
xvr 12 December 20, 2012 Posted December 20, 2012 · Report post Чем плохо?Всем хорошо, за исключением того, что вы отдаете все подробности реализации синтезатору. А уж что он там нагенерит целиком определяется его возможностями по оптимизации. Для данного кода разброс может быть очень велик Quote Share this post Link to post Share on other sites More sharing options...
Kuzma1 0 December 20, 2012 Posted December 20, 2012 · Report post Квартус делает цепочку сумматоров. Для 16 битного вектора на микросхеме EP4CE22E22C8 обещает 175МГц. Все настройки оптимизации по умолчанию. Для 32 битного - 118.43МГц. Для 4 битного вектора - частота зашкаливает за 300. Если надо большие вектора обрабатывать, то берем, бьем на несколько маленьких и конвеерно обрабатываем. Сначала считаем число единиц в наборе из маленьких векторов и потом синхронно складываем. Придется потратить больше, чем один такт, но можно легко обеспечить 200 МГц. Quote Share this post Link to post Share on other sites More sharing options...
xvr 12 December 20, 2012 Posted December 20, 2012 · Report post Квартус делает цепочку сумматоров. Для 16 битного вектора на микросхеме EP4CE22E22C8 обещает 175МГц. Все настройки оптимизации по умолчанию. Для 32 битного - 118.43МГц. Для 4 битного вектора - частота зашкаливает за 300. Посмотрите сообщение №15 в этой теме. Там сделали именно то, что вы предлагаете, только на 64 бита и на SymplifyPro (ну и кристалл другой). Получили 300MHz. Это к вопросу зависимости результатов синтеза от синтезатора :rolleyes: Quote Share this post Link to post Share on other sites More sharing options...
Muscat 0 December 20, 2012 Posted December 20, 2012 · Report post Kuzma1, придти в тему, где 3 страницы обсуждалось, "хорошо ли делать так" (да да, именно так как вы предложили, ровно так), не прочитать их, а потом спросить "Чем плохо? Работает вроде быстро". Отлично отлично. Quote Share this post Link to post Share on other sites More sharing options...
blackfin 59 December 20, 2012 Posted December 20, 2012 · Report post Лучше один раз увидеть, чем десять раз догадываться.. :rolleyes: Результаты синтеза с использованием цикла for(): +-------------------------------------------------------------------------+ ; Flow Summary ; +-------------------------------+-----------------------------------------+ ; Flow Status ; Successful - Thu Dec 20 15:50:34 2012 ; ; Quartus II 64-Bit Version ; 12.1 Build 177 ; ; Revision Name ; bit_population_count ; ; Top-level Entity Name ; bit_population_count ; ; Family ; Stratix III ; ; Device ; EP3SE50F484C2 ; ; Timing Models ; Final ; ; Logic utilization ; < 1 % ; ; Combinational ALUTs ; 49 / 38,000 ( < 1 % ) ; ; Memory ALUTs ; 0 / 19,000 ( 0 % ) ; ; Dedicated logic registers; 42 / 38,000 ( < 1 % ) ; ; Total registers ; 42 ; ; Total pins ; 44 / 296 ( 15 % ) ; ; Total virtual pins ; 0 ; ; Total block memory bits ; 0 / 5,455,872 ( 0 % ) ; ; DSP block 18-bit elements ; 0 / 384 ( 0 % ) ; ; Total PLLs ; 0 / 4 ( 0 % ) ; ; Total DLLs ; 0 / 4 ( 0 % ) ; +-------------------------------+-----------------------------------------+ +--------------------------------------------------+ ; Slow 1100mV 85C Model Fmax Summary ; +------------+-----------------+------------+------+ ; Fmax ; Restricted Fmax ; Clock Name ; Note ; +------------+-----------------+------------+------+ ; 299.22 MHz ; 299.22 MHz ; clk ; ; +------------+-----------------+------------+------+ Результаты синтеза по таблице из cookbook: +-------------------------------------------------------------------------+ ; Flow Summary ; +-------------------------------+-----------------------------------------+ ; Flow Status ; Successful - Thu Dec 20 15:54:24 2012 ; ; Quartus II 64-Bit Version ; 12.1 Build 177 ; ; Revision Name ; bit_population_count ; ; Top-level Entity Name ; bit_population_count ; ; Family ; Stratix III ; ; Device ; EP3SE50F484C2 ; ; Timing Models ; Final ; ; Logic utilization ; < 1 % ; ; Combinational ALUTs ; 32 / 38,000 ( < 1 % ) ; ; Memory ALUTs ; 0 / 19,000 ( 0 % ) ; ; Dedicated logic registers; 42 / 38,000 ( < 1 % ) ; ; Total registers ; 42 ; ; Total pins ; 44 / 296 ( 15 % ) ; ; Total virtual pins ; 0 ; ; Total block memory bits ; 0 / 5,455,872 ( 0 % ) ; ; DSP block 18-bit elements ; 0 / 384 ( 0 % ) ; ; Total PLLs ; 0 / 4 ( 0 % ) ; ; Total DLLs ; 0 / 4 ( 0 % ) ; +-------------------------------+-----------------------------------------+ +--------------------------------------------------+ ; Slow 1100mV 85C Model Fmax Summary ; +------------+-----------------+------------+------+ ; Fmax ; Restricted Fmax ; Clock Name ; Note ; +------------+-----------------+------------+------+ ; 443.85 MHz ; 443.85 MHz ; clk ; ; +------------+-----------------+------------+------+ Quote Share this post Link to post Share on other sites More sharing options...