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

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

А практический смысл в чем.

Пример - многопортовый регистровый файл на распределенной памяти (с несколькими портами записи).

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


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

Да
Ну это «навеяно фланктером». Когда-то хоть и работал с альтерой, но xilinx-овский сайт тоже изучал.

 

Тю, у них был ещё html-ный вариант с нормальными картинками-схемами. А сейчас только pdf-ка с плохими.

Надо порыться в тогдашних архивах, может, где-то рядом с AHDL-кусочками и страничка с сайта сохранена.

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


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

Пример - многопортовый регистровый файл на распределенной памяти (с несколькими портами записи).

а двупортовая память чем не устраивала? В чем разница в использовании?

PS Ее (память) ж можно реализовать как на распределенной логике так и с ипользованием блочной памяти.

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


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

вариант с нормальными картинками-схемами

http://www.floobydust.com/flancter/Flancter_App_Note.pdf - нагуглил(про фланктер - не знал).

 

 

 

 

а двупортовая память чем не устраивала? В чем разница в использовании?

Попробуйте описать асинхронную память с двумя портами чтения и записи (чтение - асинхронно, запись - по клоку) - на блочной не реализуется, на распределенной - только если самому хитро описать, в лоб - софт соберет на триггерах, а не на ЛУТ-ах (давно делал, на новом софте не проверял).

Изменено пользователем Leka

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


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

Тут ещё и информации больше, спасибо.

 

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


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

Задачка: описать 2х-портовый триггер на синтезируемом HDL,

поведение при "совпадении фронтов" - произвольное (выбирайте сами).

Картинка не полностью описывает поведение триггера. Что должно быть внутри блока с Q (оно будет не только при совпадении фронтов) - &, 1, =1? После этого можно сделать (один из вариантов уже показали). На мой взгляд, сама задумка неправильная с точки зрения гонок, метастабильных состояний. Зачем два тактовых сигнала? И вообще, для этого нужно было создать отдельную тему в будущем разделе.

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


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

Картинка не полностью описывает поведение триггера.

По аналогии с 2х-портовой памятью.

 

Что должно быть внутри блока с Q

always @(posedge c0) q <= d0; 
always @(posedge c1) q <= d1;

- моделируется, но не синтезируется.

 

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

Частный случай этой "задумки" - Flancter.

 

Еще пример использования "многопортового триггера".

always @( posedge c1 or posedge c2 )
  if ( c1 ) q <= d1;
  else q <= d2;

- поведение синтезируемой схемы не будет совпадать с моделированием, задача - синтезировать схему, полностью соответствующую верилоговской модели. Вариант решения:

 

 

 

 

 

(на другом форуме за эти "издевательства" над Верилогом - забанили на несколько суток).

post-9118-1288440535.png

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


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

Картинка не полностью описывает поведение триггера. Что должно быть внутри блока с Q (оно будет не только при совпадении фронтов)
При совпадении (± зона переходных процессов) понятно что бардак, а так, на мой взгляд, всё понятно — в зону входов для CLK1 входит только D1, поэтому по фронту CLK1 в Q должно записаться значение D1 без никакой связи со значением на D0.

 

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


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

Частный случай этой "задумки" - Flancter.

 

(на другом форуме за эти "издевательства" над Верилогом - забанили на несколько суток).

 

Про бан не понятно.

А в Flancter увидел свой вариант.

Работа по разным фронтам клока. И отработка событий как по одному плечу, так и по другому.

Ничего не теряя.

Конвеер событий.

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


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

Ooopss!!!!

Сообщение выше как бы от Alex1961 — было от меня.

Что-то крепко на форуме с куками и запоминанием входа глюкнуло. Ща жаловаться буду.

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


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

+1

Именно от этой точки («а, ну так это нужен такой триггер, из которого таким вот образом получится фланктер») обратным ходом от фланктера и был получен приведеный код.

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


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

всем привет!

это конечно не трюки, но наверное кому-нибудь пригодится:

есть у меня склад всяких разных элементов вычислительных на которых я когда-то в стародавние времена учился Верилогу.

я их тогда вроде верифицировал, но может быть что-то и не доглядел, так что "доверяй, но проверяй". сейчас перепроверять уже не хочется.

единственное, что я подправлю, так это переделаю чуть-чуть шапки на манер SV ANSI и комментарии в заголовках вставлю, чтобы было юзабельно.

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

 

первый релиз-кандидат целочисленный последовательный знаковый/беззнаковый делитель с коррекцией остатка

при операндах 32 на 32 бита синтезица в Ксайлинкс В2Про 2VP2fg256 грэйд -6 примерно на 140 МГц жрамши 277 слайсов

16х16 бит на xc2vp70 -6 примерно 150 МГц при 131 из 33088 слайсах

описание:

sequential integer divider with reminder correction

takes in 2 arguments of adjustable width (parameters op_A_width, op_B_width)

and divide the first one by the second treating them either signed or unsigned depending on op-type input

which takes op_A_width+1 clock cycles + 1 cycle for reminder correction, provided that stall_n signal is deasserted

rdy_n output indicates completion of operation with result(rez) and reminder containing valid results

the unit provides additionally an overflow and division by zero exception flags

div_signed_unsigned.txt

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


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

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

 

синтез для 16х16 на xc2vp70 -6 даёт примерное 130МГц при 2889 из 33088 (8%)

32 на 32 даже страшно проверять (кому не страшно может сам попробовать)

 

ЗЫЖ внимание, сборщик не защёлкивает результаты в регистры на выходе

div_pipelined.txt

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


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

конвеерный пирамидальный умножитель знаковых/беззнаковых чисел

 

16 х 16 на xc2vp70 -6 примерно 180 МГц при 564 из 33088 слайсах

 

описание:

pipelined integer multiplier

takes in 2 arguments of adjustable width (parameters op_A_width, op_B_width)

and multiply the first one by the second treating them either signed or unsigned depending on op_type input

with op_B_width clock cycles of initial latency, provided that stall_n signal is deasserted

mul.txt

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


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

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

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

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

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

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

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

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

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

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