SM 0 9 ноября, 2009 Опубликовано 9 ноября, 2009 · Жалоба И вообще. Или я что-то не так сделал (не пинайте, 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 оказывается круче квартуса :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Shtirlits 0 9 ноября, 2009 Опубликовано 9 ноября, 2009 · Жалоба Этот процесс где-то был назван "push a rope", если я правильно понял автора статьи. Примерно как учитель детям 5 раз рассказал, сам уже понял, а дети... Также и синтезаторы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Des333 0 9 ноября, 2009 Опубликовано 9 ноября, 2009 · Жалоба Если синхронный сброс не использовать, то результат становится одинаковым. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба И вообще. Или я что-то не так сделал (не пинайте, generate лениво было делать), или квартус дурак. 16 LE, т.е. физически все реально: ква 9.0сп1 сыклон 3, все по дефолту, ваш код LC_Comb/LC_Reg 23/16 %) мегапацанский код 32LC ква9.1 результат тот же самый ква 9.1 aria II вариант в лоб 16 LC, пацанский 19, мега пацанский 16ть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба ква 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, когда они ничему не противоречат?! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_LD 0 10 ноября, 2009 Опубликовано 10 ноября, 2009 · Жалоба Вывод 2.1. Пора идти в техподдержку - какого хрена игнорят мои CARRY_SUM, когда они ничему не противоречат?! Я там уже был, правда, достаточно давно :) Тут с тех пор, наверное, ничего и не поменялось... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба Вывод 1 - самая эффективная архитектура c учетом особенностей квартуса у Cyclone / MAX-II, которая наравне с Arria для этого примера, и позволяет упихаться в 16 LUT-ов :) Вывод 2 - для Cyclone-II/III квартус проигнорировал все 16 carry_sum-ов. Вопрос - ПОЧЕМУ? Архитектура явно позволяет по аналогии с Cyclone убраться в 16 LE. Гады, что еще сказать. Вывод 2.1. Пора идти в техподдержку - какого хрена игнорят мои CARRY_SUM, когда они ничему не противоречат?! нда, нет в жизни счастья %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба Я там уже был, правда, достаточно давно :) Хм. Но тут немного другая цель. У Вас было "as fast as possible", а мы жмемся по area. И судя по даташиту упихаться физически фозможно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба Нас так просто не возьмешь. Вот - 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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба 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: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба 2 SM Не подскажете из каких умозаключений мы получили из Из соображения эквивалентности логической функции. Только я забил на параметризованность. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба Нас так просто не возьмешь. Вот - 16 LE в любом циклоне: респект и уважуха %) как то совсем забыл я про волшебный sload %) Не подскажете из каких умозаключений мы получили из вот такое хоть и не SM отвечу, все просто : люты реализуют арифметическую инверсию, а sload + asdata это мультиплексор стоящий за лютом и перед триггером %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Kuzmi4 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба 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: видимо нужно вспоминать дедовские методы... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба 2 des00 - так лутов то нет, есть "волшебные" тригера :wassat: ну прям, а вот это assign t = -in; вы не заметили? %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Leka 0 11 ноября, 2009 Опубликовано 11 ноября, 2009 · Жалоба t=-in; --> сумматор Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться