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

И вообще. Или я что-то не так сделал (не пинайте, generate лениво было делать), или квартус дурак. 16 LE, т.е. физически все реально:

module tsts (clk, in, out,zero,inv);
input clk, inv, zero;
input [15:0] in;
output [15:0] out;

wire [15:0] o;
wire [16:0] c;

carry_sum cs0 (.sin(in[0]         )  , .cin((!in[0])& inv),  .sout(o[0]), .cout(c[1]));
carry_sum cs1 (.sin(in[1]^inv^c[1])  , .cin((in[1]^inv) & c[1]), .sout(o[1]), .cout(c[2]));
carry_sum cs2 (.sin(in[2]^inv^c[2])  , .cin((in[2]^inv) & c[2]), .sout(o[2]), .cout(c[3]));
carry_sum cs3 (.sin(in[3]^inv^c[3])  , .cin((in[3]^inv) & c[3]), .sout(o[3]), .cout(c[4]));
carry_sum cs4 (.sin(in[4]^inv^c[4])  , .cin((in[4]^inv) & c[4]), .sout(o[4]), .cout(c[5]));
carry_sum cs5 (.sin(in[5]^inv^c[5])  , .cin((in[5]^inv) & c[5]), .sout(o[5]), .cout(c[6]));
carry_sum cs6 (.sin(in[6]^inv^c[6])  , .cin((in[6]^inv) & c[6]), .sout(o[6]), .cout(c[7]));
carry_sum cs7 (.sin(in[7]^inv^c[7])  , .cin((in[7]^inv) & c[7]), .sout(o[7]), .cout(c[8]));
carry_sum cs8 (.sin(in[8]^inv^c[8])  , .cin((in[8]^inv) & c[8]), .sout(o[8]), .cout(c[9]));
carry_sum cs9 (.sin(in[9]^inv^c[9])  , .cin((in[9]^inv) & c[9]), .sout(o[9]), .cout(c[10]));
carry_sum csa (.sin(in[10]^inv^c[10]), .cin((in[10]^inv)& c[10]),.sout(o[10]), .cout(c[11]));
carry_sum csb (.sin(in[11]^inv^c[11]), .cin((in[11]^inv)& c[11]),.sout(o[11]), .cout(c[12]));
carry_sum csc (.sin(in[12]^inv^c[12]), .cin((in[12]^inv)& c[12]),.sout(o[12]), .cout(c[13]));
carry_sum csd (.sin(in[13]^inv^c[13]), .cin((in[13]^inv)& c[13]),.sout(o[13]), .cout(c[14]));
carry_sum cse (.sin(in[14]^inv^c[14]), .cin((in[14]^inv)& c[14]),.sout(o[14]), .cout(c[15]));
carry_sum csf (.sin(in[15]^inv^c[15]), .cin((in[15]^inv)& c[15]),.sout(o[15]), .cout(c[16]));


DFFEAS r0 (.d(o[0]), .clk(clk), .sclr(zero), .q(out[0]));
DFFEAS r1 (.d(o[1]), .clk(clk), .sclr(zero), .q(out[1]));
DFFEAS r2 (.d(o[2]), .clk(clk), .sclr(zero), .q(out[2]));
DFFEAS r3 (.d(o[3]), .clk(clk), .sclr(zero), .q(out[3]));
DFFEAS r4 (.d(o[4]), .clk(clk), .sclr(zero), .q(out[4]));
DFFEAS r5 (.d(o[5]), .clk(clk), .sclr(zero), .q(out[5]));
DFFEAS r6 (.d(o[6]), .clk(clk), .sclr(zero), .q(out[6]));
DFFEAS r7 (.d(o[7]), .clk(clk), .sclr(zero), .q(out[7]));
DFFEAS r8 (.d(o[8]), .clk(clk), .sclr(zero), .q(out[8]));
DFFEAS r9 (.d(o[9]), .clk(clk), .sclr(zero), .q(out[9]));
DFFEAS ra (.d(o[10]), .clk(clk), .sclr(zero), .q(out[10]));
DFFEAS rb (.d(o[11]), .clk(clk), .sclr(zero), .q(out[11]));
DFFEAS rc (.d(o[12]), .clk(clk), .sclr(zero), .q(out[12]));
DFFEAS rd (.d(o[13]), .clk(clk), .sclr(zero), .q(out[13]));
DFFEAS re (.d(o[14]), .clk(clk), .sclr(zero), .q(out[14]));
DFFEAS rf (.d(o[15]), .clk(clk), .sclr(zero), .q(out[15]));

