Search
Write a publication
Pull to refresh

Comments 13

Вникать лениво, но:

1) В опубликованной здесь схеме я вижу элементы "исключающее или" -- но это не простейшие элементы, а составные, так что сложность схемы будет больше, чем кажется.

2) Перевод выхода в Z или обратно зачастую происходит медленнее, чем задержка распространения сигнала через логический элемент.

Мной двигала идея скорости работы, а не простоты. Тут нужно проводить тестбенчи. Их мне удалось провести только один раз , пока что, потом всё как с поломанным телефоном. Перевод в состояние Z , насколько мне известно, например у электронного ключа, состоящего всего из одного транзистора и имеющего точно такую таблицу истинности как у логического элемента bufif1, то же самое что состояние "закрыто", то есть задержка - время рассасывания заряда базы биполярного транзистора- если используются они. Вообще не хотелось бы заниматься гипотезами, на фоне отсутствия хорошей литературы, могущей дать быстро нужный ответ, поэтому лучше практика. Не берусь утверждать любую точку зрения, потому что даже вся литература, мной приобретенная, включая искусство схемотехники - однозначного ответа не даст, всё не перечитал, но "ключевые" моменты изучил все в каждой. Поэтому предпочитаю говорить о практике с точки зрения именно практической. Тест бенчи будут, возможно на выходных я просто проведу их для всех логических элементов, но вот в целостности платы уверенности нет пока что, поэтому я не смогу дать быстро нужный ответ на замечание. У меня нет никакой абсолютной уверенности, мной движет только личный опыт решения разных задач и желание создания процессора своей архитектуры (стоит отметить, что например на поиск решения для альтернативы сверхточных нейросетей у меня ушло не мало времени-годы, но вдохновляла важность задачи, да и самих таковых), публикация не носит характера туториала. Поэтому это всё, что пока что могу.

Скорости не будет - перенос проходит через все 8 -16 - 32 - 64 сумматора ПОСЛЕДОВАТЕЛЬНО и скорость сумматора по факту зависит от скорости переноса.

В ПЛИС для переноса сделана специальная высокоскоростная цепь.

Причём именно в ПЛИС, поскольку там надо иметь возможность "сборки схемы", а в реальном "жёстком" железе -- специальная логика ускоренного переноса.

А что в этом аниматоре элемента MUX 2:1 нет? Найдите его в схеме сумматора. А потом найдите ещё один такой же.

В заголовке появилось слово "надёжный".
Что ж, проверим. Как? Минимизацией.
Обозначим a=term2; c=term1; b=intransfer;
Тогда два элемента XOR это - d=a^b; e=a^c;
Что такое маленькие треугольнички?
Буферы с выходом в третье состояние? Нет.
Их нельзя соединять по выходу. Это ключи.
А значит имеем два мультиплексора,
которые дают sum=!be+be; carry=!da+dc;
Минимизируем и получаем
sum = !a*c+a*!c; carry = a*b+a*c+b*c;
Перенос правильный, сумма - неправильная.
Как исправить?
Вот так: d=a^b; e=!(a^b); sum=!c*d+c*e; carry=!d*a+d*c;
И чем это лучше встроенного сумматора
d=a^b; sum=d^c; carry=!d*a+d*c ???

В заголовке появилось слово "надёжный".Что ж, проверим. Как? Минимизацией.Обозначим a=term2; c=term1; b=intransfer;Тогда два элемента XOR это - d=a^b; e=a^c;Что такое маленькие треугольнички?Буферы с выходом в третье состояние? Нет.Их нельзя соединять по выходу. Это ключи.А значит имеем два мультиплексора,которые дают sum=!be+be; carry=!da+dc;Минимизируем и получаемsum = !a*c+a*!c; carry = a*b+a*c+b*c;Перенос правильный, сумма - неправильная.Как исправить?Вот так: d=a^b; e=!(a^b); sum=!c*d+c*e; carry=!d*a+d*c;И чем это лучше встроенного сумматораd=a^b; sum=d^c; carry=!d*a+d*c ???

