CaPpuCcino 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба Многие умудрённые опытом разработчики часто пользуются термином "полностью синхронный дизайн", при этом никто особо не вдаётся в подробности, по каким отличительным чертам можно распознать "полностью синхронный" от "неособо синхронного" или "чуть-чуть несинхронного", как будто термин "синхронный дизайн" и так всем понятен и особых сомнений не вызывает. Поделитесь, пожалуйста, опытом, давайте сведём знания в едином месте: Что такое синхронный дизайн? В чём его плюсы и, особенно важно, минусы? До какой меры нужно дробить комбинаторику и вставлять регистры на выходе каждого модуля? Всегда ли вы придерживаетесь подобной техники или есть ситуации когда целесообразно от неё отступить? Интересна в первую очередь практика применения данной техники. Заранее благодарю всех откликнувшихся! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба Это дизайн, в котором не применяется асинхронных способов управления триггерами (т.е. асинхронных загрузок, сбросов, предустановок, и т.д.), а также комбинаторных циклов, синтезируемых в защелки и прочие асинхронные элементы памяти. За исключением сигнала глобального сброса. Не применяется логики управления тактовых сигналов (clock gating), а также минимизировано количество клок-доменов, в идеале один. Отступать от этого целесообразно тогда, когда без этого не возможно реализовать устройство, соответствующее заданию. Или при переходе от FPGA к заказной ИМС (ASIC), где асинхронные элементы памяти и clock gating могут существенно уменьшить стоимость кристалла, а средства разработки позволяют корректно и полностью обконстрейнить эти элементы. Причем не только обконстрейнить, а и выдержать эти констрейны на этапе разводки. ЗЫ А чисто комбинаторные блоки к этому делу не относятся, и имеют полное право на существование. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 26 февраля, 2007 Опубликовано 26 февраля, 2007 · Жалоба Это дизайн, в котором не применяется асинхронных способов управления триггерами (т.е. асинхронных загрузок, сбросов, предустановок, и т.д.), а также комбинаторных циклов, синтезируемых в защелки и прочие асинхронные элементы памяти. За исключением сигнала глобального сброса. Не применяется логики управления тактовых сигналов (clock gating), а также минимизировано количество клок-доменов, в идеале один. Отступать от этого целесообразно тогда, когда без этого не возможно реализовать устройство, соответствующее заданию. Или при переходе от FPGA к заказной ИМС (ASIC), где асинхронные элементы памяти и clock gating могут существенно уменьшить стоимость кристалла, а средства разработки позволяют корректно и полностью обконстрейнить эти элементы. Причем не только обконстрейнить, а и выдержать эти констрейны на этапе разводки. ЗЫ А чисто комбинаторные блоки к этому делу не относятся, и имеют полное право на существование. BTW глобальный сброс тоже полезно делать синхнронным. За исключением пожалуй выходов кристалла. Все равно бывает нужно снятие глобального сброса синхронизировать с клоком во избежание непредсказыемых побочных эффектов :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба Не совсем в тему ответа, но IMHO слово дизайн лучше оставить всяким Юдашкиным. Более употребимо ведь слово проектирование. А касаемо основного вопроса, Я бы ответил в первом приближении примерно так - полностью синхронным можно считать проект, ВСЕ элементы памяти которого изменяют свое состоянии (точнее имеют возможность изменять) одновременно под управлением тактового сигнала (clock). В идеале очередное значение ячейки памяти должно сформироваться на комбинационной схеме до прихода очередного импульса clock. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба А касаемо основного вопроса, Я бы ответил в первом приближении примерно так - полностью синхронным можно считать проект, ВСЕ элементы памяти которого изменяют свое состоянии (точнее имеют возможность изменять) одновременно под управлением тактового сигнала (clock). С этой формулировкой не согласен. Этого же можно легко добиться с использованием асинхронных элементов памяти, сигналов разрешенеия клока (clock gating) для управления ими, и т.п., которые приведут ко всем проблемам асинхронных схем в FPGA, но согласно Вашему определению (возможность смена состояния одновременно исключительно по клоку) останутся синхронными. В идеале очередное значение ячейки памяти должно сформироваться на комбинационной схеме до прихода очередного импульса clock. Ну это никакой не идеал, и даже совсем не обязательное требование. Многоцикловые пути не нарушают синхронности схемы (время прохода через комбинаторный блок меньше N тактов, и результат защелкивается через N тактов после подачи исходных данных. И в средствах проектирования FPGA есть соответствующие средства для описания этих multicycle зависимостей. ЗЫ а слово "дизайн" я скорее бы заменил на "проект", а не на "проектирование" :) Это все таки существительное... И оригинальный англоязычный термин звучит как "fully synchronous design", а все таки не project. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DuHast 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба Многоцикловые пути не нарушают синхронности схемы (время прохода через комбинаторный блок меньше N тактов, и результат защелкивается через N тактов после подачи исходных данных. И в средствах проектирования FPGA есть соответствующие средства для описания этих multicycle зависимостей. Время прохода от тригера до другого через комбинаторный блок больше одного такта, по желанию проектировщика (если хотите дезайнера)? Я Вас правильно понял? Научите, для общего развития. Если можно с привязкой к Quartus, VHDL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба Время прохода от тригера до другого через комбинаторный блок больше одного такта, по желанию проектировщика (если хотите дезайнера)? Я Вас правильно понял? Научите, для общего развития. Если можно с привязкой к Quartus, VHDL. Ну как сделать логически - чтобы сигнал с выхода блока записывался через N тактов после попадания на его вход - это сами ваяйте на чем угодно, хоть в HDL, схематике. Например при помощи конечного автомата. А что касается констрейна и задания таймингов - это "set_multicycle_path" (Quartus, включенный TimeQuest). Без таймквеста тоже какой-то констрейн есть - там целый раздел ассигментов в части "multicycle" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DuHast 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба Ну как сделать логически - чтобы сигнал с выхода блока записывался через N тактов после попадания на его вход - это сами ваяйте на чем угодно, хоть в HDL, схематике. Например при помощи конечного автомата. А что касается констрейна и задания таймингов - это "set_multicycle_path" (Quartus, включенный TimeQuest). Без таймквеста тоже какой-то констрейн есть - там целый раздел ассигментов в части "multicycle" Не понял. Поясните еще раз. Пусть есть код process(clk) begin if(clk='1' and clk'event)then a <= b; end if; end process; пусть b выход какого-нибудь счетчика : b=0,1,2,3,0,1,2,3..., тогда a=x,0,1,2,3... Вы утверждаете, что при помощи Assigment Editor можно заставить Quartus сгенерить схему, такую что a=x,x,x,x,0,1,2,3,0,1... и при этом не будут задействованы дополнительные тригеры, а вся задержка будет за счет комбинаторики. Я Вас правильно понял? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Barbarossa 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба Ну как сделать логически - чтобы сигнал с выхода блока записывался через N тактов после попадания на его вход - это сами ваяйте на чем угодно, хоть в HDL, схематике. Например при помощи конечного автомата. А что касается констрейна и задания таймингов - это "set_multicycle_path" (Quartus, включенный TimeQuest). Без таймквеста тоже какой-то констрейн есть - там целый раздел ассигментов в части "multicycle" Не понял. Поясните еще раз. Пусть есть код process(clk) begin if(clk='1' and clk'event)then a <= b; end if; end process; пусть b выход какого-нибудь счетчика : b=0,1,2,3,0,1,2,3..., тогда a=x,0,1,2,3... Вы утверждаете, что при помощи Assigment Editor можно заставить Quartus сгенерить схему, такую что a=x,x,x,x,0,1,2,3,0,1... и при этом не будут задействованы дополнительные тригеры, а вся задержка будет за счет комбинаторики. Я Вас правильно понял? Как я понимаю, имеется в виду, что если данные обрабатываются комбинационной цепью дольше, чем один такт, то защелкивание результата происходит не каждый такт, а с задержкой на нужное количество тактов. Задержка, разумеется, формируется с помощью дополнительных триггеров. Например, строб действительности данных задерживается с помощью цепочки из нескольких последовательно включенных D-триггеров. А Assigment Editor используется для задания констрейнов для временного анализатора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 27 февраля, 2007 Опубликовано 27 февраля, 2007 · Жалоба нет Вы меня неправильно поняли. Генерите схему Вы сами. А квартусу надо объяснить, что Вы задумали, чтобы он корректно все синтезировал и оптимизировал. Вот пример (сорри в VHDL настолько не смыслю, чтобы писать, да еще и сразу в конфу): module twocycle (in, out, clock); input clock; input [7:0] in; output reg [7:0] out; reg [7:0] in_for_module; wire [7:0] out_from_module; long_time_module long_time_inst (.IN(in_for_module), .OUT(out_from_module)); reg two_cycle_reg; always @(posedge clock) two_cycle_reg <= ~two_cycle_reg; always @(posedge clock) if (two_cycle_reg) begin in_for_module <= in; out <= out_from_module; end endmodule Тут long_time_module это какой-то там модуль, который делает что-то медленное комбинаторное. Которое не укладывается по длительности в 1 такт, но укладывается в два такта. Для того, чтобы данные на него подавались раз в два такта, и считывались тоже раз в два такта, введен триггер "two_cycle_reg", который меняет свое состояние на противоположное с каждым фронтом клока. А выдача данных и прием производятся только при единице в этом триггере, т.е. раз в два клока. Это я так вот задумал. Теперь надо объяснить квартусу, что все пути, проходящие через "long_time_inst", мультицикловые с коэффициентом два (он ведь не телепат, чтобы угадать Ваше желание). Вот тут и надо прописать set_multicycle_path -through long_time_inst.IN 2 - после чего квартус поймет, что данные с этого модуля нужны раз в два такта, и будет его оптимизировать, как будто он работает на пополамной частоте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 28 февраля, 2007 Опубликовано 28 февраля, 2007 · Жалоба ЗЫ а слово "дизайн" я скорее бы заменил на "проект", а не на "проектирование" :) Это все таки существительное... И оригинальный англоязычный термин звучит как "fully synchronous design", а все таки не project. Начнем с того, что фраза "fully synchronous design" (собственно как и само слово design) является контекстно-звисимым и имеет право быть переведенной как в форме существительного, так и в форме глагола. And also vice versa during translation to English language. Замечание по поводу слова project, честно сказать, не понял. Как звучит оригинальный термин "fully synchronous design" Я знаю, а слово project в общей лексике является синонимом слова design. Я то имел ввиду, что понятие "проектирование средств вычислительной техники" (именно проектирование, а не дизайн) Я встречал в книжках, изданных еще до моего рождения. А это, видимо, говорит о некоторых традициях и устоявшейся терминологии. Скажем, если бы Я увидел в литературе фразу Web-проектирование вместо Web-дизайна, то возмутился бы не меньше =) Ну это никакой не идеал, и даже совсем не обязательное требование. Многоцикловые пути не нарушают синхронности схемы (время прохода через комбинаторный блок меньше N тактов, и результат защелкивается через N тактов после подачи исходных данных. И в средствах проектирования FPGA есть соответствующие средства для описания этих multicycle зависимостей. Век живи - век учись. Признаюсь, про многоцикловые пути ничего раньше не слышал. Выглядит интересно, но вот так вот сходу смущает одно обстоятельство - если переходный процесс в комбинационной схеме (КС), выход с которой поступает на вход данных элемента памяти, не завершится за один такт, то в момент прихода очередного фронта clk возможно переключение на входе данных... другими словами - метастабильность. Или Timing Constraints, задаваемые в САПР как раз и призваны бороться с подобными эффектами? С этой формулировкой не согласен. Этого же можно легко добиться с использованием асинхронных элементов памяти, сигналов разрешенеия клока (clock gating) для управления ими, и т.п., которые приведут ко всем проблемам асинхронных схем в FPGA, но согласно Вашему определению (возможность смена состояния одновременно исключительно по клоку) останутся синхронными. Если Вы построите синхронный триггер на основе асинхронного (RS + логика некоторая), и будете использовать подобную конструкцию для построения "fully synchronous design", то какие конкретно возникнут пролемы? По-моему если в систему поступает с определенным периодом некоторый тактовый сигнал (clock), элементы памяти переключются в строго определенные моменты времени (задающиеся фронтом или уровнем сигнала clock), а КС обсчитывается за время пока clock "не активен", то все должно быть пучком. P.S.: пока копался в Google, напоролся на термины GALS (Globally Asynchronous Localy Synchronous) и LAGS (Localy Asynchronous Globally Synchronous). Видимо с этой позиции fully synchronous design должен записываться как GSLS или LSGS... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 28 февраля, 2007 Опубликовано 28 февраля, 2007 · Жалоба Век живи - век учись. Признаюсь, про многоцикловые пути ничего раньше не слышал. Выглядит интересно, но вот так вот сходу смущает одно обстоятельство - если переходный процесс в комбинационной схеме (КС), выход с которой поступает на вход данных элемента памяти, не завершится за один такт, то в момент прихода очередного фронта clk возможно переключение на входе данных... другими словами - метастабильность. Или Timing Constraints, задаваемые в САПР как раз и призваны бороться с подобными эффектами? Нет, констрейны с этим не призваны бороться. С этим призваны бороться сами разработчики, проектируя схему таким образом, чтобы сигнал разрешения записи в регистр, стоящий на выходе комбинаторного модуля никак не появился раньше N-ного такта после подачи данных на вход этого модуля. Что гарантирует неизменное состояние на входе элемента памяти на протяжении всех N тактов. А констрейн призван сказать синтезатору, чтобы он уложил времянку модулю в эти N тактов. И, кстати, объявляется мультицикловым путь только через "долгий" модуль, а путь сигнала разрешения - естественно остается обыкновенным. Если Вы построите синхронный триггер на основе асинхронного (RS + логика некоторая), и будете использовать подобную конструкцию для построения "fully synchronous design", то какие конкретно возникнут пролемы? По-моему если в систему поступает с определенным периодом некоторый тактовый сигнал (clock), элементы памяти переключются в строго определенные моменты времени (задающиеся фронтом или уровнем сигнала clock), а КС обсчитывается за время пока clock "не активен", то все должно быть пучком. Если Вы проектируете ASIC, и применяете защелки с логикой на клоке, делая из них "якобы синхронные элементы", то проблем не возникнет, так как при place&route и последующем IPO САПР вставляет где надо элементы задержки в цепи данных, выдерживая таким образом корректный hold time. Если Вы это применяете в FPGA, то возникнут (точнее могут возникнуть) проблемы с hold time, т.е. при снятии разрешения записи с защелки данные меняются на новые раньше необходимого времени. Средства P&R для FPGA не умеют (или плохо умеют) сами корректно выдерживать холды для асинхронных элементов. Т.е. с сетапами все ОК, соптимизировать разводку на минимальное время они способны, а вот наоборот, вставить доп. задержку - увы. С этим, кстати, я сам столкнулся, прототипируя ASIC в FPGA. Пришлось самому по условной компиляции для случая FPGA вставлять сопливые цепи задержки шины данных, без чего глюки были во всей красе (у меня разрабатывается микроконтроллер, и почти все регистры периферийных устройств построены из асинхронных элементов памяти в целях экономии площади). И еще, в FPGA физически нет возможности построить дерево тактовых сигналов с отключаемыми ветвями, поэтому тактовые сигналы, управляющие асинхронными элементами памяти, оказываются разведенными через общие пути, а не через сбалансированное дерево. Что тоже дает разброс сетапа-холда нале-напра. ЗЫ про словоблудие - все таки я бы в качестве существительного применял бы слово дизайн, а в качестве глагола - проектирование. Собственно об этом и хотел сказать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Oldring 0 28 февраля, 2007 Опубликовано 28 февраля, 2007 · Жалоба Начнем с того, что фраза "fully synchronous design" (собственно как и само слово design) является контекстно-звисимым и имеет право быть переведенной как в форме существительного, так и в форме глагола. And also vice versa during translation to English language. Замечание по поводу слова project, честно сказать, не понял. Как звучит оригинальный термин "fully synchronous design" Я знаю, а слово project в общей лексике является синонимом слова design. Я то имел ввиду, что понятие "проектирование средств вычислительной техники" (именно проектирование, а не дизайн) Я встречал в книжках, изданных еще до моего рождения. А это, видимо, говорит о некоторых традициях и устоявшейся терминологии. Скажем, если бы Я увидел в литературе фразу Web-проектирование вместо Web-дизайна, то возмутился бы не меньше =) Любопытно. Человек борется с использованием английской кальки в русскоязычном тексте, но сам пользуется английской традицией написания слова "я". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DuHast 0 28 февраля, 2007 Опубликовано 28 февраля, 2007 · Жалоба Тут long_time_module это какой-то там модуль, который делает что-то медленное комбинаторное. Которое не укладывается по длительности в 1 такт, но укладывается в два такта. Для того, чтобы данные на него подавались раз в два такта, и считывались тоже раз в два такта, введен триггер "two_cycle_reg", который меняет свое состояние на противоположное с каждым фронтом клока. А выдача данных и прием производятся только при единице в этом триггере, т.е. раз в два клока. Это я так вот задумал. большой :a14: . Недавно закончил большой проект (если хотите дизайн), так две недели ушло на то чтобы заставить long_time_modul работать на имеющейся частоте. Знал бы о таком приёме, он бы меня очень выручил. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
maksya 0 28 февраля, 2007 Опубликовано 28 февраля, 2007 · Жалоба Нет, констрейны с этим не призваны бороться. С этим призваны бороться сами разработчики, проектируя схему таким образом, чтобы сигнал разрешения записи в регистр, стоящий на выходе комбинаторного модуля никак не появился раньше N-ного такта после подачи данных на вход этого модуля. Что гарантирует неизменное состояние на входе элемента памяти на протяжении всех N тактов. А констрейн призван сказать синтезатору, чтобы он уложил времянку модулю в эти N тактов. И, кстати, объявляется мультицикловым путь только через "долгий" модуль, а путь сигнала разрешения - естественно остается обыкновенным. Ясно. Т.е. придерживаем сигнал enable пока переходный процесс на входе данных регистра не завершится. Таким образом нет необходимости снижать тактовую частоту всего проекта из-за "тормознутого блока". А на сколько оправдан подобный поход? Почему бы не раскрошить КС "долгого" модуля конвеером? Если Вы проектируете ASIC, и применяете защелки с логикой на клоке, делая из них "якобы синхронные элементы", то проблем не возникнет, так как при place&route и последующем IPO САПР вставляет где надо элементы задержки в цепи данных, выдерживая таким образом корректный hold time. Если Вы это применяете в FPGA, то возникнут (точнее могут возникнуть) проблемы с hold time, т.е. при снятии разрешения записи с защелки данные меняются на новые раньше необходимого времени. Средства P&R для FPGA не умеют (или плохо умеют) сами корректно выдерживать холды для асинхронных элементов. Т.е. с сетапами все ОК, соптимизировать разводку на минимальное время они способны, а вот наоборот, вставить доп. задержку - увы. С этим, кстати, я сам столкнулся, прототипируя ASIC в FPGA. Пришлось самому по условной компиляции для случая FPGA вставлять сопливые цепи задержки шины данных, без чего глюки были во всей красе (у меня разрабатывается микроконтроллер, и почти все регистры периферийных устройств построены из асинхронных элементов памяти в целях экономии площади). И еще, в FPGA физически нет возможности построить дерево тактовых сигналов с отключаемыми ветвями, поэтому тактовые сигналы, управляющие асинхронными элементами памяти, оказываются разведенными через общие пути, а не через сбалансированное дерево. Что тоже дает разброс сетапа-холда нале-напра. Понятно. Так глубоко копать мне на практике не приходилось. Собственно поэтому оценивать возможности САПР не довелось. Но тема ведь не ограничена только FPGA. И почему формулировка определения "fully synchronous design" должна страдать от несовершенства каких-то там программ и микросхем? ЗЫ про словоблудие - все таки я бы в качестве существительного применял бы слово дизайн, а в качестве глагола - проектирование. Собственно об этом и хотел сказать. Фразу "полностью синхронный дизайн" не приходилось раньше встречать в литературе. Буду признателен если кините в меня ссылкой. Любопытно. Человек борется с использованием английской кальки в русскоязычном тексте, но сам пользуется английской традицией написания слова "я". К черту Англию. Пишу "Я" с заглавной буквы только из уважения к собственной личности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться