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

Схемотехнические трюки для ПЛИСоводов

Не хотелось бы останавливаться только на оптимизации. У меня накоплен небольшой багаж по и HDLным трюкам. Т.е. как более красиво описать то или иное. Например CaPpuCcino помнит про решение задачи создании шаблона функций в SV %) Помимо этого есть небольшой багаж по тупости синтезаторов. Например оптимальное в ква описание массива счетчиков, была года два назад и такая тема. Всё это представляет собой обобщенный класс "трюков", который и хотелось бы донести.

 

Согласен, на оптимизации действительно останавливаться не стоит.

 

 

Но, лично я, слово "трюки" в названии раздела употреблять бы не стал. Хотя это уже мелочи.  :)

 

 

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


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

Спасибо за ссылку. Теперь буду знать, что на электрониксе есть wiki. ( Видимо я сюда редко заглядываю).

вот я тоже только вчера нашёл, что на электрониксе есть какое-то вики, но, думал, я один такой невнимательный.

хочется попросить малиновые штаны (раз представитель оных здесь на удачу уже присутствует), чтобы население форума более активно информировалось по ключевым событиям в жизни форума (например почтовой рассылкой). глядишь так и wiki будет активнее наполнятся

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


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

вот я тоже только вчера нашёл, что на электрониксе есть какое-то вики, но, думал, я один такой невнимательный.

хочется попросить малиновые штаны (раз представитель оных здесь на удачу уже присутствует), чтобы население форума более активно информировалось по ключевым событиям в жизни форума (например почтовой рассылкой). глядишь так и wiki будет активнее наполнятся

это Вы метко подметили по поводу наполнения wiki. На мой взгляд - он вообще запущен и забыт.

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


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

к des00

это как в книге "Исскуство схемотехники"?

или это копилка удачных решений...

или размышления о том, как лучше сделать...

 

...У меня накоплен небольшой багаж по и HDLным трюкам. Т.е. как более красиво описать то или иное...

 

Приведите для примера один-два трюка, что бы другие в таком же стиле выкладывали свои.

 

 

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


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

хочется попросить малиновые штаны (раз представитель оных здесь на удачу уже присутствует)

Если это в мой огород, то из него же граблями отвечу :) На Шараге.орг, как один из ее участников, готов использовать принятую там терминологию, здесь как-то хочется иного...я даже не про уважение...ну вы понимаете :)

 

Относительно предложения отмечать в рассылках новые веяния, согласен полностью, но здесь был с моей стороны не злой умысел, а чистая эксплуатация жизненного опыта: если кинуть клич на создание команды, или открытие нового проекта, то в первую очередь отреагируют те, кот в этих начинаниях мало заинтересован (мягко говоря) или готов в основном обсуждать (точно выражаясь). В связи с этим я начал с предварительной работы, нашел заинтересованных и предложил им начаьт работу, когда сформируются компетентные группы, можно и всем в рассылке указать, что есть новые проекты, к которым можно присоединиться. В такой ситуации уже компетентные группы будут входным фильтром для "обсуждальщиков", в их темах долго не пофлудишь, при этом модерирование даже не понадобится.

 

В теме у Иосифа по поводу видео-обучалок немного заоффтопил, здесь повторюсь, что и Статьи у нас в запустении. Пытаюсь "привлечь заинтересованных", чтобы в отдельной теме эти вопросы начать обсуждать, не мешая уже развивающимся проектам

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


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

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


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

здесь как-то хочется иного...я даже не про уважение...ну вы понимаете :)

приношу свои извинения - не думал, что это может задеть. хотел пошутить.

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


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

Но, лично я, слово "трюки" в названии раздела употреблять бы не стал. Хотя это уже мелочи.  :)

ничего другого, не сленгового, но описывающего в целом предмет, мне в голову не пришло %)

 

это как в книге "Исскуство схемотехники"?

или это копилка удачных решений...

или размышления о том, как лучше сделать...

Мне импонирует стиль подачи материала как в в книге "Алгоритмические трюки для программистов", которую не однократно упоминал. В этой книге, на простых примерах, без привязки к целевой платформе даются красивые реализации простых вещей, которые обычно решаются в лоб. Можно назвать это копилкой удачных решений.

 

Приведите для примера один-два трюка, что бы другие в таком же стиле выкладывали свои.

параметризация функций в SV

или

пример использования task в синтезируемом коде, который позволяет красиво описать нужную функциональность и получить легкую расширяемость модуля

//------------------------------------------------------------------------------------------------------
// Self synchronous scrambler 
//------------------------------------------------------------------------------------------------------

module scrambler
#(
 parameter int pTYPE       = 23, // 5/6/7/8/9/10/11/15/16/17/18/20/21/22/23/33/43
 parameter int pWIDTH      =  1,
 parameter bit pMSB_FIRST  =  0  // 1/0 :: first scrambled bit is MSB/LSB
)
(
 iclk ,
 iena ,
 ibyp ,
 idat ,
 odat ,
 oena
);

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 input  wire                 iclk;
 input  wire                 iena;
 input  wire                 ibyp; // bypass data or not
 input  wire  [pWIDTH-1 : 0] idat;
 output logic [pWIDTH-1 : 0] odat;
 output logic                oena;

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------
 typedef logic [pWIDTH-1 : 0] data_t;
 typedef logic    [pTYPE : 1] state_t;

 state_t state;
 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------
 // synthesis translate_off
 initial begin : ini
   odat  = '0;
   oena  = '0;
   state = '0;
 end
 // synthesis translate_on
 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------
 generate
   if (
     (pTYPE ==  5) || (pTYPE ==  6) || (pTYPE ==  7) || (pTYPE ==  8) || (pTYPE ==  9) ||
     (pTYPE == 10) || (pTYPE == 11) || (pTYPE == 15) || (pTYPE == 16) || (pTYPE == 17) || (pTYPE == 18) ||
     (pTYPE == 20) || (pTYPE == 21) || (pTYPE == 22) || (pTYPE == 23) ||
     (pTYPE == 33) || (pTYPE == 43)
     ) begin
     always_ff @(posedge iclk) begin
       if (iena) begin
         if (ibyp)
           {state, odat} <= {'0, idat};
         else
           ScramblerWord(idat, state, odat);
       end
       oena <= iena;
     end
   end
   else begin
     assign state[-1] = 1'bx; // incorrect scrambler type is set
   end
 endgenerate

 //------------------------------------------------------------------------------------------------------
 //  5bit : x^5 + x^3 + 1
 //  6bit : x^6 + x^5 + 1
 //  7bit : x^7 + x^6 + 1
 //  8bit : x^8 + x^6 + x^5 + x^4 + 1
 //  9bit : x^9 + x^5 + 1
 // 10bit : x^10 + x^7 + 1
 // 11bit : x^11 + x^9 + 1
 // 15bit : x^15 + x^14 + 1
 // 16bit : x^16 + x^15 + x^13 + x^4 + 1
 // 17bit : x^17 + x^14 + 1
 // 18bit : x^18 + x^11 + 1
 // 20bit : x^20 + x^17 + 1
 // 21bit : x^21 + x^19 + 1
 // 22bit : x^22 + x^21 + 1
 // 23bit : x^23 + x^18 + 1
 // 33bit : x^33 + x^20 + 1
 // 43bit : x^43 + x^41 + x^20 + x + 1
 //------------------------------------------------------------------------------------------------------

 task automatic ScramblerBit(input bit b, inout state_t state, output bit msb);
   case (pTYPE)
     5       : msb = state[5]  ^ state[3]  ^ b;
     6       : msb = state[6]  ^ state[5]  ^ b;
     7       : msb = state[7]  ^ state[6]  ^ b;
     8       : msb = state[8]  ^ state[6]  ^ state[5]  ^ state[4]  ^ b;
     9       : msb = state[9]  ^ state[5]  ^ b;
     10      : msb = state[10] ^ state[7]  ^ b;
     11      : msb = state[11] ^ state[9]  ^ b;
     15      : msb = state[15] ^ state[14] ^ b;
     16      : msb = state[16] ^ state[15] ^ state[13] ^ state[4]  ^ b;
     17      : msb = state[17] ^ state[14] ^ b;
     18      : msb = state[18] ^ state[11] ^ b;
     20      : msb = state[20] ^ state[17] ^ b;
     21      : msb = state[21] ^ state[19] ^ b;
     22      : msb = state[22] ^ state[21] ^ b;
     23      : msb = state[23] ^ state[18] ^ b;
     33      : msb = state[33] ^ state[20] ^ b;
     43      : msb = state[43] ^ state[41] ^ state[20] ^ state[1]  ^ b;
     default : msb = 1'b0;
   endcase
   state = (state << 1) | msb;
 endtask

 //------------------------------------------------------------------------------------------------------
 //
 //------------------------------------------------------------------------------------------------------

 task automatic ScramblerWord (input data_t b, inout state_t state, output data_t msb);
   int i;
 begin
   if (pMSB_FIRST == 0) begin
     for (i = 0; i < $size(B); i++)  ScramblerBit (b[i], state, msb[i]);
   end
   else begin // pMSB_FIRST == 1
     for (i = $high(B); i >= 0; i--) ScramblerBit (b[i], state, msb[i]);
   end
 end
 endtask

endmodule

Как видите, для добавления нового полинома, нужно изменить всего две строки (если бы не дополнительная проверка, то одну). При этом ни каких варнингов при синтезе не будет %)

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


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

ничего другого, не сленгового, но описывающего в целом предмет, мне в голову не пришло %)

"Хитрости". Еще логичнее - "Искусство схемотехники для ПЛИСоводов" - более популярная книга :)

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


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

"Хитрости". Еще логичнее - "Искусство схемотехники для ПЛИСоводов" - более популярная книга :)

Можно. Я предлагаю следующее:

Схемотехнические головоломки на ПЛИС и способы решения

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


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

Можно. Я предлагаю следующее:

Схемотехнические головоломки на ПЛИС и способы решения

 

Почему же сразу "головоломки"? Некоторые из обсуждаемых вопросов являются банальными "ежедневными" задачами ПЛИСоводов.  :)

 

 

 

Кстати, насчет задач. Извиняюсь за кроспостинг, но укажу ссылку, чтобы читающие данную тему были в курсе.

Задача подсчета количества единичных бит до сих пор не получила своего оптимального решения. Отличие результатов анализа частоты, которые получали разные участники обсуждения оказались вызваны различием версий Квартуса. 

 

Подробности тут:

http://electronix.ru/forum/index.php?showt...80083&st=30

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


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

Мне импонирует стиль подачи материала как в в книге "Алгоритмические трюки для программистов", которую не однократно упоминал. В этой книге, на простых примерах, без привязки к целевой платформе даются красивые реализации простых вещей, которые обычно решаются в лоб. Можно назвать это копилкой удачных решений.

 

Наверно имеет смысл подавать это в связке с написанием testbench_ей.

Ибо систематизированных описаний красивых реализаций пока нет.

Решения в лоб привалируют. Сплошь и рядом откровения типа оказывается можно одной строчкой

while(flag == 1'b0)        repeat (1) @(negedge clk);

Особенно это актуально для Альтеровцев, ибо классный язык и наличие качественного встроенного симулятора в Квартусе сыграли с разработчиками злую шутку.

Симулятора уже нет, на AlteraHDL многие подсели. (Поэтому смотрят на симулятор Альдека, графика)

А ip_core идут в связке с моделсимом.

А два симулятора - это уже перебор.

Думаю, наступила пора только текстового описания и того и другого.

 

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


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

Наверно имеет смысл подавать это в связке с написанием testbench_ей.

Ибо систематизированных описаний красивых реализаций пока нет.

А это идея.

Решения в лоб привалируют. Сплошь и рядом откровения типа оказывается можно одной строчкой

Можно и не такое в одну строчку %)

 

Извините за паузу, работы много. Итак, явное желание войти в команду выразили : XVR, Maverick, des333, на днях создам новую тему где выложу детали %)

 

 

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


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

Извините за паузу, работы много. Итак, явное желание войти в команду выразили : XVR, Maverick, des333, на днях создам новую тему где выложу детали %)

еще раз извините, на меня свалились две срочных задачи, зашиваюсь %(

 

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


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

еще раз извините, на меня свалились две срочных задачи, зашиваюсь %(

Ничего страшного. Бывает.  :)

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


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

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

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

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

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

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

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

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

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

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