Раз уж вы говорите о чем-то конкретном, то и опишите это в том-же виде стиле , на который заявляете, и повторите в симуляторе. Поэтому будьте добры - не надо заявлять, что нечто с крышею это тоже дом. Да у него есть крыша, но много чего не подтверждено, и нет уверенности что с первым паводком это не уплывёт как шалаш, как любят говорить о таких видах описания - "не известно во что это изложит компилятор". Это не мои слова - "неизвестно во что это откомпилирует компилятор", причём говорилось это именно о структурном виде описания, который ккомпилятор компилирует как раз именно точь в точь элемент к элементу, а провод к проводу. К тому-же ваши называния полноценного симулятора аниматором вообще не располагают доверять вам на слово. И именно поэтому я ещё и проверю вашу схему в симуляторе сам. Как только вы предоставите схему. Надеюсь, что симулятор вы назвали аниматором по ошибке, поэтому жду от вас схемы. На словах знаете - все мастаки, а как дела касается, так всё - оказывается не работает. Минусы не надо ставить - нужна рабочая схема, и желательно в симуляторе, и желательно чтобы материал был в том виде, как и у меня (анимированный), чтобы сразу все видели о чём вы говорите. А ваши слова не надежны, со слов ваших же коллег - "неизвестно во что это откомпилирует компилятор".

1) В ответах нельзя прикреплять картинки. Если Вам лень перевести мои формулы в схему, скопируйте их в Verilog и постройте схему автоматически.

2) Ваш симулятор умеет получать из схемы булевы функции? А минимизировать их? Подсказка - поищите в help-е слова Espresso или ABC. Если таковых нет, подавайте на схему все 8 входных наборов один за другим. Я такими глупостями заниматься не буду, мне достаточно формул, которые после минимизации должны давать XOR3 и MAJ3.

3) Уж коли Вы заговорили об асинхронной схеме, и подаёте входные наборы, то почитайте что такое multiple input change. Неудачное изменение одного набора на другой может привести к состязаниям (hazards). В синхронной схеме состязания заканчиваются к приходу следующего такта. Так специально подбирают. В вашей схеме инвертор на входе мультиплексора - это потенциальная причина состязаний, нужно проверять.

4) Я ожидал, что Вы возразите и скажете, что выходы буферов с переключением в третье состояние можно соединять. Можно, если гарантировать что в 0 или в 1 находится только один из них, а все остальные в Z. Но лучше предусмотреть аппаратную защиту от дурака - либо по управлению, либо запретом на такое соединение. Кроме того, покажите, что китайцы дают возможность подавать на такие буферы сигналы, а не константы.

Да, я не знал о том, что можно прикреплять картинки. Просто потому, что очень редко пишу комментарии на Хабр. Кроме того, у меня не было желания искать как прикрепить картинку. Почему? Потому что я нашёл ошибку в Вашей схеме и исправил её. Вы не сказали мне спасибо, ни за то, ни за другое. Вы всё ещё хотите сделать триггер из сумматора? Могу предложить делитель частоты на два из элементов, составляющих сумматор. Картинка у меня была готовая. Схема на картинке известна с 1956 года и взята из отчёта
J. C. Nelson, "Speed-independent counting circuits," Report no. 71,Digital Computer Laboratory, University of Illinois at Urbana-Champaign, 1956.

Да, я не знал о том, что можно прикреплять картинки.

Не только об этом. Причём даже с нескольких раз Вы не перестаёте не знать.

Потому что я нашёл ошибку в Вашей схеме и исправил её. 

В моей схеме нет никакой ошибки, она проверена в симуляторе и на самом FPGA, про ошибку это ваши фантазии и за них разумеется никаких спасибо Вы не дождётесь. Моя схема как была без ошибки до вашего появления - так и осталась без неё, никто вам не давал доступа к редактированию моей публикации тем более схемы. Я жду от вас именно того, на что вы заявляете с своими уравнениями, и при этом прошу учитывать вас вот этот ваш комментарий

Во что компилируются условные обозначения элементов этой схемы, в LUT или в элемент XOR с мультиплексором 2:1?

https://habr.com/ru/articles/857444/comments/#comment_27568180

, который даёт понять. что вы не знаете что и во что компилирует компилятор. Доношу до Вас в очередной раз, в надежде быть услышанным : структурный вид описания (схему) компилятор не переделывает никак при синтезе, и синтезирует её именно в том виде - в виде схемы, со всеми теми элементами и проводами, как она описана (схема в тектстовом виде), в то время, как все другие виды описания компилятор уже переводит на язык описания схем при синтезе, причём переводит согласно логике в него заложенной разработчиками, в то время как структурное описание остаётся однозначным и не искажается и не изменяется никак (какой схема была до синтеза - такой она останется и после, без каких либо изменений).