endmodule

 

Мда. ISE оказывается круче квартуса :)

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


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

Этот процесс где-то был назван "push a rope", если я правильно понял автора статьи.

Примерно как учитель детям 5 раз рассказал, сам уже понял, а дети...

Также и синтезаторы.

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


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

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

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


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

И вообще. Или я что-то не так сделал (не пинайте, generate лениво было делать), или квартус дурак. 16 LE, т.е. физически все реально:

 

ква 9.0сп1 сыклон 3, все по дефолту, ваш код LC_Comb/LC_Reg 23/16 %) мегапацанский код 32LC

ква9.1 результат тот же самый

 

ква 9.1 aria II вариант в лоб 16 LC, пацанский 19, мега пацанский 16ть

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


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

ква 9.0сп1 сыклон 3, все по дефолту, ваш код LC_Comb/LC_Reg 23/16 %)

Я синтезировал мегапацанский код (на carry_sum) под просто-циклон, который не 2 и не 3, ква 9.0. Результат хоть тресни, 16 LE.

А вот под другие:

ACEX1K - 32 LE.

MAX-II - 16 LE.

Cyclone - 16 LE.

Cyclone-II - 24 LE.

Cyclone-III - 24 LE.

Arria - 20 ALUT

 

Теперь вариант "в лоб":

 

ACEX1K - 33 LE.

MAX-II - 17 LE.

Cyclone - 17 LE.

Cyclone-II - 17 LE.

Cyclone-III - 17 LE.

Arria - 16 ALUT

 

Вывод 1 - самая эффективная архитектура c учетом особенностей квартуса у Cyclone / MAX-II, которая наравне с Arria для этого примера, и позволяет упихаться в 16 LUT-ов :)

 

Вывод 2 - для Cyclone-II/III квартус проигнорировал все 16 carry_sum-ов. Вопрос - ПОЧЕМУ? Архитектура явно позволяет по аналогии с Cyclone убраться в 16 LE. Гады, что еще сказать.

 

Вывод 2.1. Пора идти в техподдержку - какого хрена игнорят мои CARRY_SUM, когда они ничему не противоречат?!

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


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

Вывод 2.1. Пора идти в техподдержку - какого хрена игнорят мои CARRY_SUM, когда они ничему не противоречат?!

 

Я там уже был, правда, достаточно давно :)

 

Тут

 

с тех пор, наверное, ничего и не поменялось...

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


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

Вывод 1 - самая эффективная архитектура c учетом особенностей квартуса у Cyclone / MAX-II, которая наравне с Arria для этого примера, и позволяет упихаться в 16 LUT-ов :)

 

Вывод 2 - для Cyclone-II/III квартус проигнорировал все 16 carry_sum-ов. Вопрос - ПОЧЕМУ? Архитектура явно позволяет по аналогии с Cyclone убраться в 16 LE. Гады, что еще сказать.

 

Вывод 2.1. Пора идти в техподдержку - какого хрена игнорят мои CARRY_SUM, когда они ничему не противоречат?!

 

нда, нет в жизни счастья %)

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


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

Я там уже был, правда, достаточно давно :)

Хм. Но тут немного другая цель. У Вас было "as fast as possible", а мы жмемся по area. И судя по даташиту упихаться физически фозможно.

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


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

Нас так просто не возьмешь. Вот - 16 LE в любом циклоне:

 

module tsts (clk, in, out,zero,inv);
input clk, inv, zero;
input [15:0] in;
output /*reg*/ [15:0] out;

wire [15:0] t;
wire invn = ~inv;
assign t = -in;

DFFEAS r0 (.d(t[0]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[0]), .q(out[0]));
DFFEAS r1 (.d(t[1]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[1]), .q(out[1]));
DFFEAS r2 (.d(t[2]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[2]), .q(out[2]));
DFFEAS r3 (.d(t[3]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[3]), .q(out[3]));
DFFEAS r4 (.d(t[4]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[4]), .q(out[4]));
DFFEAS r5 (.d(t[5]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[5]), .q(out[5]));
DFFEAS r6 (.d(t[6]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[6]), .q(out[6]));
DFFEAS r7 (.d(t[7]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[7]), .q(out[7]));
DFFEAS r8 (.d(t[8]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[8]), .q(out[8]));
DFFEAS r9 (.d(t[9]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[9]), .q(out[9]));
DFFEAS ra (.d(t[10]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[10]), .q(out[10]));
DFFEAS rb (.d(t[11]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[11]), .q(out[11]));
DFFEAS rc (.d(t[12]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[12]), .q(out[12]));
DFFEAS rd (.d(t[13]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[13]), .q(out[13]));
DFFEAS re (.d(t[14]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[14]), .q(out[14]));
DFFEAS rf (.d(t[15]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[15]), .q(out[15]));

