Author |
Message |
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Нечто сподвигло меня вчера засесть за современный C++ и начать под лицензией GPLv3 писать систему симуляции, которая в перспективе могла бы быть пригодна служить в качестве HDL на замену всех этих ваших Вэрилогов https://gitlab.com/ternary/trcmПрожэкт на Хакадее: https://hackaday.io/project/160393-trcm
|
12 Aug 2018 19:53 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Короче - до этого момента я всегда все свои симуляшные движки писал отталкиваясь от идеи, что у нас есть входы и есть выходы, но в реальности всё не так - источники напряжений могут подключаться и отключаться от проводников (двунаправленные сигналы) - тот же FPGA например невозможно сэмулировать не имея возможности переподключаться то так, то эдак. Вобщем я решил идти от уже проверенных промышленных подходов (добавив немного своего троичного) - на проводник могут накладываться вот такие значения: Например на NC может наложиться PULLUP, на который может наложится скажем FALSE, а вот если на проводнике был FALSE, то при попытке применить к нему TRUE результирующее состояние получится INVALID P.S. 18 августа 2018 добавил "любое двоичное значение" X и "любое троичное значение" Y, а также подтяжку к среднему значению '-' (PULLMID)
|
12 Aug 2018 20:05 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Пример играния с шинами (C++ имеет возможность шаблонить классы цифрами): Пока есть только оператор && для шин и & для отдельных сигналов (Signal это просто другое название для Wire<1>) - позже добавлю все остальные логические и арифметические операции для работы с числами произвольной длины в битах и тритах (плюс будут типы данных с фиксированной и плавающей точкой - в частности эта либа покроет функционал вот этой моей недоделки). Чтобы посимулить автоматы пользователь должен создать независимые модули в виде классов, которые наследуются от класса Entity, и определить им конструктор для инициализации и метод run() для прохода шага симуляции (может тогда этот метод переименовать в step?): Входы и выходы обозначены чисто формально - по ходу программы их назначение может меняться и одна и таже внешняя цепь в разное время может использваться и как вход, и как выход В перспективе хочу добавить возможность отпочковывать методы run в треды, чтобы симуляция юзала многокоровые процы по максимуму (современный C++ поддерживает многопоточность на уровне самого языка, точнее на уровне STL) P.S. Можно попробовать написать конвертер из верилога в такое представление на сях++, чтобы погонять существующие большие мягкие процы...
|
12 Aug 2018 20:07 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ну надо же! А я знаю здесь не форуме одного человека, который называл это всё " грязными хаками"! Тебе сказать, кто это, или сам догадаешься?
_________________ iLavr
|
13 Aug 2018 07:07 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Ну таки хаки, только без них FPGA не сымитируешь P.S. Заменил X на ? и переименовал run() в step()
|
13 Aug 2018 08:08 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Без них ты и троичную логику не сымитируешь Но ты ведь так упирался! http://www.nedopc.org/forum/viewtopic.php?p=140444#p140444Кстати, " ? " , на мой взгляд, будет сбивать с толку. Лучше подбери подходящую букву.
_________________ iLavr
|
13 Aug 2018 08:20 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Ну если там всё железобетнно - входы есть входы, выходы есть выходы, то вполне можно и сымитировать
|
13 Aug 2018 08:24 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Железно ли, бетОнно ли, но одними лог. "0" и "1" - не обойтись. Придётся так или иначе вводить лог. "1/2" , несмотря на то, что " входы есть входы, выходы есть выходы". О чем, тебе, собственно, и говорили: http://www.nedopc.org/forum/viewtopic.php?p=140424#p140424
_________________ iLavr
|
13 Aug 2018 08:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Да я собственно свой DDT имел ввиду - там только 3 значения N,O,P и никаких «грязных хаков» Ну и плюс X при задании таблиц истинности...
|
13 Aug 2018 09:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
По существу есть претензии? Вопросы?
Я вот думаю что наверное надо спрятать от юзера чтение снаружи и запись вовне - скажем неявно это делать для железобетонных входов и железобетонных выходов (а такие точно будут). А "входовыходы" менять по ходу работы (подключая их то как вход, то как выход, то как отключено) плюс наверное надо завести понятие "выход с Z состоянием", а также входы подтянутые к земле или к питанию. Специальные OK выходы наверное заводить не стоит, хотя что такое OK? Это выход который может либо отключаться либо подключаться к земле, а на той стороне стоит подтяжка к питанию - так что это можно сымитировать уже имеющимися средствами...
|
13 Aug 2018 18:45 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
С другой стороны когда всё навиду, то всё прозрачно, вот так например можно Z-состояние делать: И входы можно читать не все всегда, а только те, которые нужны в текущем состоянии и т.д.
|
13 Aug 2018 19:21 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Ну 0 и 1 тоже уже не буквы
|
13 Aug 2018 19:30 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Есть момент, о котором я забыл - надо сделать так, чтобы было достаточно просто добавлять вложенные модули как члены класса! Вложенный модуль не будет иметь доступ к внешним цепям, но будет иметь доступ ко внутренним... И потом один и тот же модуль может иметь несколько инстансов - короче поиграл с лямбдами и макросами - вот такой трешак получился: TRASH Наверное так делать ненадо...
|
13 Aug 2018 22:35 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Вот как надо: Если цепляемся к сигналу, имя которого начинается с точки, то к имени сигнала добавляется префикс имени модуля - таким образом можно заводить как бы локальные цепи и потом модули специфицируются в конструкторах дочерних классов - по одному конструктору на объект...
|
13 Aug 2018 22:54 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22743 Location: Silicon Valley
|
Короче вот - придумал как внутренние объекты добавлять: Вышеприведённая программа печатает вот это:
|
14 Aug 2018 21:01 |
|
|