Заранее спасибо за понимание, если конечно оно возможно вообще, в Вашем случае.

1) Любую декомпозицию можно записать как булеву формулу, потом раскрыть скобки, получить ДНФ и эту ДНФ минимизировать. Я это сделал. Для выхода суммы в Вашей схеме после минимизации НЕ получилось ожидаемое XOR3. Проделайте всё то же самое сами, может быть у Вас получится. Аргумент о том, что только симулятору можно доверять я не принимаю. Доверять можно и нужно уравнениям. Симулятор нужен для того чтобы проверить динамические процессы. Устанавливать его я не собираюсь, он мне не нужен.

2) FPGA состоит из логических блоков, а каждый блок состоит из LUT, схемы переноса (XOR2 + MUX 2:1), триггеров (защёлок) и настраиваемых связей. Таким образом, инвертора, как отдельного элемента в блоке нет. Чтобы его реализовать нужно использовать LUT целиком. Именно поэтому мне не понятно что Вы хотите сказать схемой из Википедии, где используются AND2 и инверторы. Эта схема предназначена для того, чтобы продемонстрировать функциональную полноту базиза и больше не для чего. Чтобы экономить LUT, а значит площадь, нужно делать декомпозицию во многовходовые элементы (4 или 6 входов, в зависимости от конкретной FPGA). Чтобы реализовать конкретный элемент на конкретной LUT ( по координатам) нужно использовать instantiation. Это самый низкий уровень программирования. Относится ли он к структурному стилю Verilog или нет - не важно, а важно то, что это точная настройка. Про instantiation я уже писал и даже привел конкретный пример для Gowin. Вы не обратили на это внимания.

Для выхода суммы в Вашей схеме после минимизации НЕ получилось ожидаемое XOR3.

Это вовсе не означает что в моей схеме ошибка.

Доверять можно и нужно уравнениям.

А никто и не говорил что им не доверяет, просто я знаю что описание схемы в структурном виде так и синтезирует схему, такой, какая она есть, и мне это и нужно.

Это самый низкий уровень программирования. Относится ли он к структурному стилю Verilog или нет - не важно, а важно то, что это точная настройка.

Нет это важно. Я не делаю проект для FPGA, я делаю свою архитектуру, поэтому это важно, и в данном случае для меня и является самым низким уровнем программирования - именно описание в структурном виде на уровне винтелей (переходить к уровню транзисторов не вижу смысла, хотя и этот вид немного у меня присутствует в виде электронных ключей или так называемых буферов трёх состояний), которое я смогу переносить на любую плату любого производителя - раз, и которое при синтезе не изменит первоначальной схемы - два.

Кроме того, тот уровень, о котором Вы говорите не является самым низким, никак, так как самый низкий вероятно будет верхний в следующем списке, приведено из книги

В общем случае язык Verilog позволяет выполнять описание проектов на следующих уровнях:

транзисторов;

вентилей;

логических уравнений;

регистровых передач (register transfer level- RTL);

поведенческом (behaviorial);

структурном (системном).

Так вот всё что я сделал - назвал стиль описания видом описания (структурный стиль описания и структурный уровень - не одно и то же), поскольку предпочтения тут не при чём и вопрос чисто технический. Вид описания у меня структурный, а уровень - вентильный. Так что Ваша помощь далеко таковой не является, не нужно никого вводить в заблуждение.

Вы не обратили на это внимания.

Я не обращаю внимание на малозначимые моменты (лучше сосредоточить внимание на ключевых местах), я достаточно внимательно отслеживаю поток ваших сообщений. Вам не нужно мне "помгать", лучше помогите (без кавычек) своим ближним. Мне помогут книги, как и в этот раз.

Естесственное сокращение сумматора

https://www.cyberforum.ru/blogs/223907/blog8733.html

. Никаких XOR3. А вот когда я уже буду делать на его базе триггер - тогда уже адаптирую уравнения под удобное применение, а до того вообще не надо было, как и до вот этого

В воскресенье ради интереса потестирую.

Уравнения конечно применю, но только когда начну триггер создавать на базе сумматора, и то уравнения адаптированные будут, в том виде, когда они дают вот такой разультат

https://habr.com/ru/articles/862214/#comment_27630546

они вообще не нужны, разве что голову поморочить тому кто их знает. А вот адаптировать - будет полезным, так как много там (в методах уравнений) вещей интересных. А пока что - не применялось мной в программировании и схемотехнике.

Sign up to leave a comment.

Articles