endmodule

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


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

2 SM

Не подскажете из каких умозаключений мы получили из

 odat <= ({pW{inv}} ^ (idat & {pW{~zero}})) + inv;

вот такое

wire [15:0] t;
wire invn = ~inv;
assign t = -in;

DFFEAS r0 (.d(t[0]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[0]), .q(out[0]));
DFFEAS r1 (.d(t[1]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[1]), .q(out[1]));
DFFEAS r2 (.d(t[2]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[2]), .q(out[2]));
DFFEAS r3 (.d(t[3]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[3]), .q(out[3]));
DFFEAS r4 (.d(t[4]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[4]), .q(out[4]));
DFFEAS r5 (.d(t[5]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[5]), .q(out[5]));
DFFEAS r6 (.d(t[6]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[6]), .q(out[6]));
DFFEAS r7 (.d(t[7]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[7]), .q(out[7]));
DFFEAS r8 (.d(t[8]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[8]), .q(out[8]));
DFFEAS r9 (.d(t[9]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[9]), .q(out[9]));
DFFEAS ra (.d(t[10]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[10]), .q(out[10]));
DFFEAS rb (.d(t[11]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[11]), .q(out[11]));
DFFEAS rc (.d(t[12]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[12]), .q(out[12]));
DFFEAS rd (.d(t[13]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[13]), .q(out[13]));
DFFEAS re (.d(t[14]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[14]), .q(out[14]));
DFFEAS rf (.d(t[15]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[15]), .q(out[15]));

Потому как я наверно выпал из струи :laughing:

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


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

2 SM

Не подскажете из каких умозаключений мы получили из

Из соображения эквивалентности логической функции. Только я забил на параметризованность.

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


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

Нас так просто не возьмешь. Вот - 16 LE в любом циклоне:

 

респект и уважуха %) как то совсем забыл я про волшебный sload %)

 

 

Не подскажете из каких умозаключений мы получили из

вот такое

 

хоть и не SM отвечу, все просто : люты реализуют арифметическую инверсию, а sload + asdata это мультиплексор стоящий за лютом и перед триггером %)

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


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

2 des00 - так лутов то нет, есть "волшебные" тригера :wassat:

module tsts (clk, in, out,zero,inv);
input clk, inv, zero;
input [15:0] in;
output /*reg*/ [15:0] out;

wire [15:0] t;
wire invn = ~inv;
assign t = -in;

DFFEAS r0 (.d(t[0]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[0]), .q(out[0]));
DFFEAS r1 (.d(t[1]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[1]), .q(out[1]));
DFFEAS r2 (.d(t[2]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[2]), .q(out[2]));
DFFEAS r3 (.d(t[3]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[3]), .q(out[3]));
DFFEAS r4 (.d(t[4]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[4]), .q(out[4]));
DFFEAS r5 (.d(t[5]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[5]), .q(out[5]));
DFFEAS r6 (.d(t[6]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[6]), .q(out[6]));
DFFEAS r7 (.d(t[7]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[7]), .q(out[7]));
DFFEAS r8 (.d(t[8]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[8]), .q(out[8]));
DFFEAS r9 (.d(t[9]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[9]), .q(out[9]));
DFFEAS ra (.d(t[10]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[10]), .q(out[10]));
DFFEAS rb (.d(t[11]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[11]), .q(out[11]));
DFFEAS rc (.d(t[12]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[12]), .q(out[12]));
DFFEAS rd (.d(t[13]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[13]), .q(out[13]));
DFFEAS re (.d(t[14]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[14]), .q(out[14]));
DFFEAS rf (.d(t[15]), .clk(clk), .sclr(zero), .sload(invn), .asdata(in[15]), .q(out[15]));

endmodule

С лутами есчё вроде как через раскладку ручками вроде понятно было, а с тригерами :07: видимо нужно вспоминать дедовские методы...

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


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

2 des00 - так лутов то нет, есть "волшебные" тригера :wassat:

 

ну прям, а вот это assign t = -in; вы не заметили? %)

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


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

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

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

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

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

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

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

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

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

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