Маленький велосипед для моделирования цифровых схем

Задуман как начальный шаг создания своего проца на рассыпухе, но дело дошло
пока только до моделирования и медленно двигается. Это еще один язык описания
схем, только очень простой, минимальный. Можно начать с примера.


use "base.edl" ;

# RS NOR latch

module latch_RS_NOR {

	place nor dd1 dd2 ;

	port in r s ;
	port out q nq ;

	link dd1.i1 r ;
	link dd2.i2 s ;

	link + dd1.i2 dd2.o1 nq ;
	link dd2.i1 dd1.o1 q ;
}


Здесь описан RS триггер на NOR логике. Общая схема такова, что моделируемая
схема это модуль, каждый модуль состоит из модулей которые могут быть
соединены своими входами/выходами. Разбиение на более мелкие модули
происходит до некоторого уровня где модули становятся встроенными, для пример
OR или AND встроенные, они реализованы в C коде. Описание схемы сводится к
описанию топологии соединения базовых элементов и ничему более. Все выходящее
за рамки этой простой идеи сделано для моделирования, для примера это specify
конструкция для назначения параметров модуля, которые имеют значение только
для встроенного модуля.

Вот пример с результатом моделирования, это 3-разрядный счетчик на D триггерах.
На вход подаются импульсы из модуля clock.


use "base.edl" "io.edl" "hi/latch.edl" ;

module sim {

	place clock		clk ;
	place latch_D_sync_pe	dd1 dd2 dd3 ;
	place print		p0 p1 p2 p3 ;

	specify p0 { format = "   d0: %d"; ctl = 0; }
	specify p1 { format = "  d1: %d"; ctl = 0; }
	specify p2 { format = " d2: %d"; ctl = 0; }
	specify p3 { format = "d3: %d"; ctl = 0; }

	link clk.o1 p0.i1 ;

	link dd1.q p1.i1 ;
	link dd1.c clk.o1 ;
	link dd1.d dd1.nq ;

	link dd2.q p2.i1 ;
	link dd2.c dd1.q ;
	link dd2.d dd2.nq ;

	link dd3.q p3.i1 ;
	link dd3.c dd2.q ;
	link dd3.d dd3.nq ;
}



$ ./edsim -t 16 ../cpu/sim.edl

 (обрезано)

   d0: 0
  d1: 0
 d2: 1
d3: 0
   d0: 1
  d1: 1
 d2: 0
d3: 0
   d0: 0
  d1: 1
 d2: 0
d3: 0
   d0: 1
  d1: 0
 d2: 0
d3: 0


code.google.com/p/edutils/
  • 0
  • 30 августа 2011, 20:58
  • amaora

Комментарии (32)

RSS свернуть / развернуть
А зачем свой проц на рассыпухе?
Когда-то давно (в конце 80-х) я сделал одноразрядный (я его назвал логическим) процессор на 155 серии — было интересно, но бессмысленно.
Можно сделать на микросхемах 589, 1802, 1804 и других серий — только зачем? Это давно пройденный этап.
0
  • avatar
  • mzw
  • 30 августа 2011, 23:17
