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

Компактно синтезировать min_max

Quartusii 5.1, Verilog, cycloneii. Требуется синтезировать модуль, выдающий минимальное либо максимальное из 2х входных слов (в зависимости от "sel").

LC циклона2 позволяет компактно реализовать подобную функцию, для N разрядов требуется N+1 LC.

Но: квартус5.1 выдает компактное решение только для одной из двух функции, например:

 

module min(q,clk,clr,a,b ) ; // O'k --> 9 LC

output reg[7:0] q;

input clk,clr;

input[7:0] a,b;

wire[7:0] c;

assign c=(a<b)?a:b;

always@(posedge clk)

begin

if (clr) q<=8'b0;

else q<=c;

end

endmodule

 

но не для двух сразу c выбором по "sel" (хапает вдвое больше LС):

 

module minmax(q,sel,clk,clr,a,b ) ; // ??????? --> 17 LC

output reg[7:0] q;

input sel,clk,clr;

input[7:0] a,b;

wire[7:0] c;

assign c=((a<b)^sel)?a:b;

always@(posedge clk)

begin

if (clr) q<=8'b0;

else q<=c;

end

endmodule

 

Как компактно синтезировать?

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

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


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

Что в лоб, что по лбу. Добавление 2х входового XOR влечет за собой двукратное увеличение ресурсов по затратам. Интересно было бы узнать результаты синтеза сторонних фирм.

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


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

Дык, эт-та... В этом деле используется арифметический режим LE, который делит LE на два 3-входовых LUT. В каждой половине заняты все три входа - а именно туда подаются A, B и carry[prev]. И куда же Вы хотите примешать еще и "sel"? Входы-то кончились.

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


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

И куда же Вы хотите примешать еще и "sel"? Входы-то кончились.

В одну только LUT (9-ю последнюю, задействован только один вход CARRY), выход которой поступает на SLOAD, коммутирующий выходы и входы D линейки LUT.

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

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


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

И куда же Вы хотите примешать еще и "sel"? Входы-то кончились.

В одну только LUT (9-ю последнюю, задействован только один вход CARRY), выход которой поступает на SLOAD, коммутирующий выходы и входы D линейки LUT.

Если верить даташиту, то в арифметическом режиме SLOAD коммутирует между выходом LUT и регистровой цепочкой... Так что не складется...

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


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

Если верить даташиту, то в арифметическом режиме SLOAD коммутирует между выходом LUT и регистровой цепочкой...

Опечатка. См ChipEdit:

post-9118-1133535599_thumb.jpg

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


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

SLOAD, коммутирующий выходы и входы D линейки LUT

У меня тоже опечатка, не входы D, а входы C.

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


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

Мля! Совсем запутали. У кого там из них интересно опечатка, у квартуса или у даташита???? Если все так как в квартусе, то и SLOAD для задачи не нужен. Ща проверю!

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


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

там при синтезе шаг влево, шаг вправо карается пришибанием CARRY_SUM. Так что похоже даташит ближе к реальности, чем чип-эдитор квартуса. Что-там в этих циклонах укастрировано в арифметическом режиме, ибо кроме стандартной логики сумматора/вычитателя в такой LUT не укладывается ничего (пытался внаглую через AHDL)

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


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

там при синтезе шаг влево, шаг вправо карается пришибанием CARRY_SUM

Таблицы должны быть разными для смежных LUT - это учитывается?

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


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

там при синтезе шаг влево, шаг вправо карается пришибанием CARRY_SUM

Таблицы должны быть разными для смежных LUT - это учитывается?

Да, конечно учитывается. Но мне никак не удалось запихать логику, отличную от суматора-вычитателя, в "верхнюю" половину LE. Хотя раньше спокойно это делал в других семействах (ацекс)

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


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

Cyclone2 - судя по внутренним задержкам (в chip-edit), логика LUT такая:post-9118-1133954668_thumb.jpg

Похоже, неудачи в попытках независимо использовать "верхнюю" и "нижнюю" половинки LUT (при DATAD=1'b1) обусловлены альтеровским софтом, а не схемотехникой LUT. (В ПЛИС пока что чайник.)

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


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

Похоже, неудачи в попытках независимо использовать "верхнюю" и "нижнюю" половинки LUT (при DATAD=1'b1) обусловлены альтеровским софтом, а не схемотехникой LUT. (В ПЛИС пока что чайник.)

А вот правду про это вряд-ли мы когда либо узнаем....

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


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

Думаю, правду можно узнать, прошив LUT через chip-edit. Мне только до железа еще далеко.

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


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

Думаю, правду можно узнать, прошив LUT через chip-edit. Мне только до железа еще далеко.

 

Да, через чип эдитор напрямую получается сварганить Ваш селектор min/max. Значит квартус не хочет так синтезировать, причем даже с AHDL.

 

А у LUT в арифм. режиме есть хитрая особенность (если доверять чип эдитору) - он 24-битный, вход D заходит и в нижнюю, и в верхнюю половинки, хотя на схеме только в верхнюю. При этом оба пол-LUT 16-битные (4 входовые), но младшие 8 бит у обоих равны. Разными можно сделать только старшие. Посему на вход D подаем VCC, в верхний LUT синтезим логику только в старших битах (так как D=vcc перманентно), а в нижний - полностью, с игнором D. Итого все вроде складывается. Ну что могу сказать - хотите, пишите в альтеру... Мож родят.

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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