Jump to content
    

Задача для начинающего плисовода

agate, тот же алгоритм на VHDL чуть выше, результат синтеза - 3 уровня логики, Симплифай для 6 виртекса, 500МГц. Подскажите, как вы получаете 2 уровня?

 

Вы правы - не будет 2

Share this post


Link to post
Share on other sites

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 ячеек со значениями обратных элементов, деление соответственно делал через умножение на элемент из этой таблицы. Но думаю можно и без блочной памяти обойти и сделать деление на логике. Есть статьи по реализации делителей на плис.

Share this post


Link to post
Share on other sites

Ну если поставлена задачи реализации кода Рида-Соломона только в виде коэффицентов (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) "Умножитель на константу" - используем полный умножитель, в качестве одного входа указана константа. Синтезатор это чует и значительно оптимизирует этот полный умножитель до простой схемы. То есть рисовать ручками схему конкретного константного умножителя (как это делалось во время схемного ввода) нет никакого смысла.

Share this post


Link to post
Share on other sites

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 т.к. логики сожрет немерянно.

Share this post


Link to post
Share on other sites

Я признаться по прежнему не понимаю, в чем преимущество делать на ROM памяти такие операции. Элемент на нахождение обратного -> триггер -> полный умножитель. Теряем за счет такого конвейера 1 такт. Для РС это уж точно не смертельно.

 

Критической логикой все равно остается полный умножитель, а не нахождение обратного. Это справедливо и для 10 разрядов и для 12. Если вы уже потратили гору ресурсов на полные умножители, то какой смысл экономить их на одном несчастном (1/a) и использовать вместо него другие, более дефицитные ресурсы?

 

И такое решение для параллельный декодеров как раз будет даже лучше, поскольку логики в ПЛИСе всяко больше, чем памяти.

Подскажите, а в какую ПЛИС у вас влезает 64 декодера РС на 10 разрядов?

Share this post


Link to post
Share on other sites

Я признаться по прежнему не понимаю, в чем преимущество делать на 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 by Gold777

Share this post


Link to post
Share on other sites

Что за колхозные термины?

Плисоводы... овцеводы, свиноделы?

Вам Ваша профессия нравится?

Вы из Росии? Я с Украины - очень приятно.

Можете изъясняться по-русски?

Share this post


Link to post
Share on other sites

Что за колхозные термины?

Плисоводы... овцеводы, свиноделы?

Вам Ваша профессия нравится?

Вы из Росии? Я с Украины - очень приятно.

Можете изъясняться по-русски?

 

Аффиксоиды

Термином «аффиксоид» обозначаются такие словообразовательные части слов, которые занимают промежуточное положение между корневыми и аффиксальными морфемами.

Аффиксоиды – это морфемы переходного типа. Они аффиксоподобны, но не тождественны ни аффиксам, ни корням. К ним, например, можно отнести: вод- вед- рез- и др.

Каждый такой аффиксоид формирует вполне самостоятельный, достаточно большой и весьма продуктивный словообразовательный тип. В этом смысле аффиксоиды очень близки аффиксам. Подтверждением этому служит синонимичное употребление аффиксоидов и аффиксов в русском языке, например: славяновед и славист, садовод и садовник, волнообразный и волнистый.

 

«Язык – живой организм. Он не должен быть безупречным, иначе не будет живым». Лев Рубенштейн.

Share this post


Link to post
Share on other sites

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

Какая приятная неожиданность, что теме про синтез логических схем появляется упоминание восхитительного Льва Рубинштейна :-)

Share this post


Link to post
Share on other sites

Скажите, а если вот так написать:

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;

 

Чем плохо? Работает вроде быстро.

Share this post


Link to post
Share on other sites

Чем плохо?
Всем хорошо, за исключением того, что вы отдаете все подробности реализации синтезатору. А уж что он там нагенерит целиком определяется его возможностями по оптимизации. Для данного кода разброс может быть очень велик

 

 

Share this post


Link to post
Share on other sites

Квартус делает цепочку сумматоров.

Для 16 битного вектора на микросхеме EP4CE22E22C8 обещает 175МГц. Все настройки оптимизации по умолчанию.

Для 32 битного - 118.43МГц.

Для 4 битного вектора - частота зашкаливает за 300.

 

Если надо большие вектора обрабатывать, то берем, бьем на несколько маленьких и конвеерно обрабатываем. Сначала считаем число единиц в наборе из маленьких векторов и потом синхронно складываем. Придется потратить больше, чем один такт, но можно легко обеспечить 200 МГц.

Share this post


Link to post
Share on other sites

Квартус делает цепочку сумматоров.

Для 16 битного вектора на микросхеме EP4CE22E22C8 обещает 175МГц. Все настройки оптимизации по умолчанию.

Для 32 битного - 118.43МГц.

Для 4 битного вектора - частота зашкаливает за 300.

Посмотрите сообщение №15 в этой теме. Там сделали именно то, что вы предлагаете, только на 64 бита и на SymplifyPro (ну и кристалл другой). Получили 300MHz. Это к вопросу зависимости результатов синтеза от синтезатора :rolleyes:

 

Share this post


Link to post
Share on other sites

Kuzma1, придти в тему, где 3 страницы обсуждалось, "хорошо ли делать так" (да да, именно так как вы предложили, ровно так), не прочитать их, а потом спросить "Чем плохо? Работает вроде быстро". Отлично отлично.

Share this post


Link to post
Share on other sites

Лучше один раз увидеть, чем десять раз догадываться.. :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        ;      ;
+------------+-----------------+------------+------+

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...