Хмм… А что он умел делать? Я думал о меньшей разрядности, но не пойму как можно в 1 бит уместить…
0
Мог управлять простейшими устройствами, у которых в качестве сигналов с датчиков был сигнал 0 / 1 — логические устройства, переключатели или компараторы. Управлял светодиодами, тиристорами и реле.
0
А какая адресация памяти данных/кода, структура команд? Вопрос животрепещущий :-)
0
Память данных — 1 микросхема 155РУ5 — 256 байт.
Операции -логические — И, ИЛИ, Исключающее ИЛИ, И-НЕ, ИЛИ-НЕ, Исключающее ИЛИ-НЕ, 0, 1.
Переход безусловный и по результату.
Команды были двухбайтовые (адрес памяти, устройства ввода-вывода или адрес перехода прямо указывался в команде).
Вообще-то сейчас уже трудно вспомнить.
0
Понятно, спасибо, это было круто :-)
0
Посмотри MC14500. Тоже однобитный процессор. Не знаю, можно ли такой сейчас где-нибудь добыть.
0
Не, это цена музейного экспоната, а не микросхемы.
0
да, действительно, рассыпуха — пройденный этап
есть же плис, в ней делай!
0
Судя по статье он в ней и делает пока. Но вот на рассыпухе это ппц будет. Я давно давно в Electronic Workbench делал от делать нечего, тоже одноразрядный.
0
С плис проблема, что они закрытые и привязаны к софту производителя. Или все такие есть те которые можно скофигурить самописным софтом прочитав даташит?
0
Почему закрытые? И зачем самописный софт? Взять к примеру альтеровский MAX II, софт под него можно скачать с сайта производителя и спокойно использовать.
Задите на marsohod.org, там море интересного.
0
Ну это как если бы для AVR был только один C компилятор от Atmel а набор инструкций не был бы нигде описан.
0
хм. Неправильное сравнение. Скорее были бы только коды инструкций в hex виде, а ассемблера не было бы.
Чем Вас AHDL, VHDL, Verilog не устраивают?
0
Так значит можно только лишь прочитав документацию написать в hex конфигурацию плис и своими силами (по известному протоколу) поместить это внутрь так чтобы работало как ожидается?

VHDL/Verilog слишком сложные, не в том значении, что я ничего там не понял. Они берут на себя слишком много, для примера наличие if конструкций.
0
Руками само собой не выйдет без усиленного разбивания головы… Такое можно только на PAL-ах.

А насчет сложностей VHDL/Verilog — если ограничиваться только синтезируемым подмножеством, то никаких излишеств не остается :-)
0
Это было бы подобно использованию C++ в C стиле.
0
Нет, это нормально и так собственно люди и работают. На VHDL решают 2 разных задачи — симуляция и синтез.
При синтезе именно так и работают, и получают на выходе в конечном итоге маски / прошивку для FPGA.
0
Не очень понял, видимо нужны примеры, скажем ALU, для симулиции и синтеза, люди пишут код два раза?
0
Нет, пишут один раз. Все что можно синтезировать — можно просимулировать, причем на всех уровнях, вплоть до масок.

Но если надо что-то набросать по-быстрому — можно написать на не-синтезируемом и так гонять в симуляторе, заменяя по мере разработки такие «заглушки» реальными реализациями.
0
Даже если описать топологию так же как у меня, без использования алгоритмо-подобных кострукций, что-то все же мне не нравится, видимо, что не я автор языка :) свой велосипед лучше.
0
0
А что Вам мешает все писать на логических элементах? Ведь в конечном итоге в ПЛИС все построено на типовых элементах в которых собственно и измеряется емкость этой самой ПЛИС
0
Нет. Синтезируемое подмножество это та часть VHDL которая может быть преобразована в реальную логическую схему в кристалле. Вот например генератор это не синтезируемый элемент. А триггер синтезируемый.
0
Так значит можно только лишь прочитав документацию написать в hex конфигурацию плис и своими силами (по известному протоколу) поместить это внутрь так чтобы работало как ожидается?
Может и можно, только зачем?
Хотите сказать что писать байтики ручками проще чем VHDL? Ужас. Я даже сейчас не возьмусь писать прогу для Z80 на чистом hex-коде.
0
Чтобы была возможность работать с устройвом без проприетарного софта. Просто не понимаю как такой уровень документированности можно считать приемлемым.
0
Не говоря уже о том, что для хранения этих байтиков к плиске обычно прилигается ПЗУ мегабит так на 16 минимум.
0
Интересно. Автор, пиши еще.
0
  • avatar
  • tank
  • 31 августа 2011, 07:30
Что-ж, мы занимаемся похожими вещами, вопрос лишь в том, насколько низкий уровень рассыпухи :-)

Проходя по тем же местам — я сразу отказался от классической реализации регистров/счетчиков, очень уж много мяса нужно.

«Аналоговые» альтернативы на базе бистабильного мультивибратора гораздо компактнее, работают до ~10Mhz на столе.
1 бит синхронного счетчика на T-триггерах например обходится в 3 транзистора.
0
а можно поподробнее? ссылку там какую-нибудь, например
0
Ссылочек тут много не привести… Можно только показать реализацию делителей в www.transistorclock.com/ — там в документации полная схема.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.