Leka 1 30 ноября, 2005 Опубликовано 30 ноября, 2005 (изменено) · Жалоба 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 Как компактно синтезировать? Изменено 2 декабря, 2005 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба Что в лоб, что по лбу. Добавление 2х входового XOR влечет за собой двукратное увеличение ресурсов по затратам. Интересно было бы узнать результаты синтеза сторонних фирм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба Дык, эт-та... В этом деле используется арифметический режим LE, который делит LE на два 3-входовых LUT. В каждой половине заняты все три входа - а именно туда подаются A, B и carry[prev]. И куда же Вы хотите примешать еще и "sel"? Входы-то кончились. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 2 декабря, 2005 Опубликовано 2 декабря, 2005 (изменено) · Жалоба И куда же Вы хотите примешать еще и "sel"? Входы-то кончились. В одну только LUT (9-ю последнюю, задействован только один вход CARRY), выход которой поступает на SLOAD, коммутирующий выходы и входы D линейки LUT. Изменено 2 декабря, 2005 пользователем Leka Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба И куда же Вы хотите примешать еще и "sel"? Входы-то кончились. В одну только LUT (9-ю последнюю, задействован только один вход CARRY), выход которой поступает на SLOAD, коммутирующий выходы и входы D линейки LUT. Если верить даташиту, то в арифметическом режиме SLOAD коммутирует между выходом LUT и регистровой цепочкой... Так что не складется... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба Если верить даташиту, то в арифметическом режиме SLOAD коммутирует между выходом LUT и регистровой цепочкой... Опечатка. См ChipEdit: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба SLOAD, коммутирующий выходы и входы D линейки LUT У меня тоже опечатка, не входы D, а входы C. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба Мля! Совсем запутали. У кого там из них интересно опечатка, у квартуса или у даташита???? Если все так как в квартусе, то и SLOAD для задачи не нужен. Ща проверю! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба там при синтезе шаг влево, шаг вправо карается пришибанием CARRY_SUM. Так что похоже даташит ближе к реальности, чем чип-эдитор квартуса. Что-там в этих циклонах укастрировано в арифметическом режиме, ибо кроме стандартной логики сумматора/вычитателя в такой LUT не укладывается ничего (пытался внаглую через AHDL) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 2 декабря, 2005 Опубликовано 2 декабря, 2005 · Жалоба там при синтезе шаг влево, шаг вправо карается пришибанием CARRY_SUM Таблицы должны быть разными для смежных LUT - это учитывается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 3 декабря, 2005 Опубликовано 3 декабря, 2005 · Жалоба там при синтезе шаг влево, шаг вправо карается пришибанием CARRY_SUM Таблицы должны быть разными для смежных LUT - это учитывается? Да, конечно учитывается. Но мне никак не удалось запихать логику, отличную от суматора-вычитателя, в "верхнюю" половину LE. Хотя раньше спокойно это делал в других семействах (ацекс) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 7 декабря, 2005 Опубликовано 7 декабря, 2005 · Жалоба Cyclone2 - судя по внутренним задержкам (в chip-edit), логика LUT такая: Похоже, неудачи в попытках независимо использовать "верхнюю" и "нижнюю" половинки LUT (при DATAD=1'b1) обусловлены альтеровским софтом, а не схемотехникой LUT. (В ПЛИС пока что чайник.) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 8 декабря, 2005 Опубликовано 8 декабря, 2005 · Жалоба Похоже, неудачи в попытках независимо использовать "верхнюю" и "нижнюю" половинки LUT (при DATAD=1'b1) обусловлены альтеровским софтом, а не схемотехникой LUT. (В ПЛИС пока что чайник.) А вот правду про это вряд-ли мы когда либо узнаем.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 1 8 декабря, 2005 Опубликовано 8 декабря, 2005 · Жалоба Думаю, правду можно узнать, прошив LUT через chip-edit. Мне только до железа еще далеко. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 10 декабря, 2005 Опубликовано 10 декабря, 2005 · Жалоба Думаю, правду можно узнать, прошив LUT через chip-edit. Мне только до железа еще далеко. Да, через чип эдитор напрямую получается сварганить Ваш селектор min/max. Значит квартус не хочет так синтезировать, причем даже с AHDL. А у LUT в арифм. режиме есть хитрая особенность (если доверять чип эдитору) - он 24-битный, вход D заходит и в нижнюю, и в верхнюю половинки, хотя на схеме только в верхнюю. При этом оба пол-LUT 16-битные (4 входовые), но младшие 8 бит у обоих равны. Разными можно сделать только старшие. Посему на вход D подаем VCC, в верхний LUT синтезим логику только в старших битах (так как D=vcc перманентно), а в нижний - полностью, с игнором D. Итого все вроде складывается. Ну что могу сказать - хотите, пишите в альтеру... Мож родят. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться