Просмотр полной версии : Любительская девборда на Z80
Вобщем назрела мысль, ввиду того, что дома особо нет времени заниматся проектами на Спеке, а на работе реал достаточно проблематично держать - возникла мысль в создание сего девайса.
После обсуждения получился такой вариант, скажем основной:
1. процессор - Z80 (в корпусе DIP40)
2. ПЛИС - EPM570 (CPLD) 3.3V (в корпус TQFP144)
3. ОЗУ - SRAM 512Кб 3.3V (например CY7C1049DV33 в корпусе TSOP2-44)
4. ПЗУ - FLASH 512Кб (например AM29F040 в корпусе PLCC-32)
5. Контроллер PS/2 клавы и RS232 порт - ATmega162 (в корпусе TQFP44)
6. Буферы шины - микросхемы 74ALVC164245 (в корпусе TSSOP48)
7. Кварцевый генератор - 25,175МГц KXO-210 (в корпусе DIL8)
8. Внешняя шина Nemo Bus - 1 слот + 1 ножевой
9. Выход видео - VGA разъем
10. Разъем SD карты - типа 104C-TAA0-R
Картинка печатки
http://s59.radikal.ru/i165/1302/a5/2c0f5da46742t.jpg (http://radikal.ru/F/s59.radikal.ru/i165/1302/a5/2c0f5da46742.png)
http://s42.radikal.ru/i098/1302/c7/03368fd8fb80t.jpg (http://radikal.ru/F/s42.radikal.ru/i098/1302/c7/03368fd8fb80.png)
Вот как выглядит пустая печатная плата
http://s004.radikal.ru/i206/1304/66/b3cdbda78486t.jpg (http://radikal.ru/F/s004.radikal.ru/i206/1304/66/b3cdbda78486.jpg)
Тема в барахолке http://zx-pk.ru/market/viewtopic.php?f=7&t=812#p7180
Документация на страничке http://micklab.narod.ru/devboardz80.htm
Базовая конфигурация:
1. Видео
- Текстовый режим 80x25 символов;
- Строчная развертка 31480КГц
- Кадровая развертка 70Гц
- 16 цветов
2.Порты
- Порт управления страницами ПЗУ (64 страницы по 8кб) - 0С0h
- Порт управления страницами ОЗУ (64 страницы по 16кб) - 0C1h
- Порт управления памятью - 0C2h
- Порт бордера - 0C3h
- Порт данных SD Card - 0C6h
- Порт управления SD Card - 0C7h
- Порты AVR - 80h...0BFh
поищи тему от ZST, он тоже нечто подобное (но попроще) собирается воплощать.
поищи тему от ZST, он тоже нечто подобное (но попроще) собирается воплощать.
Мне попроще не нужно. Я лично написал какие требования к одноплатной не спектрум борде нужны.
ZX-Evo не подходит? Только 8-й пункт не совпадает - DRAM 4 МБ вместо статики 128К.
ZX-Evo не подходит? Только 8-й пункт не совпадает - DRAM 4 МБ вместо статики 128К.
Про Эву я знаю, если тут написал - значит смысла в ней нет.
Viktor2312
10.12.2012, 11:16
Вобщем назрела мысль, ввиду того, что дома особо нет времени заниматся проетами на Спеке, а на работе реал достаточно проблематично держать - возникла мысль в создание сего девайса.
Идея такова:
1. размеры платы - mini-ITX или nano-ITX, или меньше
2. реальный процессор Z80
3. разъем шины ZX-BUS
4. клавиатура под PS/2
5. видеовыход VGA c текстовым режимом.
7. COM порт для связи с ПЦ
8. память статика не менее 128кб
Пока так. Высказываем свои мысли.
Очень интересно. Я себе такую хотел бы иметь.
И сколько времени потребуется Вам, чтобы реализовать этот проект?
И сколько времени потребуется Вам, чтобы реализовать этот проект?
Пока трудно сказать. Еще все в общих чертах.
Вот например текстовый режим мне видится как 80x25 (символы 8x16), т.е. разрешение 640x400. Посторение видео области как в ПЦ, т.е. байт символа, байт цвета.
Клавиатуру можно сварганить на AVR, на ней же и COM порт.
Ах еще забыл, хочется запихнуть ВН59. Поигратся с системой прерываний.
Viktor2312
10.12.2012, 12:20
Ах еще забыл, хочется запихнуть ВН59. Поигратся с системой прерываний.
Так а в чём проблема, запихните.
Клавиатуру можно сварганить на AVR, на ней же и COM порт.
Да не важно на чём, главное чтобы работало без глюков.
Ах еще забыл, хочется запихнуть ВН59. Поигратся с системой прерываний.
Это пожалуй уже лишнее :)
Как я видел в своих мыслях:
1. Проц Z80.
2. Платка должна иметь минимальный набор периферии:
а. клава
б. видео-выхлоп (желательно ВГА)
в. SD-картридер для запуска программок.
г. RS232 (для отладки и связи с ББ).
3. Ядро в виде средней жирности ПЛИС, типа EPM570, дополнительно к нему МК для обслуживания PS/2, RS232.
4. Память 128-512К, статика.
5. Слот NemoBUS, полноценный. Может даже парочку (Один SL-62, другой ножевой).
6. Размеры как можно меньше.
7. Питание - один источник 5В, но предусмотреть возможность подключения питания +5В и +12В посредством разъема MOLEX, как на винтах, для карт расширения, требующих такого питания.
8. Оставшиеся ноги от плиски и МК вывести на доп. разъемы расширения.
Как я видел в своих мыслях:
1. Проц Z80.
2. Платка должна иметь минимальный набор периферии:
а. клава
б. видео-выхлоп (желательно ВГА)
в. SD-картридер для запуска программок.
г. RS232 (для отладки и связи с ББ).
3. Ядро в виде средней жирности ПЛИС, типа EPM570, дополнительно к нему МК для обслуживания PS/2, RS232.
4. Память 128-512К, статика.
5. Слот NemoBUS, полноценный. Может даже парочку (Один SL-62, другой ножевой).
6. Размеры как можно меньше.
7. Питание - один источник 5В, но предусмотреть возможность подключения питания +5В и +12В посредством разъема MOLEX, как на винтах, для карт расширения, требующих такого питания.
8. Оставшиеся ноги от плиски и МК вывести на доп. разъемы расширения.
Очень смахивает на сильно кастрированную Эву :)
Если идти по такому пути, то можно в качесве МК использовать мегу AT90USB1287 (у ней есть хост режим). Конечно стоит она подороже ARMа.
Viktor2312
10.12.2012, 13:37
1. размеры платы - mini-ITX
Вот такие габариты было бы самое то. Чтобы можно было установить в маленький корпус Mini-ITX.
У меня вот такой есть, он просто "куколка", очень компактный.
http://img-fotki.yandex.ru/get/25/48644933.3/0_5e7d5_6e7b917b_M.jpg (http://fotki.yandex.ru/users/lpiti/view/387029/)
Корпус (http://fotki.yandex.ru/users/lpiti/view/387029/)
Но главное соблюсти расположение отверстий крепления в соответствии со стандартным, тогда в любого дизайна и размеров корпусе можно будет расположить, при желании. Они удит уже с блоком питания, очень компактным.
А без ПЛИС никак нельзя обойтись, а то опять начнутся проблемы с её программированием?
А без ПЛИС никак нельзя обойтись, а то опять начнутся проблемы с её программированием?
Она упрощает сильно жизнь. Просто реализация VGA развертки, особенно текстового режима аля ПЦ - на логике как раз комп будет размером mITX :)
Viktor2312
10.12.2012, 14:02
Она упрощает сильно жизнь. Просто реализация VGA развертки, особенно текстового режима аля ПЦ - на логике как раз комп будет размером mITX
ПЛИС, значит ПЛИС. Ни чего не имею против, как нибудь прошью.
Очень смахивает на сильно кастрированную Эву
ну если хорошо подумать, то да :) Эва - это типа девборда, как бы то что надо, только там ну слишком много всего лишнего на борту, что мне мешает вести разработку внешних устройств, не говоря уже о всяких магических танцев с бубнами вокруг ее NemoBUS, и самого размера Эвы.
А так, мне не нужны на плате:
1. IDE-контроллер
2. SDRAM
3. AY
4. PAL-кодер
5. ВГ93
6. жирный таракан ATMEGA128 (мне тут максимум PS/2 и COM-порт обстуживать, да и то последнее под вопросом).
7. жирная FPGA мне тоже ни к чему.
8. Соответственно не нужны ATX/AT питания.
А так в остальном мне PentEvo вполне импонирует как девборда :)
Но самое главное, хотелось бы иметь плату не столько, чтоб ее разрабатывать, а чтоб на ней отлаживать разрабатываемые мной железки, те же сетевые карты, видеокарты и пр.
8. Соответственно не нужны ATX/AT питания.
Знаешь, я бы оставил возможность подключения дополнительных питаний. Мало ли какие устройства понадобится отлаживать :) Тем более этот разъем много воды не испортит, а мне кстати на работе даже с ним проще ;) Оставить можно разъем ATX, а AT не имеет смысла.
Viktor2312
10.12.2012, 16:58
Оставить можно разъем ATX, а AT не имеет смысла.
Мне тоже так кажется, не нужен АТ, АТХ будет вполне достаточно.
Получается потребуется три микросхемы всего?
1. Z80
2. ПЛИС
3. ОЗУ
Знаешь, я бы оставил возможность подключения дополнительных питаний.
см. в моем первом посте:
7. Питание - один источник 5В, но предусмотреть возможность подключения питания +5В и +12В посредством разъема MOLEX, как на винтах, для карт расширения, требующих такого питания.
---------- Post added at 15:59 ---------- Previous post was at 15:57 ----------
1. Z80
2. ПЛИС
3. ОЗУ
Если делать PS/2 контроллер, то еще какой-нить МК ATMEL/PIC. Хотя первый мне ближе.
---------- Post added at 16:00 ---------- Previous post was at 15:59 ----------
Но еще не забываем про буферизацию/согласование уровней NemoBUS, ведь если ставить EPM570, то она с 5В логикой не дружит, а ставить 7128, то ее слишком мало, да и дорогая она.
CP/M-совместимость планируется?
CP/M-совместимость планируется?
Как ПЛИС прошьешь, так и будет работать. :v2_dizzy_snowball:
---------- Post added at 20:52 ---------- Previous post was at 20:50 ----------
Если делать PS/2 контроллер, то еще какой-нить МК ATMEL/PIC. Хотя первый мне ближе.
Можно вообще поставить сороконжку из ПЦ :)
Вот например текстовый режим мне видится как 80x25 (символы 8x16), т.е. разрешение 640x400.
ПЦ стандартный текстовый режим 720*400 70Гц (9*16).
Viktor2312
10.12.2012, 22:31
Если делать PS/2 контроллер, то еще какой-нить МК ATMEL/PIC. Хотя первый мне ближе.
Всего 4 -ре микросхемы, тоже не плохо. Компактно, что и требуется для создания:
Любительская девборда на Z80
Mick - ждём, пошёл разогревать паяльник.
/me раздумывает о возможности переноса темы в "концепции" или "железо"...
/me раздумывает о возможности переноса темы в "концепции" или "железо"...
Он к Спеку лишь косвенно относится - наличие ZX-BUS (NemoBus)
Viktor2312
10.12.2012, 22:53
/me раздумывает о возможности переноса темы в "концепции" или "железо"...
По моему, это - чистое творчество, пока, по крайней мере.
Можно вообще поставить сороконжку из ПЦ
Я не в курсе как оно работает.
---------- Post added at 22:05 ---------- Previous post was at 22:05 ----------
Хотя оных уже несколько набралось :)
Итак немного конкретики.
Основное:
процессор - Z80
ПЛИC(CPLD) - EPM570 (TQFP100 или TQFP144)
ОЗУ - 512кб SRAM
1. Так как ПЛИСка у нас 3,3 вольтовая и не толерантная, то шину проца и ПЛИС буферизируем что то типа 74LVX4245 (приблизительно 4(5) штуки: 1 на данные, 2 на адрес и 1(2) на сигналы управления).
2. ОЗУ проще брать 3,3 вольтовую и подцепить непосредственно к ПЛИСке
3. Интерфейс SD Card тоже цепляем к ПЛИС
4. Микруха что типа 74AHCT245 на видео по типу ЭВЫ, но пересчитать резисторы так как тоже 3,3 вольтами запитаем.
5. Микросхема ПЗУ - объем пусть будет пока 16кб
6. Предлагается отобразить внутренние порты на область памяти, тогда внешне будут доступны все 65535 портов.
7. Контроллер клавы взять от старой ПЦ платы, либо сваять на AVR, либо PIC (типа PIC16F77 - у него есть интерфейс внешней шины)
8. Два слота NemoBus
9. Разъем питания под винт с входным напряжением +5В, как вариант разъем от 5,25 флоповода с доп напряжением +12В.
4. Микруха что типа 74AHCT245 на видео по типу ЭВЫ, но пересчитать резисторы так как тоже 3,3 вольтами запитаем.
можно подсмотреть в Reverse или Speccy2010.
---------- Post added at 08:15 ---------- Previous post was at 08:14 ----------
5. Микросхема ПЗУ - объем пусть будет пока 16кб
давай лучше не будем 16к ограничивать, хотя бы 64к, либо 128к. более объемные флешки проще найти.
давай лучше не будем 16к ограничивать, хотя бы 64к, либо 128к. более объемные флешки проще найти.
Я так написал к примеру. А так конечно можно и больше :)
Просто изначально надо рассмотреть вариант какими окнами ПЗУ бить будем (по 16кб как в Спеке или еще как)
http://www.nxp.com/documents/data_sheet/74ALVC164245.pdf
Буфера ставил на Сyclon II 1 микруха вся адресная шина и тд.
А RS-232 на чем? без него сукчно.
Буфера ставил на Сyclon II 1 микруха вся адресная шина и тд.
Жесть, микруха в TSSOP48 :)
А RS-232 на чем? без него сукчно.
А вариант, либо на AVR(PIC), либо отдельной микрухой по желанию.
Жесть, микруха в TSSOP48 :)
Флешку писать с сд? Я тебе вроде отсылал, Z80? у меня DIP нет, да и удобно:) люблю мелочевку:) меньше места на плате.
у меня валяется, где то нечто подобное наполовину спек наполовину хз что такое.
Флешку писать с сд? Я тебе вроде отсылал, Z80? у меня DIP нет, да и удобно:) люблю мелочевку:) меньше места на плате.
у меня валяется, где то нечто подобное наполовину спек наполовину хз что такое.
Флешку(ПЗУ) если без RS232, то естественно с SD. Один фиг первоначальный загрузчик в программаторе нузно зашивать.
Да ты присылал мне плоский Z80. Но не каждый сможет его просто достать. Обычный диповый в каждом городе можно найти, а такой не в каждой конторе продают. К тому же если так посмотреть, то всего то две 40 ножки намечается, а остальные плоскодонки, кроме ПЗУ-хи (PLCC, DIP).
Если в 40 ногом исполнении, то вместе с RS232 компанию Z80 может составить PIC16F77.
Просто изначально надо рассмотреть вариант какими окнами ПЗУ бить будем (по 16кб как в Спеке или еще как)
тут надо сделать гибко на уровне ПЛИС, допустим расмотреть вариант для ПЗУ окна мин размером в 2048 кб. Вроде там всякие Орионы с 2КБ загрузчиками были, емнип. А там уже в зависимости от необходимости в ПЛИСке делать как надо. При этом адресные линии ПЗУ выше A10 идут в ПЛИСку, остальные на ША проца.
Если в 40 ногом исполнении, то вместе с RS232 компанию Z80 может составить PIC16F77.
Кстати вместо PIC16F77 можно использовать PIC18F4520. Они как в дипе, так и в TQFP44 (это к тому, чтобы место сэкономить).
---------- Post added at 11:05 ---------- Previous post was at 10:58 ----------
тут надо сделать гибко на уровне ПЛИС, допустим расмотреть вариант для ПЗУ окна мин размером в 2048 кб. Вроде там всякие Орионы с 2КБ загрузчиками были, емнип. А там уже в зависимости от необходимости в ПЛИСке делать как надо. При этом адресные линии ПЗУ выше A10 идут в ПЛИСку, остальные на ША проца.
Пусть будет по 2 кб. Я не против. Ну что остановимся на 29F040 (512кб)
или ограничимся 128кб (29F010)?
Еще момент, я сперва думал текстовый режим привинтить, но там нужно для упрощения ПЗУ знакогенератора, либо типа графического и оставить решать это пользователю (какой он сам создаст).
можно использовать PIC18F4520
дорогова-то и не сильно ширпотребно.
дорогова-то и не сильно ширпотребно.
А PIC16F77 пойдет?
но там нужно для упрощения ПЗУ знакогенератора
А ног хватит у плиски для обращения к отдельной ПЗУ? а если пользоваться общей ША и ШД, то знакогенератор можно зашить в основное ПЗУ, в определенной странице и в нужный момент обращаться к ней.
---------- Post added at 10:16 ---------- Previous post was at 10:15 ----------
А PIC16F77 пойдет?
Этих навалом и в DIPe и в TQFP. Правда с ними не работал, но когда-то ведь надо начинать :)
Кстати вместо PIC16F77 можно использовать PIC18F4520. Они как в дипе, так и в TQFP44 (это к тому, чтобы место сэкономить).
---------- Post added at 11:05 ---------- Previous post was at 10:58 ----------
Пусть будет по 2 кб. Я не против. Ну что остановимся на 29F040 (512кб)
или ограничимся 128кб (29F010)?
Еще момент, я сперва думал текстовый режим привинтить, но там нужно для упрощения ПЗУ знакогенератора, либо типа графического и оставить решать это пользователю (какой он сам создаст).
В матерях в основном 512 кб сейчас(по крайней мере в той куче,что есть у меня)
Знакогенератор можно в ОЗУ держать. При старте переписывать из ПЗУ в ОЗУ.
Знакогенератор можно в ОЗУ держать. При старте переписывать из ПЗУ в ОЗУ.
Это все понятно. Но сами понимаете что текстовый режим он быстрый, но геморный в реализации. Поэтому и спрашиваю.
А что с частотой процессора? Если будет выход на VGA, то частоту надо кратной 25,175 МГц делать.
А что с частотой процессора? Если будет выход на VGA, то частоту надо кратной 25,175 МГц делать.
Ну это по сути интимный вопрос. Каждый решает для себя сам, с какой частотой измываться над процессором. По поводу частоты и VGA. 25,125 - это как бы стандарт. Но как показывает практика (Спектрум) мониторам совсем не обязательно такие правила соблюдать. Ведь по сути решающим фактором будет разрешение экрана и глупо полагать если сделать графический экран 640x480 при частоте процессора 4 МГц, то можно получить разве что слайд шоу. Тут все упирается в разумности.
Я склоняюсь ставить генератор (а не кварц) по крайней мере 25МГц продаваемы, а вот дробные не видел в продаже.
Blade, а зетник на 25,175МГц взлетит?
Blade, а зетник на 25,175МГц взлетит?
И я к тому же ;) Одно дело пиксельклок, а другое дело частота процессора.
К тому же безпроцессорные девайсы на шине NemoBus один фиг работать будут с частотй процессора платы. Поэтому нужно ориентироваться на частоты 3,5...8 МГц. Если взять частоту генератора 25МГц, то не прибегая к дробным делениям частота процессора 3,125 или 6,25МГц. Если к дробным, то можно и 5 МГц сделать :)
Еще не забываем о том какая будет внутренность ПЛИС, т.е. синхронная работа (как в Спеке) или асинхронная. Ну это тоже в принципе каждый решает для себя сам - на то она и девборда. ;)
---------- Post added at 12:11 ---------- Previous post was at 12:09 ----------
Я тебе вроде отсылал, Z80? у меня DIP нет, да и удобно:) люблю мелочевку:) меньше места на плате.
Кстати, можно и такой вариант потом развести :)
Кстати, можно и такой вариант потом развести :)
я тебе с намеком там еще 128кб положил в интересном фром факторе:)
Ну что подведем некоторые итоги мозгового штурма. Окончательную спецификацию выложу потом в первый пост
Вариант такой основной:
процессор - Z80 (в корпусе DIP40)
ПЛИС - EPM570 (корпус TQFP144)
ОЗУ - SRAM 512Кб 3,3V (например CY7C1049DV33 в корпусе TSOP2-44)
ПЗУ - FLASH 512Кб (например AM29F040 в корпусе PLCC-32)
Контроллер PS/2 клавы и RS232 порт - PIC16F77 (в корпусе DIP40)
Буферы шины - микросхемы 74ALVC164245 (в корпусе TSSOP48)
Кварцевый генератор - 25МГц KXO-200 (в корпусе DIL14)
Внешняя шина Nemo Bus - 1 слот + 1 ножевой
Mick, на платке не помешает монтажное поле, вдруг генератор не найду - придется логикой лепить.
Mick, на платке не помешает монтажное поле, вдруг генератор не найду - придется логикой лепить.
Ну это лишнее я думаю, генератор на крайняк можно снять со старой мамки ;)
А там когда разведем, посмотрим какие габариты, будут :) Во всяком случае основная кофигурация тебя устраивает? Тогда буду паттерны и символы помаленьку собирать в кучку.
Во всяком случае основная кофигурация тебя устраивает?
да
Тогда в таком случае переношу все в первый пост. Если что ориентируйтесь по нему.
P.S. Обновил первый пост, смотрим, если что поправляем.
---------- Post added at 13:14 ---------- Previous post was at 13:06 ----------
я тебе с намеком там еще 128кб положил в интересном фром факторе:)
Надо будет взглянуть дома, я сейчас на работе - запамятовал уже :)
В твоем варианте PIC18F4520 полюбас нужно попробовать :)
Mick, память может 16 бит взять? CY7C1041DV33 (256К х 16). Удобнее будет видеоконтроллер делать.
Мне кажется не мешало бы и RTC подключить через тот же PIC(а лучше бы AVR :) ).
Mick, память может 16 бит взять? CY7C1041DV33 (256К х 16). Удобнее будет видеоконтроллер делать.
Кто же сомневается в удобстве, а вот по ногам ПЛИС нужно смотреть и считать.
---------- Post added at 13:32 ---------- Previous post was at 13:31 ----------
Мне кажется не мешало бы и RTC подключить через тот же PIC(а лучше бы AVR :) ).
А насколько актуальны часы в борде. :v2_conf2:
имхо борда должна быть минимальной, даже видео выхлоп я бы не стал делать, rs-232 достаточно, видюху надо делать внешней.
видюху надо делать внешней.
не очень удобно... Хотя не обязательно VGA, но обычный ЧБ композит должен быть. Но в офисе же лучше ВГА
А может просто PC использовать в качестве терминала для этой борды.
Всё равно ПО будет разрабатыватся на IBM-ке.
По RS232 можно и программы грузить и сообщения слать при отладке.
Это сильно упростит саму девборду.
Останется Z80, SRAM, ROM, пара RS232, ZX-BUS и небольшая CPLD.
А может просто PC использовать в качестве терминала для этой борды.
Всё равно ПО будет разрабатыватся на IBM-ке.
По RS232 можно и программы грузить и сообщения слать при отладке.
Это сильно упростит саму девборду.
Останется Z80, SRAM, ROM, пара RS232, ZX-BUS и небольшая CPLD.
Абсолютно согласен,
Это сильно упростит саму девборду.
одна микруха (lvc245) десяток резисторов и один разъем большой роли в упрощении не сыграет, а уж нужно ли это использовать в том или ином направлении разработки - это другой вопрос. Можно просто вывести свободные ноги плис/мк на гребенку и подключать самопальные платки с тем или иным устройством - кому что нужно.
Останется Z80, SRAM, ROM, пара RS232, ZX-BUS и небольшая CPLD.
А если вместо Z80 поставить Z180, то как раз пара RS232 у него и найдется набортных. А если учесть что Z180 имеет еще и маппер памяти, то вообще CPLDшка тощая будет.
Mick, но это уже для темы "Любительская девборда на Z180" :)
Viktor2312
11.12.2012, 17:15
имхо борда должна быть минимальной, даже видео выхлоп я бы не стал делать
Нее видео нужно оставить обязательно, без видео не интересно. Как мне кажется.
Подскажите, а что означает Z80A CPU (MME) в названии проца это ММЕ?
Посмотрел сейчас примерную стоимость микросхем, получилось примерно так:
Z80 - 60=
ПЛИС - 660=
ОЗУ - 160=
ПЗУ - 200=
PIC - 150=
буф. - 60=
25МГц - 30=
----------------
1320 рублей.
Правда с плис нужно точное название знать какая нужна, о то можно и за 300 рублей взять и с ПЗУ тоже самое цена от 80 до 200 руб в зависимости от букв в конце.
Но уже можно примерно сказать так, что если покупать абсолютно все детали, то цена будет, примерно в районе 2000 руб. за детали без платы. В общем доступно и не дифицитно, покрайней мере если исходить из того списка, что в первом посте.
Подскажите, а что означает Z80A CPU (MME) в названии проца это ММЕ?
http://speccy.info/Zilog_Z80
sergey2b
11.12.2012, 19:46
стоимость можно уменьшить если скооперироваться вот с этим товарищем (он продает набор по 16$ если с ним поговорить)
http://www.ebay.com/itm/Z80-KIT-Design-your-own-Z80-Computer-20MHz-Chipset-RAM-ROM-V9958-etc-/121034909945?pt=UK_BOI_Electrical_Components_Suppl ies_ET&hash=item1c2e3e28f9
он же https://sites.google.com/site/designyourownuniversalz80board/
он же если search на ebay z80 kit
я с ним общался вполне вменяемый человек
как я понимаю схемы у него нет так что если предложить рабочую схему то иностранные комрады тоже поучаствуют
Viktor2312
12.12.2012, 11:26
стоимость можно уменьшить
Да это не так уж и важно сейчас, сколько будет стоить, я так примерно прикинул стоимость выбрав из списка самые дорогие детали, чтобы точно не ошибиться. На самом деле цена скорее всего дешевле будет.
Сейчас главное дождаться пока Mick разработает всё и забацает схему, тогда уже будет точно известен список необходимых деталей.
Буду ждать результатов, а то хочется отвлечься и что нибудь спаять.
Сейчас главное дождаться пока Mick разработает всё и забацает схему, тогда уже будет точно известен список необходимых деталей.
Буду ждать результатов, а то хочется отвлечься и что нибудь спаять.
Помаленьку собираю все даташиты и начал рисовать патерны и символы. :)
А может таки выбрать АВР вместо ПИКа? Мегу16-32 TQFP, к примеру? Можно шить тем же бластером, что и ПЛИСку, цена примерно та же, софта для разработки больше, есть даже готовые программные модули.
И хочется таки независимо от наличия ВГА-выхода иметь простейший смеситель с RCA для вывода ч/б ТВ.
А может таки выбрать АВР вместо ПИКа? Мегу16-32 TQFP, к примеру?
Что PICов боитесь?
Да мне собственно без разницы. Только вы уж определитесь скорее, не буду же для всех контроллеров символы и паттерны рисовать.
Что PICов боитесь?
есть чуток :) Даже в руках пока не держал, за исключением PIC18F2550. Ладно, хозяин-барин. Только поведай, чем шьется предполагаемый для борды ПИК? Разумеется, магазинные программаторы не в счет.
есть чуток :) Даже в руках пока не держал, за исключением PIC18F2550. Ладно, хозяин-барин. Только поведай, чем шьется предполагаемый для борды ПИК? Разумеется, магазинные программаторы не в счет.
Собственно эти PIСи шьются обычными внутрисхемными программаторами. =)
Да я собственно не настаиваю, просто надо опредлится до того момента, когда все начнется собиратся в кучу.
Как вариант из АVRок можно типа ATmega162, если объеденить ее шину адреса с адресной Z80, ну и данные, то получится этак двухпроцессорная система - мегой можно будет отлучать z80 от шины :)
если объеденить ее шину адреса с адресной Z80
и с ПЛИС тоже связать, чтоб SPI организовать.
Ну что, я так понимаю производим замену PIC16F77 в корпусе DIP40 на Atmega162 в корпусе TQFP44?
Mick, не против.
Ну тогда в первом посте заменил соответствующую строчку.
Вобщем нарисованы все основные символы и паттерны, осталось только держатель SD карты нарисовать. И можно приступать к сочинительству схемы. =)
осталось только держатель SD карты нарисовать
кстати, тут тоже надо предусмотреть несколько вариантов, т.к. в РФ ширпотребные держатели одни, а у нас их днем с огнем не найти, у нас совсем другие
---------- Post added at 09:27 ---------- Previous post was at 09:24 ----------
Вроде бы в Speccy2010 сделаны посадочные места для 2 распространенных и у вас и у нас вариантов. Дома проверю.
кстати, тут тоже надо предусмотреть несколько вариантов, т.к. в РФ ширпотребные держатели одни, а у нас их днем с огнем не найти, у нас совсем другие
Помоему сейчас у коротких по типу 104C-TAA0-R одинаковые посадочные размеры. И продаются они помоему везде. Вот у старых SD09WC04 у тех другие посадочные места. Но их не стоит закладывать, ибо их фиг найдешь.
Ну и под длинномеры тоже смысла нет.
Mick, у нас есть такие:
http://kosmodrom.ua/pic/big/mcc-sd.jpg
и такие:
http://kosmodrom.ua/pic/big/mcc-sd_1.jpg
---------- Post added at 10:40 ---------- Previous post was at 10:39 ----------
Остальные достать весьма проблематично.
Mick, у нас есть такие:
Я ориентируюсь на верхний, типа 104C-TAA0-R.
Их zorel к тому же продает, если что.
Я ориентируюсь на верхний, типа 104C-TAA0-R.
Эти подходят.
Viktor2312
15.12.2012, 14:04
Что PICов боитесь?
Нет, очень их люблю даже больше чем всякие другие. Но какой конкретно будет применяться мне всё равно. Я не против того решения которое примет большинство.
Mick, делай как сочтешь нужным, можно и ПИКушку поизучать, но АВР нам ближе :)
Голосую за него.
и такие:
такие действительно продаются в каждом ларьке, хоть они неудобнее первых, но доставаемы без проблем.
Mick, делай как сочтешь нужным, можно и ПИКушку поизучать, но АВР нам ближе :)
Голосую за него.
Нет уж, извольте, выбран ATmega162 в корпусе TQFP44. Будете его кушать :)
Завтра начну накидывать помаленьку схему. Так что пока подумайте как будем сопрягать мегу и проц. :)
Mick, можно посредством ПЛИС, как было сделано в проекте ZSMC (http://zx.pk.ru/showthread.php?p=221024#post221024), в нее же все одно все линии ШД и ША будут заходить.
Mick, можно посредством ПЛИС, как было сделано в проекте ZSMC (http://zx.pk.ru/showthread.php?p=221024#post221024), в нее же все одно все линии ШД и ША будут заходить.
Тут все зависит от того, сколько ног свободные. И не забываем, что ПЛИС не толерантна по входам к 5 вольтовой логике. Пока значит начну рисоавть процессор и ПЛИС с обвязкой. А там видно будет.
epm570 стоит столько же сколько и ep1c, вторая толерантна к 5в, и емкость чипа раз 5-6 больше :)
epm570 стоит столько же сколько и ep1c, вторая толерантна к 5в, и емкость чипа раз 5-6 больше :)
Это разговор о Эве и он уже был. Нам интересно повозится :v2_dizzy_wall:
epm570 имеет ограниченное кво циклов записи, или 100 циклов или 1000, в первом случае это жесть, раз в месяц чип менять, впрочем оба колва идут вразрез с понятием девборды, каждый тест существенно уменьшает ресурс чипа.
---------- Post added at 12:18 ---------- Previous post was at 12:14 ----------
Посмотрел, гарантировано 100 циклов, стирание и запись
epm570 имеет ограниченное кво циклов записи, или 100 циклов или 1000, в первом случае это жесть, раз в месяц чип менять, впрочем оба колва идут вразрез с понятием девборды, каждый тест существенно уменьшает ресурс чипа.
Ты не понял суть этой платы. Девборда в плане юзания Z80, написания на нем программ всяких отладка в весьма стесненных условиях, т.е. на работе.
По сути в ПЛИСку загнали конфу одну единственную и все забыли про нее.
Тут приоритет за Z80. А если что то надо с ПЛИСкой городить, проще купить обычную ПЛИСборду и не парится или туже Эву.
Плисборды кумарят, Z80 долго компилится, а так при живом Z80 было бы счастье, в эве мелкая fpga, и куча ненужного для девборды
Ну как знаете, если CPLD константна, то тогда конечно всеравно
Ну все, мозг мне съели совсем. Ну так на чем останавливаемся то в конце концов?
shurik-ua
17.12.2012, 14:28
я так понял это будет чтото вроде такого:
http://www.nedopc.org/forum/viewtopic.php?t=9155&postdays=0&postorder=asc&start=0&sid=1d70634d4b42b581b38acbbccf11c42e
только с блекджеком и ... плисами )))
я бы не отказывался так быстро от контроллера прерываний - уж очень много плюсов он привносит.
советую также посмотреть на организацию экрана как в специалисте или орионе,
для программирования очень удобен ))
Viktor2312
17.12.2012, 15:35
Ну все, мозг мне съели совсем. Ну так на чем останавливаемся то в конце концов?
Mick - Вы как вроде в первом посте озвучили, что хотите, для чего хотите. Я вот и советую делать задуманное. Потому что, сколько людей столько и мнений будет. Один пики обожает, другой авры, четвёртый CPLD, а пятый транзисторы.
Не могу сказать, что всё идеально, на мой взгляд. Я бы постарался избавиться от поверхностного монтажа полностью, на сколько это возможно. Но не буду этого говорить.
На мой взгляд так:
После обсуждения получился такой вариант, скажем основной:
1. процессор - Z80 (в корпусе DIP40)
2. ПЛИС - EPM570 (CPLD) 3.3V (в корпус TQFP144)
3. ОЗУ - SRAM 512Кб 3.3V (например CY7C1049DV33 в корпусе TSOP2-44)
4. ПЗУ - FLASH 512Кб (например AM29F040 в корпусе PLCC-32)
5. Контроллер PS/2 клавы и RS232 порт - ATmega162 (в корпусе TQFP44)
6. Буферы шины - микросхемы 74ALVC164245 (в корпусе TSSOP48)
7. Кварцевый генератор - 25,175МГц KXO-210 (в корпусе DIL8)
8. Внешняя шина Nemo Bus - 1 слот + 1 ножевой
9. Выход видео - VGA разъем
10. Разъем SD карты - типа 104C-TAA0-R
Потому что, сколько людей столько и мнений будет. Один пики обожает, другой авры, четвёртый CPLD, а пятый транзисторы.
Это истина, не требующая доказательст :)
Мне, например, удобней когда исключительно поверхностный монтаж. И размер борды в две сигаретные пачки (при процессоре DIP-40). Но я согласен на прочие варианты.
А с Циклоном-1 я знаком, действительно хорошая штука. У меня есть небольшая борда (на МГТФ), где этот в этот Циклон о 144 ногах фпихнут Скорпион, вместе с процессором. Это конечно серьезнее, чем CPLD с ограниченным ресурсом, но ломает концепцию.
я бы не отказывался так быстро от контроллера прерываний - уж очень много плюсов он привносит.
вот на zx-bus платке и подключишь этот контроллер прерываний. мне и многим другим он и нать не нать, так что зачем платить больше?
Viktor2312
18.12.2012, 15:05
Mick - а не подготовите списочек деталей, с точными названиями, как будет точно определено какие требуются. Чтобы потихонечку искать, а то вечно это потом у меня растягивается на 2...3 месяца.
Mick - а не подготовите списочек деталей, с точными названиями, как будет точно определено какие требуются. Чтобы потихонечку искать, а то вечно это потом у меня растягивается на 2...3 месяца.
Списочек будет после как утвердим схему. Вдруг что поменяется.
shurik-ua
18.12.2012, 18:20
вот на zx-bus платке и подключишь этот контроллер прерываний. мне и многим другим он и нать не нать, так что зачем платить больше?
Очень странно слышать эти слова именно от тебя ))
Ну да ладно, я не настаиваю ))
shurik-ua, почему вдруг? :)
shurik-ua
18.12.2012, 19:11
вот цитата из описания DMA-USC:
" Автор понимает, что изготовление и подключение этой карты связано с достаточно большими трудностями, но это следствие проблем, которые не решались с прошлого десятилетия. Несмотря на "навороты" в последних моделях ( Скорпион , Профи , Атм ), эти вопросы все-таки остались открытыми."
т.е. ты предлагаешь по прежнему не решать всё те же проблемы.
Да и опять же повторюсь, что имея этот контроллер программировать на этой борде будет намного удобнее (попытаться портировать какую-нибудь ОС).
хотя возможно ТС преследует несколько другие цели, а именно сделать всё в духе минимально воможной конфигурации.
а именно сделать всё в духе минимально воможной конфигурации
мне тоже так показалось, и такой вариант тоже имеет право на жизнь, а простенький генератор прерываний (и кольцевой и приоритетный) можно и в CPLD засунуть
shurik-ua, Ну DMA и контроллер прерываний к этой плате имеет лишь коственное отношение, на ней я планирую отлаживать новую DMA USC. А что касается проблем подключения, так контроллер прерываний может еще одну (как минимум) добавить ;)
Данная плата задумывается быть как ты заметил:
в духе минимально воможной конфигурации
Остальное реализуется посредством ZX/NemoBUS контроллеров, дабы было совместимо с большинством современных клонов и без всякого МГТФ.
Error404
19.12.2012, 00:51
Максимум 100 перепрошивок это жесткая жесть. Все остальное обсуждаемо.
Ну, в реале будет не 100, а скорее ближе к тысяче. Просто прошивка не будет "храниться 20 лет". У меня EPM3128АТС100 еще бодрая, хоть я ее замучил уже практически тысячей. Всё жду, когда она верификацию не пройдет.
shurik-ua
20.12.2012, 03:22
/off
на ней я планирую отлаживать новую DMA USC.
а вот с этого места если можно поподробнее ))
/off
Сдал зачет AAA по гифто строению. Поставил хорошо, на отлично задавал дополнительные вопросы, но я согласился на четверку :)
Хотел было продолжить заниматься девбордой, как на работе сегодня отправляют на неделю в командировку-ссылку в Сибирь. Сейчас собираю пожитки и в путь. Так что похоже продолжим после Нового Года.
Mick, счастливого пути! Бум ждать возвращения.
Mick, счастливого пути! Бум ждать возвращения.
Сегодня вернулся из турне по Сибири (Новосибирск, Иркутск). Так что скоро продолжим. :v2_dizzy_snowball:
perestoronin
31.12.2012, 11:00
Не рассматривали этот проект http://www.retroleum.co.uk/v6z80p/?
Герберы на него в открытом доступе, можно выпустить.
Не рассматривали этот проект http://www.retroleum.co.uk/v6z80p/?
прочитай темку с начала и все поймешь.
---------- Post added at 11:07 ---------- Previous post was at 11:04 ----------
Mick, улетаю на 10 дней в отпуск, возможно получится в инет вырваться, но вряд ли - программа дюже насыщенная. Так что с приближающимися праздниками, до встречи в Новом году, числа эдак 10-12 :)
Viktor2312
13.01.2013, 11:52
Mick - как проект продвигается? Или забросили?
Mick - как проект продвигается? Или забросили?
Не забросили. Новогодние каникулы закончились, начинаем включать мозг. :v2_dizzy_botan:
В первом посте выложил эскизный вариант схемы. Так сказать, чтобы было о чем говорить. Смотрим и высказываем свое мнение. У меня есть сомнение в правильности подключения генератора, может сразу на SMD 3,3V перейти (правда из тех что есть, можно нарваться на 5 вольтовый вариант).
Ну и вообще, я с 3,3В логикой еще не работал, так что жду замечаний и советов.
можт все таки нуеёна, MAX232 , а? com-порты на совремённых мамках не всегда то и наружу выводят,а иногда их вообще нет. Может все же сделать на USB-UART FT232R, если уж так хочется сом-порт ?
А что теперь переходники USB to COM в дефиците? Тем более борда не полноценный комп - у нее другие задачи.
Mick, я смотрю пинов свободных много у альтеры - может вывести их на гребенку для внешних подключений?
Mick, я смотрю пинов свободных много у альтеры - может вывести их на гребенку для внешних подключений?
Ну это дело житейское, главное сейчас надо посмотреть как там оно все - работать то оно будет и ли как :)
shurik-ua
19.01.2013, 10:21
imho ПЗУ можно убрать совсем.
это же девборда - поэтому от идеи до запуска программы на ней должен быть 1 клик )
а так нужно вытаскивать ПЗУ, тыкать в программатор и т.д. - панелька угрохается быстро, да и удобство ниже среднего ).
к томуже ПЗУшки тормознее ОЗУ, если задумывается чтото запустить на 20 МГц то WAIT'ы неизбежны.
Можно сделать примерно как в SPECCY 2010:
при включении питания AVR жмёт на RESET Z80,
сам в это время определяет ёмкость MMC карты - вычитает из объёма 64-512 кб (или сколько нужно)
грузит с карты в то место в памяти где должно быть ПЗУ
отпускает RESET Z80
Ну а программку на пц написать, которая будет записывать образ ПЗУ в нужное место на MMC-карте, труда особого не составит.
Или по COM-порту всё заливается - тогда и MMC-карту дёргать не придётся )
imho ПЗУ можно убрать совсем.Или поставить EEPROM-ку килобайт на 64, с которой и загружать образ ПЗУ.
Область ОЗУ, для размещения ПЗУ желательно иметь возможность блокировать от записи.
CodeMaster
19.01.2013, 12:50
Ну а программку на пц написать, которая будет записывать образ ПЗУ в нужное место на MMC-карте, труда особого не составит.
WinHEX это давно могёть.
imho ПЗУ можно убрать совсем.
это же девборда - поэтому от идеи до запуска программы на ней должен быть 1 клик )
а так нужно вытаскивать ПЗУ, тыкать в программатор и т.д. - панелька угрохается быстро, да и удобство ниже среднего ).
к томуже ПЗУшки тормознее ОЗУ, если задумывается чтото запустить на 20 МГц то WAIT'ы неизбежны.
Схему ты невнимательно смотрел, там стоит FLASH ПЗУ, которую ты можешь писать не вынимая из панельки. Достаточно один раз загрузчик записать и все. На 20МГЦ - у тебя будет клва тормозить полюбому.
Все это решается программно-аппаратно лигокой и софтом, например отключение доступа к ПЗУ.
Так что это не аргумент.
---------- Post added at 14:22 ---------- Previous post was at 14:20 ----------
Меня сейчас больше волнует правильность согласования 5 вольтового генератора с 3,3 вольтовой CPLD
shurik-ua
19.01.2013, 14:56
Дык клава то PS/2, а не матрица - в разрабытываемом софте сразу обрабатывать сканкоды, а не преобразовывать сканкоды в гипотетическую матрицу как это сделано (исключительно с целью совместимости) в Спектруме.
Мне всё-таки кажется что вариант с EEPROM с SPI-интерфейсом выглядит наиболее оптимально, исходя хотябы оттого что упростится разводка платы (улучшатся массогабаритные показатели и т.д. ), но решать конечно Вам.
P.S. генератор можно взять 3.3 вольтовый, если они не шибко дефицитны )
Меня сейчас больше волнует правильность согласования 5 вольтового генератора с 3,3 вольтовой CPLD
У меня вот так было сделано - до сих пор не сгорело :)
У меня вот так было сделано - до сих пор не сгорело :)
Надо тогда попробовать твой вариант :)
Viktor2312
19.01.2013, 21:37
У меня вот так было сделано - до сих пор не сгорело
Резестивный делитель, гениальное решение, или иными словами всё гениальное просто. На входе 5 вольт на выходе, нужное нам напряжение. А два резистора поверхностного монтажа, не много места займут. Mick - я думаю именно так Вам и нужно поступить. Хотя решать только Вам конечно.
В первом посте обновил схему. Добавил вторую микросхему памяти ОЗУ. Если будет не нужна, просто не впаиваем. Ну вроде как все что хотел, то нарисовал. Осталось только с кондесаторами будет разобраться. Кстати какой разъем на питание ставить,
С винтовым зажимом или типа от флоповода 5 дюймового?
Дмитрий, а ты что молчишь?
Атмега напрямую на ШД Z80 сидит? Может стоит буфер, как в ZXMC поставить. А то конфликты будут.
Атмега напрямую на ШД Z80 сидит? Может стоит буфер, как в ZXMC поставить. А то конфликты будут.
В Speccy 2007 она тоже напрямую сидит, конфликтов не заметил вроде никто до сих пор. Она по умолчанию ведь на вход сконфигурена, так что шине никак не повредит я думаю. В принципе я такое тоже проделывал, вроде работало.
Viktor2312
23.01.2013, 10:27
С винтовым зажимом или типа от флоповода 5 дюймового?
А сколько напряжений питания будет? Только +5 вольт? Может кренку туда и разъём типа как в мониторах или ноутах, тогда можно будет от внешнего любого БП питать с выходным напряжением от 8 вольт до Uпит. мах. кренки?
Хотя если АТХ блок питания применять и плату в корпус ставить, то да мне кажется лучше разъём от дисковода.
А сколько напряжений питания будет? Только +5 вольт?
Для питания самой платы нужно только +5В (3,3 делается набортным стабилизатором). Но вот для внешних плат(по крайней мере моих) нужно иногда и +12В.
Viktor2312
24.01.2013, 14:28
Для питания самой платы нужно только +5В (3,3 делается набортным стабилизатором). Но вот для внешних плат(по крайней мере моих) нужно иногда и +12В.
Тогда надо ставить разъём от дисковода, там как раз +5В и +12В есть. Тогда можно будет без каких либо перепаек применять стандартный компьютерный АТ или АТХ БП. Или любой внешний с напряжением только +5В если не требуется +12В, только разъём перепаять придётся.
Мне кажется, что разъём от дисковода самое то.
Я скорее всего поставлю два разъема на питание. Один от 5 дюймого дисковода, а второй винтовой по типу вот такого
http://www.platan.ru/pdf/datasheets/klemmleiste/MA522-500M.pdf
Полагаю так будет удобнее.
Viktor2312
25.01.2013, 12:28
Я скорее всего поставлю два разъема на питание. Один от 5 дюймого дисковода, а второй винтовой по типу вот такого
http://www.platan.ru/pdf/datasheets/...MA522-500M.pdf
Полагаю так будет удобнее.
Согласен.
Мне тоже нравятся эти винтовые разъёмы, да и продаются на каждом углу.
Вот только почему от 5 дюймового? От 3 -х компактнее как вроде.
Вот только почему от 5 дюймового? От 3 -х компактнее как вроде.
От 3 дюймовых какие то хиленькие, чуть что и выдрал с "мясом" =)
Viktor2312
25.01.2013, 13:15
От 3 дюймовых какие то хиленькие, чуть что и выдрал с "мясом" =)
Понятно, против 5 дюймовых ничего против не имею.
А как вообще процесс, в какой стадии?
Понятно, против 5 дюймовых ничего против не имею.
А как вообще процесс, в какой стадии?
Ну вроде схему набросал, теперь осталось дорисовать нехватающие паттерны и начну потихоньку разводить плату.
Закончил я свои мучения с трассировкой. Правда еще не проверял на технологические ошибки. Вобщем получилась плата размером 118x158мм
Может конечно можно было и еще уменьшить, но я не буду этого делать, итак намучился. :)
Заказывать буду скорее всего в марте.
В первом посту выложил картинку печатной платы.
2 Mick
Кондеры от DD8 далеко стоят, имхо. И дорожки тонкие от красного квадрата идут.
Я бы питание на Xp4,5 вывел на top (левый верхний угол красного dd8), а кондеры под чипом бы поставил. Как-то так. И квадрат красный сделал бы побольше, чтобы почти до самых выводов.
2 Mick
Кондеры от DD8 далеко стоят, имхо. И дорожки тонкие от красного квадрата идут.
Я бы питание на Xp4,5 вывел на top (левый верхний угол красного dd8), а кондеры под чипом бы поставил. Как-то так. И квадрат красный сделал бы побольше, чтобы почти до самых выводов.
Обновил первый пост. Теперь так лучше будет?
Также выложил текущую схему, которой соответствует разводка.
Если делаете под класс точности плат 3 (http://microsin.ru/content/view/686/43/) (pdf (http://www.circuitry.ru/files/article_pdf/2/article_2242_556.pdf)), то желательно увеличить мин. ширину дорожки до 0,24..0,25мм. У Вас вроде 0,20мм больше вероятность получить брак (перетрав дорожек).
Я в резоните облегченную Эву заказывал для себя. У Романа дорожки 0,2мм идут. Ни одного перетрава, все замечательно вышло.
Там же буду и эту плату заказывать.
Ну а так, посмотрю еще, где то утолщу немного.
Мин 0.2/0.2 мм нормально.
Третью плату уже так делал в ТеПро (прототип), не на что жаловаться.
Начал задумываться о своей конфигурации. Все таки я хочу текстовый режим сгородить и вроде пока вырисовывается он.
Вот какие параметры развертки я хочу взять за основу
"640 x 400 VGA text"
Clock frequency 25.175 MHz
Line frequency 31469 Hz
Field frequency 70.086 Hz
One line:
8 pixels front porch
96 pixels horizontal sync
40 pixels back porch
8 pixels left border
640 pixels video
8 pixels right border
---
800 pixels total per line
One field:
5 lines front porch
2 lines vertical sync
28 lines back porch
7 lines top border
400 lines video
7 lines bottom border
---
449 lines total per field
То есть, текстовый режим 80x25 (8x16) 16 цветный
Итого видеопамять 2кб на текст + 2 кб на цвет +4 кб на знакогенератор. Итого 8 кб
Кстати, а кто нибудь знает, 70Гц LCD моники держат?
Я что то уже не припомню
Может лучше стандарт 640х480 60Гц? Пиксельклок такой-же. Сделай просто сверху и снизу бордюр побольше. Туда можно будет служебную информацию выводить.
Может лучше стандарт 640х480 60Гц? Пиксельклок такой-же. Сделай просто сверху и снизу бордюр побольше. Туда можно будет служебную информацию выводить.
Типа этого
"VGA industry standard"
Clock frequency 25.175 MHz
Line frequency 31469 Hz
Field frequency 59.94 Hz
One line:
8 pixels front porch
96 pixels horizontal sync
40 pixels back porch
8 pixels left border
640 pixels video
8 pixels right border
---
800 pixels total per line
One field:
2 lines front porch
2 lines vertical sync
25 lines back porch
8 lines top border
480 lines video
8 lines bottom border
---
525 lines total per field
Тогда надо будет по 40 линий с каждой стороны бордера добавить.
Other details
Sync polarity: H negative, V negative
Scan type: non interlaced.
Это тоже важно.
---------- Post added at 16:57 ---------- Previous post was at 16:34 ----------
Интересная информация оттуда-же:
There are the 3 "standard" VGA modes that each VGA card is supposed to be able to do:
640 x 350 x 70 is compatible with the old EGA mode, but on a VGA display.
640 x 400 x 70 is the MS-DOS text mode (when the computer is booting !).
640 x 480 x 60 is the default Windows(tm) graphics mode (16 colours !).
Так что твой вариант, как бы, тоже стандарт, и любой дисплей обязан его поддерживать.
Хотя мне всегда казалось, что MS-DOS text mode соответствует 640 x 350 (25 строк, высота символа 14 линий).
MS-DOS text mode 720 x 400 (символ - 9 х 16 точек).
MS-DOS text mode 720 x 400 (символ - 9 х 16 точек).
Не буду заморачиваться с 9 точками, у меня будет 8. Так проще.
MS-DOS text mode 720 x 400 (символ - 9 х 16 точек).
Это VGA, а в EGA символ 8 х 14. По крайней мере так в вики написано (http://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D 0%B9_%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE%D1%80%D0%B5%D0 %B6%D0%B8%D0%BC).
Я посмотрел в инстуркцию монитора Samsung SyncMaster 740BF. У него кадровая аж до 75Гц.
Посему остановлюсь скорее всего на первом варианте.
Набросал в схеме как выглядит синхрогенератор 640x400. Ну это так представление что к чему. :)
Главное не уткнуться в быстродействие TTL логики, 25Мгц + достаточно длинные цепочки, вполне может боком вылезти, надо длинные цепи по задержке посчитать
Схема не синхронная счетчиков по 3 в цепочке, для стабильности лучше брать счетчик которые с клоком и сигналом +1, все счетчики общим клоком запитать, уменьшит разброд и шатание
PS. (offtop) Знаю что не сторонник, но все же именно для таких схем просто идеальны всяки EPM3032 (схема по прикидкам именно в такую и влезет)
Главное не уткнуться в быстродействие TTL логики, 25Мгц + достаточно длинные цепочки, вполне может боком вылезти, надо длинные цепи по задержке посчитать
Схема не синхронная счетчиков по 3 в цепочке, для стабильности лучше брать счетчик которые с клоком и сигналом +1, все счетчики общим клоком запитать, уменьшит разброд и шатание
PS. (offtop) Знаю что не сторонник, но все же именно для таких схем просто идеальны всяки EPM3032 (схема по прикидкам именно в такую и влезет)
Ну это как аналог того что будет в ПЛИСке. Я правда кроме AHDL на других языках не писал.
как аналог того что будет в ПЛИСке
Если мыслить схемами то AHDL это как бы оно, AHDL текстовое описание схем, VHDL Veroilog там больше уже функциональное описание а не RTL
Error404
23.02.2013, 17:58
16 цветный
Маловато как-то. Больше никак не вписывается?
Error404, а для чего больше в тексте ? Речь об аппаратном текстовом режиме, как я понимаю.
Маловато как-то. Больше никак не вписывается?
Это моя тестовая конфигурация. Мне пока хватит и текстового режима с 16 цветами. :)
Ну а так максимально 64 цвета может быть.
---------- Post added at 19:28 ---------- Previous post was at 19:27 ----------
Error404, а для чего больше в тексте ? Речь об аппаратном текстовом режиме, как я понимаю.
Да я хочу попробовать аппаратный текстовый режим. Я пока набрасываю схемные куски, чтобы понять лучше сам процесс.
Error404
23.02.2013, 20:42
Error404, а для чего больше в тексте ? Речь об аппаратном текстовом режиме, как я понимаю.
Текстообработка - тот случай, когда надо иметь максимально щадящие цвета. Из 16 это будет сложно подобрать
Собираюсь заказать печатку на сделующей неделе. Кому нибудь еще нужна будет?
Viktor2312
09.03.2013, 19:30
Собираюсь заказать печатку на сделующей неделе. Кому нибудь еще нужна будет?
Мне 1 шт.
Шелкография нужна?
Лично я могу и без нее обойтись.
Viktor2312
09.03.2013, 20:10
Шелкография нужна?
Лично я могу и без нее обойтись.
Лучше с шелкографией, проще паять, а цена не намного увеличится, как мне кажется.
perestoronin
10.03.2013, 04:32
Мне 1шт, желательно c зеленой маской на обе стороны (переходные отверстия лучше открыть) и шелкографией на top.
Только на шелкографии обозначение мелких конденсаторов и резисторов не будет, только контуры. Иначе каша будет. Собственно как на картинках в первом посте.
P.S. Хотя нет, будут и обозначения, вроде вместились.
piroxilin
10.03.2013, 23:31
А в какую цену выйдет?
Я бы взял, если до тыщщи.
А в какую цену выйдет?
Я бы взял, если до тыщщи.
Если десяток заказать, то точно меньше тыщи выйдет :)
Вобщем заказал я 10 штук плат.
Правильно сделал. Я тоже возьму одну, давно не мучил котёнков...
Сейчас дали ответ, вобщем плата стоить будет в районе 700...750 руб.
Оплатил платки, будут ориентировочно в середине апреля.
Пока платы делаются, есть время занятся описанием архитектуры.
Из конфигруации есть:
ОЗУ - общая емкость 1Мб
ПЗУ - общая емкость 512Кб
Опишу свою конфигурацию, что мне хочется.
На картинке я предварительно раскидал распределение адресного пространства. т.е. ПЗУ разбивается на страницы по 8кб. Причем ПЗУ отключаемое и вместо него подключается 0 страница ОЗУ.
Далее ОЗУ как и в спеке разбивается на 16кб страницы, так проще потом
на тот же спек переносить.
Экран тествовый 80x25 с атрибутами = 4кб. Он может располагаться по разным адресам, в зависимости что нужно делать программе. Для простоты
сделал его кратным 2000h адресу.
А еще можно предусмотреть что бы окно проецирования памяти как в профи можно было перекидывать из 3 банки в 1, так как предполагается текстовый режим будет очень удобно для CP/M, ресурсов копейки займет
из 3 банки в 1, так как предполагается текстовый режим будет очень удобно для CP/M, ресурсов копейки займет
А по подробнее.
У профи есть бит в каком то из портов, по нему окно с переключаемыми страницами озу перемещается из #c000-FFFF в #4000-7FFF, по сути это Исключающее ИЛИ этого бита в порту с A15 для дешифратора страницы проца с переключаемыми страницами памяти, так что для реализации надо 1 триггер + 1 XOR, укладывается вообще в 1 макроячейку CPLD серии MAX
А нужно для того что бы не переключать старшие адреса у CP/M там как минимум точки входа в BIOS и BDOS
У профи есть бит в каком то из портов, по нему окно с переключаемыми страницами озу перемещается из #c000-FFFF в #4000-7FFF, по сути это Исключающее ИЛИ этого бита в порту с A15 для дешифратора страницы проца с переключаемыми страницами памяти, так что для реализации надо 1 триггер + 1 XOR, укладывается вообще в 1 макроячейку CPLD серии MAX
А нужно для того что бы не переключать старшие адреса у CP/M там как минимум точки входа в BIOS и BDOS
Типа вот так вот.
Прошлую картинку удалил. Еще добавил рисунок портов управления памятью.
Вроде так, и еще видео озу из адресного пространства порта исключается при необходимости?
Совсем забыл что для текстового режима нужен знакогенератор. А так как он загружаемый и занимает 4кб (8x16 - 256 символов), то общая видеопамять будет 8 кб.
Картинку памяти обновил.
---------- Post added at 09:36 ---------- Previous post was at 09:34 ----------
Вроде так, и еще видео озу из адресного пространства порта исключается при необходимости?
Память общая, отдельного видео ОЗУ нет. Видео можно просто заблокировать, не выводя на экран.
Я имел ввиду как в спектруме включил второй экран, а в с000-фффф разместил к примеру 0 страницу ОЗУ, в итоге в адресном пространстве проца нет области видеопамяти
Я имел ввиду как в спектруме включил второй экран, а в с000-фффф разместил к примеру 0 страницу ОЗУ, в итоге в адресном пространстве проца нет области видеопамяти
Все понял тебя. Можно сделать по другому, ограничится например страницами 0,1,2,3. А все остальные видео не доступны.
Т.е. аппаратно при обращении к видео блокируются биты RPage2...RPage5, иными словами обнуляются.
---------- Post added at 10:49 ---------- Previous post was at 10:45 ----------
Еще добавил рисунок строения экрана. В принципе текстовый экран напоминает PC шный :)
Сегодня получил печатные платы, фото которой можно посмотреть в первом посте.
Плат 10шт. Тема продажи будет создана в барахолке.
И просьба к гуру ПЛИС в помощи создания прошивки. Я конечно на AHDL могу попробовать набросать, но все тут VHDL увлечены, а я его что то не пойму никак.
---------- Post added at 21:22 ---------- Previous post was at 20:45 ----------
Тема в барахолке. http://zx-pk.ru/market/viewtopic.php?f=7&t=812#p7180
Я как бухгалтер экономист слегка умею, ток не VHDL а на Verilog, но он тут не популярен, заплюют :)
Могу попутно помочь с текстовым режимом, сейчас сам над ним мозгую :)
Могу попутно помочь с текстовым режимом, сейчас сам над ним мозгую :)
На следующей неделе скину свою задумку в виде схемы-аналога.
P.S. И надо еще с портами борды определится.
perestoronin
12.04.2013, 23:06
а Verilog, но он тут не популярен
Verilog (http://iverilog.icarus.com/) ничем не хуже других
shurik-ua
16.04.2013, 11:36
Обман зрения ? ) , но правая плата меньше ))
Обман зрения ? ) , но правая плата меньше ))
Заблуждение, они все одинаковые. Это видимо такой ракурс про фотографировании :)
Блин, начал собирать, оказалось я еще не все детали купил :( А я думал что все заказал :(
В первом посте выложил сборочный чертеж с перечнем элементов. А то что то я про него совсем забыл.
Собрал почти плату, не хватает двух элементов, без которых полноценно работать не сможет. Они только к концу мая пришлепают. Я разиня что то проморгал их.
Вот пока как выглядит плата.
http://s003.radikal.ru/i202/1304/02/1c1bb1528797t.jpg (http://radikal.ru/F/s003.radikal.ru/i202/1304/02/1c1bb1528797.jpg)
Но логику, мегу и прошивку можно уже начинать писать :)
Mick, клево выглядит!
---------- Post added at 22:09 ---------- Previous post was at 22:04 ----------
не хватает двух элементов
DD9, DD12? :)
DD9, DD12? :)
Да, но самое обидное, что они как бы были. Хорошо я посмотрел маркировку перед пайкой, оказалось вместо них элементы типа ЛА3 :(
Слобал страничку на своем сайте по девборде. http://micklab.narod.ru/devboardz80.htm
Там выложил всю текущую информацию о ней.
Эту же ссылку вставил и в первый пост.
Начал помаленьку разбираться в VHLD на основе проекта speccy2007.
Вот пока какие порты в девборде.
1. Порт управления страницами ПЗУ (64 страницы по 8кб)
2. Порт управления страницами ОЗУ (64 страницы по 16кб)
3. Порт управления памятью
4. Порт бордера
5. Порт данных SD Card
6. Порт управления SD Card
7. Максимально AVR адресуется 64 порта (адреса A0...A5)
Подробнее с некоторыми портами и конфой можно ознакомится тут http://zx-pk.ru/showpost.php?p=584035&postcount=173
В AVR пока я думаю нужны на первое время это порты работы с клавиатурой и RS232
Теперь вот вопрос эти порты в какие адреса будем впихивать. Конечно удобнее общаться по out порт,a и in a,порт
Но вот как бы не пересечься с адресами спековских железок. А то может возникнуть небольшой конфуз.
Mick, поправь ссылку на PDFку - "4. Электрическая и монтажная схемы, перечень элементов в формате pdf - скачать"
Mick, поправь ссылку на PDFку - "4. Электрическая и монтажная схемы, перечень элементов в формате pdf - скачать"
Поправил.
---------- Post added at 11:14 ---------- Previous post was at 10:20 ----------
Вот пока склоняюсь к такой раскладке портов
1. Порт управления страницами ПЗУ (64 страницы по 8кб) - 0С0h
2. Порт управления страницами ОЗУ (64 страницы по 16кб) - 0C1h
3. Порт управления памятью - 0C2h
4. Порт бордера - 0C4h
5. Порт данных SD Card - 0C6h
6. Порт управления SD Card - 0C7h
7. Максимально AVR адресуется 64 порта (адреса A0...A5) - 80h...0BFh
Продолжая начатую тему в этом посте http://zx-pk.ru/showpost.php?p=578643&postcount=147 , где в pdf- ке была эквивалентная схема синхрогенератора.
Вот нарисовал приблизительную схему формирования текстового режима (см. вложение).
Опишу то, как я это вижу. По сути у меня синхронная схема доступа к памяти. Память работает как бы в турбо режиме (6,25МГц). Память разделена на два банка, четный байт и нечетный. Сигнал H1(6,25МГц) как и в Спеке отвечает за доступ к памяти H1 =0 - обращается процессор, H1 =1 обращается видеоконтроллер.
Сигнал H2(3,125 МГц) отвечает за считывание видеоданных. А именно, при H2 =0 считывается код символа(четный байт) и его цвет (нечетный байт).
При H2 =1 происходит считывания видеоинформации из знакогенератора.
Так, как память как бы линейна, т.е. вторая строка текста идет непосредственно за первой, то пришлось применить сумматоры. Но вроде получилось все изящно :)
На картинке как бы теоретически выглядят некоторые сигналы.
http://i072.radikal.ru/1305/60/6d3ada4cb9a7.gif (http://www.radikal.ru)
Вобщем смотрите, желательно поразбираться в схеме. Вдруг что упустил :)
И еще вот небольшая табличка раскладки текстовых строк
V8 V7 V6 V5 V4 H9 H8 H7 H6 H5 H4 H3 VA11 VA10 VA9 VA8 VA7 VA6 VA5 VA4 VA3 VA2 VA1 VA0
0 0 0 0 0 0 0 0 0 0 0 0 - 1 строка 000h -> 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 - 2 строка 0A0h -> 0 0 0 0 1 0 1 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 - 3 строка 140h -> 0 0 0 1 0 1 0 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0 0 0 - 4 строка 1E0h -> 0 0 0 1 1 1 1 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 - 5 строка 280h -> 0 0 1 0 1 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0 0 - 6 строка 320h -> 0 0 1 1 0 0 1 0 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 - 7 строка 3C0h -> 0 0 1 1 1 1 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 - 8 строка 460h -> 0 1 0 0 0 1 1 0 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 - 9 строка 500h -> 0 1 0 1 0 0 0 0 0 0 0 0
0 1 0 0 1 0 0 0 0 0 0 0 - 10 строка 5A0h -> 0 1 0 1 1 0 1 0 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0 - 11 строка 640h -> 0 1 1 0 0 1 0 0 0 0 0 0
0 1 0 1 1 0 0 0 0 0 0 0 - 12 строка 6E0h -> 0 1 1 0 1 1 1 0 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 0 - 13 строка 780h -> 0 1 1 1 1 0 0 0 0 0 0 0
0 1 1 0 1 0 0 0 0 0 0 0 - 14 строка 820h -> 1 0 0 0 0 0 1 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 - 15 строка 8C0h -> 1 0 0 0 1 1 0 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0 0 0 - 16 строка 960h -> 1 0 0 1 0 1 1 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 - 17 строка A00h -> 1 0 1 0 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 0 0 0 0 - 18 строка AA0h -> 1 0 1 0 1 0 1 0 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 - 19 строка B40h -> 1 0 1 1 0 1 0 0 0 0 0 0
1 0 0 1 1 0 0 0 0 0 0 0 - 20 строка BE0h -> 1 0 1 1 1 1 1 0 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0 0 - 21 строка C80h -> 1 1 0 0 1 0 0 0 0 0 0 0
1 0 1 0 1 0 0 0 0 0 0 0 - 22 строка D20h -> 1 1 0 1 0 0 1 0 0 0 0 0
1 0 1 1 0 0 0 0 0 0 0 0 - 23 строка DC0h -> 1 1 0 1 1 1 0 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0 0 - 24 строка E60h -> 1 1 1 0 0 1 1 0 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 - 25 строка F00h -> 1 1 1 1 0 0 0 0 0 0 0 0
V8 V7 V6 V5 V4 H9 H8
+
0 0 V8 V7 V6 V5 V4 VA11 VA10 VA9 VA8 VA7 VA6 VA5
0 0 0 0 0 0 0
0 0 0 0 0 0 0 - 1 строка 000h -> 0 0 0 0 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 0 1 - 2 строка 0A0h -> 0 0 0 0 1 0 1
0 0 0 1 0 0 0
0 0 0 0 0 1 0 - 3 строка 140h -> 0 0 0 1 0 1 0
0 0 0 1 1 0 0
0 0 0 0 0 1 1 - 4 строка 1E0h -> 0 0 0 1 1 1 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0 - 5 строка 280h -> 0 0 1 0 1 0 0
0 0 1 0 1 0 0
0 0 0 0 1 0 1 - 6 строка 320h -> 0 0 1 1 0 0 1
0 0 1 1 0 0 0
0 0 0 0 1 1 0 - 7 строка 3C0h -> 0 0 1 1 1 1 0
0 0 1 1 1 0 0
0 0 0 0 1 1 1 - 8 строка 460h -> 0 1 0 0 0 1 1
0 1 0 0 0 0 0
0 0 0 1 0 0 0 - 9 строка 500h -> 0 1 0 1 0 0 0
0 1 0 0 1 0 0
0 0 0 1 0 0 1 - 10 строка 5A0h -> 0 1 0 1 1 0 1
0 1 0 1 0 0 0
0 0 0 1 0 1 0 - 11 строка 640h -> 0 1 1 0 0 1 0
0 1 0 1 1 0 0
0 0 0 1 0 1 1 - 12 строка 6E0h -> 0 1 1 0 1 1 1
0 1 1 0 0 0 0
0 0 0 1 1 0 0 - 13 строка 780h -> 0 1 1 1 1 0 0
0 1 1 0 1 0 0
0 0 0 1 1 0 1 - 14 строка 820h -> 1 0 0 0 0 0 1
0 1 1 1 0 0 0
0 0 0 1 1 1 0 - 15 строка 8C0h -> 1 0 0 0 1 1 0
0 1 1 1 1 0 0
0 0 0 1 1 1 1 - 16 строка 960h -> 1 0 0 1 0 1 1
1 0 0 0 0 0 0
0 0 1 0 0 0 0 - 17 строка A00h -> 1 0 1 0 0 0 0
1 0 0 0 1 0 0
0 0 1 0 0 0 1 - 18 строка AA0h -> 1 0 1 0 1 0 1
1 0 0 1 0 0 0
0 0 1 0 0 1 0 - 19 строка B40h -> 1 0 1 1 0 1 0
1 0 0 1 1 0 0
0 0 1 0 0 1 1 - 20 строка BE0h -> 1 0 1 1 1 1 1
1 0 1 0 0 0 0
0 0 1 0 1 0 0 - 21 строка C80h -> 1 1 0 0 1 0 0
1 0 1 0 1 0 0
0 0 1 0 1 0 1 - 22 строка D20h -> 1 1 0 1 0 0 1
1 0 1 1 0 0 0
0 0 1 0 1 1 0 - 23 строка DC0h -> 1 1 0 1 1 1 0
1 0 1 1 1 0 0
0 0 1 0 1 1 1 - 24 строка E60h -> 1 1 1 0 0 1 1
1 1 0 0 0 0 0
0 0 1 1 0 0 0 - 25 строка F00h -> 1 1 1 1 0 0 0
Mick а как вы паяли центральную микросхему с тонкими выводами, пардон за нубский вопрос, давно отошел уже от этого.
Mick а как вы паяли центральную микросхему с тонкими выводами, пардон за нубский вопрос, давно отошел уже от этого.
Короче беру паяльник с тонким жалом, сначала аккуратно припаиваю крайние ножки, чтобы держалась вся микруха. Затем я просто очищаю многожильный провод мгтф от оплетки. Немного жидкого флюса на ножки микросхемы, прикладываю провод поперек ножек и просто прикладываю жало с капелькой припоя к проводку. Тем самым и прогреваю и припой растекается по ножкам, а провод не дает образовываться соплям. Где то так.
shurik-ua
17.05.2013, 19:36
что это за мистический порт бордера, неужели того самого бордера от спектрума ? )
если так - то ненужен он имхо - забудьте уже про него ).
Наконец то получил недостающие детали и собрал до конца плату. Ну теперь надо писать прошивки.
Фото можно посмотреть тут http://micklab.narod.ru/devboardz80.htm
Все вернулся я в проект. Начал описывать на VHDL синхрогенератор.
Кто силен в сием языке проверьте правильно ли я описал сам процесс формирования сигналов синхрогенератора.
library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.std_logic_unsigned.all;
entity Devboard_z80 is
port(
-- Входная тактовая частота CLK
CLK_25MHZ : in std_logic;
-- Сигналы управления RAM памятью
MA : out std_logic_vector(18 downto 0) := "0000000000000000000";
MDL : inout std_logic_vector(7 downto 0) := "ZZZZZZZZ";
MDH : inout std_logic_vector(7 downto 0) := "ZZZZZZZZ";
WR_RAM_L : out std_logic := '1';
WR_RAM_H : out std_logic := '1';
-- Выходные сигналы видео формирователя
VD : out std_logic_vector(5 downto 0) := "000000";
HS : out std_logic := '1';
VS : out std_logic := '0';
-- Сигналы управления ROM памятью
ROM_A11 : out std_logic := '0';
ROM_A12 : out std_logic := '0';
ROM_A13 : out std_logic := '0';
ROM_A14 : out std_logic := '0';
ROM_A15 : out std_logic := '0';
ROM_A16 : out std_logic := '0';
ROM_A17 : out std_logic := '0';
ROM_A18 : out std_logic := '0';
CS_ROM : out std_logic := '1';
-- Сигналы управления с CPU
CA : in std_logic_vector(15 downto 0);
CD : inout std_logic_vector(7 downto 0) := "ZZZZZZZZ";
C_CLK : out std_logic := '1';
C_IORQ : in std_logic;
C_MREQ : in std_logic;
C_M1 : in std_logic;
C_RD : in std_logic;
C_WR : in std_logic;
-- Общие сигналы
C_RESET : in std_logic;
C_IORQGE : in std_logic;
C_INT : out std_logic := '1';
CS_DEV : out std_logic := '0';
-- Сигналы взаимодействия с AVR микроконтроллером
CS_AVR : out std_logic := '1';
C_MOSI : in std_logic;
C_SCK : in std_logic;
C_MISO : out std_logic := '1';
-- Сигналы SD Card
SD_CS : out std_logic := '1';
SD_SCK : out std_logic := '1';
SD_MOSI : out std_logic := '1';
SD_MISO : in std_logic
);
end Devboard_z80;
architecture rtl of Devboard_z80 is
signal Sync_count : std_logic_vector(2 downto 0); -- 3-х разрядный счетчик, сигналы H0, H1, H2
signal HSync_count : std_logic_vector(6 downto 0); -- 7-и разрядный счетчик строчной разверкти, сигналы H3..H9
signal VSync_count : std_logic_vector(8 downto 0); -- 9-и разрядный счетчик кадровый развертки, сигналы V0..V8
signal HBlank : std_logic; -- сигнал гашения видеосигнала строчный
signal VBlank : std_logic; -- сигнал гашения видеосигнала кадровый
signal HBorder : std_logic; -- сигнал строчного бордера
signal VBorder : std_logic; -- сигнал кадрового бордера
signal HSync : std_logic; -- строчный синхроимпульс
signal VSync : std_logic; -- кадровый синхроимпульс
-- Управляющие сигналы
signal IO_RD : std_logic := '1'; -- чтение из портов
signal IO_WR : std_logic := '1'; -- запись в порты
signal ROM_RD : std_logic := '1'; -- чтение из ПЗУ
signal ROM_WR : std_logic := '1'; -- запись в ПЗУ
signal AVR_SEL : std_logic := '1'; -- выбор AVR
signal ROM_SEL : std_logic := '1'; -- выбор ПЗУ
-- Регистр бордера
signal Border_Color_r : std_logic_vector(3 downto 0) := "0000";
-- Регистр страниц памятью
signal Video_Page_r : std_logic_vector(2 downto 0) := "000";
signal EnRAM_r : std_logic := '0'; -- Блокировка ОЗУ в 0000...3FFFh
signal EnROM_r : std_logic := '0'; -- Блокировка ПЗУ
signal RMode_r : std_logic := '0'; -- Режим отображения страниц памяти
signal EWROM_r : std_logic := '0'; -- Разрешение записи в FLASH ROM
-- Регистр страниц микросхемы ROM (64 страницы по 16кб)
signal RAM_PAGE_r : std_logic_vector(5 downto 0) := "000000";
-- Регистр страниц микросхемы ROM (64 страницы по 8кб)
signal ROM_PAGE_r : std_logic_vector(5 downto 0) := "000000";
begin
------------------------------------------------------------------------------------
-- Синхрогенератор
------------------------------------------------------------------------------------
-- Clock frequency 25.175 MHz
-- "640 x 400 VGA text"
-- Line frequency 31469 Hz
-- Field frequency 70.086 Hz
-- Sync polarity: H negative, V positive
-- Scan type: non interlaced.
------------------------------------------------------------------------------------
-- Системные сигналы
------------------------------------------------------------------------------------
Sync_system : process(CLK_25MHZ,C_RESET)
begin
if C_RESET = '0' then
Sync_count <= (others => '0');
elsif (CLK_25MHZ'event and CLK_25MHZ = '0') then
Sync_count <= Sync_count + '1';
end if;
end process Sync_system;
------------------------------------------------------------------------------------
-- Строчная развертка
------------------------------------------------------------------------------------
-- One line:
-- 8 pixels front porch
-- 96 pixels horizontal sync
-- 40 pixels back porch
-- 8 pixels left border
-- 640 pixels video
-- 8 pixels right border
------------------------------------------------------------------------------------
-- 800 pixels total per line
------------------------------------------------------------------------------------
-- Реализация
------------------------------------------------------------------------------------
-- 80 видимая часть
-- 1 правый бордер
-- 1 начало гасящего импульса
-- 12 строчный импульс
-- 5 конец гасящего импульса
-- 1 левый бордер
-- =
-- 100 сброс счетчиков строчной развертки
------------------------------------------------------------------------------------
Horizonal_sync : process(CLK_25MHZ,C_RESET)
begin
if C_RESET = '0' then
HSync_count <= (others => '0');
elsif (CLK_25MHZ'event and CLK_25MHZ = '0') then
if (Sync_count(2)'event and Sync_count(2) = '0') then
if HSync_count = 100 then
HSync_count <= (others => '0');
else
HSync_count <= HSync_count + '1';
end if;
if HSync_count >= 80 then
HBorder <= '0';
else
HBorder <= '1';
end if;
if (HSync_count >= 82 and HSync_count < 94) then
HSync <= '0';
else
HSync <= '1';
end if;
if (HSync_count >= 81 and HSync_count < 99) then
HBlank <= '0';
else
HBlank <= '1';
end if;
end if;
end if;
end process Horizonal_sync;
------------------------------------------------------------------------------------
-- Кадровая развертка
------------------------------------------------------------------------------------
-- One field:
-- 5 lines front porch
-- 2 lines vertical sync
-- 28 lines back porch
-- 7 lines top border
-- 400 lines video
-- 7 lines bottom border
------------------------------------------------------------------------------------
-- 449 lines total per field
------------------------------------------------------------------------------------
-- Реализация
------------------------------------------------------------------------------------
-- 400 видимая часть
-- 7 нижний бордер
-- 5 начало гасящего импульса
-- 2 кадровый импульс
-- 28 конец гасящего импульса
-- 7 верхний бордер
-- =
-- 449 сброс счетчиков строчной развертки
------------------------------------------------------------------------------------
Vertical_sync : process(CLK_25MHZ,C_RESET)
begin
if C_RESET = '0' then
VSync_count <= (others => '0');
elsif (CLK_25MHZ'event and CLK_25MHZ = '0') then
if (HSync_count(6)'event and HSync_count(6) = '0') then
if VSync_count = 449 then
VSync_count <= (others => '0');
else
VSync_count <= VSync_count + '1';
end if;
if VSync_count >= 400 then
VBorder <= '0';
else
VBorder <= '1';
end if;
if (VSync_count >= 412 and VSync_count < 414) then
VSync <= '0';
else
VSync <= '1';
end if;
if (VSync_count >= 407 and VSync_count < 442) then
VBlank <= '0';
else
VBlank <= '1';
end if;
end if;
end if;
end process Vertical_sync;
end;
За основу брал схему http://zx-pk.ru/showpost.php?p=578643&postcount=147
Если быть точнее счетчики 3 разряда - 7 разрядов - 9 разрядов :)
Такое компилятор не осилит:
elsif (CLK_25MHZ'event and CLK_25MHZ = '0') then
if (Sync_count(2)'event and Sync_count(2) = '0') then
Такое компилятор не осилит:
elsif (CLK_25MHZ'event and CLK_25MHZ = '0') then
if (Sync_count(2)'event and Sync_count(2) = '0') then
Квартус при компиляции не ругался.
Хорошо, ну а как тогда этот счетчик описать правильнее будет. Только чур не объединять счетчики в одну кучу.
Mick, компилятор не сругнется, но работать такое не будет.
if sync_count = 7 - вот так надо
Примерно так:
elsif (CLK_25MHZ'event and CLK_25MHZ = '1') then
if (Sync_count = 7) then
if HSync_count = 99 then
HSync_count <= (others => '0');
elsif (CLK_25MHZ'event and CLK_25MHZ = '1') then
if (HSync_count = 99 and Sync_count= 7) then
if VSync_count = 448 then
VSync_count <= (others => '0');
Mick, компилятор не сругнется, но работать такое не будет.
if sync_count = 7 - вот так надо
Хорошо, но тогда вопрос в другом. Ведь по схеме сторчный счетчик срабатывает при переходе из 7 -> 0, т.е. по спаду. А тут получится немного раньше сработает.
---------- Post added at 16:00 ---------- Previous post was at 15:58 ----------
Примерно так:
elsif (CLK_25MHZ'event and CLK_25MHZ = '1') then
if (Sync_count = 7) then
if HSync_count = 99 then
HSync_count <= (others => '0');
elsif (CLK_25MHZ'event and CLK_25MHZ = '1') then
if (HSync_count = 99 and Sync_count= 7) then
if VSync_count = 448 then
VSync_count <= (others => '0');
Ах да, забыл еще и с 0 посчитать. :v2_dizzy_facepalm:
Еще вопрос, как правильнее описать вот этот кусок схемы.
------------------------------------------------------------------------------------
-- Сигнал стробирования адреса и формирование частоты процессора
-- Примечание: память работает на частоте 12,5МГц, процессор на частоте 6,25МГц
------------------------------------------------------------------------------------
Clock_sync : process(CLK_25MHZ)
begin
if (CLK_25MHZ'event and CLK_25MHZ = '1') then
Strobe_Addr <= Sync_count(0);
if(CLK_25MHZ = '1' and Sync_count(0) = '0') then
C_CLK <= not Sync_count(1);
end if;
end if;
end process Clock_sync;
Так как схема синхронна, то для того чтобы работать в VGA в столь извращенном виде необходимо чтобы память работала считай в турбо режиме. В данном случае H0 = 12,5МГц, H1 = 6,25МГц. Процессор планируется работать на частоте 6,25 МГц.
Сигнал RAS/ это считай строб адреса для мультиплексоров типа КП13.
Типа такой схемы я опробовал в втором Фениксе (память работала всегда на 7Мгц, а процессор либо 3,5МГц, либо 7МГц).
if rising_edge(f25) then RAS <= H0;
if rising_edge(f25) and H0 = 0 then CLK <= not H1;
синтаксис проверяй!
можешь объединить все под условием rising_edge или как ты пишешь : 'event и '=1
if rising_edge(f25) then RAS <= H0;
if rising_edge(f25) and H0 = 0 then CLK <= not H1;
синтаксис проверяй!
можешь объединить все под условием rising_edge или как ты пишешь : 'event и '=1
Как я понял, будет выглядеть так.
------------------------------------------------------------------------------------
-- Сигнал стробирования адреса и формирование частоты процессора
-- Примечание: память работает на частоте 12,5МГц, процессор на частоте 6,25МГц
------------------------------------------------------------------------------------
Clock_sync : process(CLK_25MHZ)
begin
if (CLK_25MHZ'event and CLK_25MHZ = '1') then
Strobe_Addr <= Sync_count(0); -- RAS <= H0;
if Sync_count(0) = '0' then
C_CLK <= not Sync_count(1); -- C_CLK <= not H1;
end if;
end if;
end process Clock_sync;
Mick, да, все правильно. Можно сделать 2 отд.процесса - по 1 для каждого сигнала (CLK и RAS), профики вроде так делают обычно, разделяют логику. Все условие в скобках необязательно писать. Но если тебе так проще, то и нормально.
http://tehnari.info/glava-2.-yazyk-vhdl/operatsii-v-yazyke-vhdl.html - тут приоритеты (по возрастанию), чтобы меньше скобок делать.
Mick, да, все правильно. Можно сделать 2 отд.процесса - по 1 для каждого сигнала (CLK и RAS), профики вроде так делают обычно, разделяют логику. Все условие в скобках необязательно писать. Но если тебе так проще, то и нормально.
http://tehnari.info/glava-2.-yazyk-vhdl/operatsii-v-yazyke-vhdl.html - тут приоритеты (по возрастанию), чтобы меньше скобок делать.
Я пока не профик, я еще только в начале пути :)
Кстати, если допустим разделить процессы
то если с RAS понятно
RAS_sync : process(CLK_25MHZ)
begin
if (CLK_25MHZ'event and CLK_25MHZ = '1') then
Strobe_Addr <= Sync_count(0); -- RAS <= H0;
end if;
end process RAS_sync;
То вот для CLK процесса как правильнее будет
CLK_sync : process(CLK_25MHZ)
begin
if (CLK_25MHZ'event and CLK_25MHZ = '1') then
if Sync_count(0) = '0' then
C_CLK <= not Sync_count(1); -- C_CLK <= not H1;
end if;
end if;
end process CLK_sync;
или
CLK_sync : process(CLK_25MHZ)
begin
if CLK_25MHZ'event and CLK_25MHZ = '1' and Sync_count(0) = '0' then
C_CLK <= not Sync_count(1); -- C_CLK <= not H1;
end if;
end process CLK_sync;
Или они равнозначны?
Ну, я разницы не вижу.
Как читать удобнее, то и выбирай.
-----------------
Пришло в голову:
возможно, во втором случае надо включить в список чувствительности еще и Sync_count(0), только я не уверен.
Пришло в голову:
возможно, во втором случае надо включить в список чувствительности еще и Sync_count(0), только я не уверен.
Тогда оставлю вариант через два if.
Вот еще сигнал INT на проверку. Сигнал прерывания формируется по кадровому импульсу частотой 70Гц.
Длительность прерывания 32 такта процессора.
Сюда нужно добавлять сигнал сброса или не надо?
------------------------------------------------------------------------------------
-- Сигнал прерывания
-- Примечание: прерывание генерится с частотой 70Гц по кадровому синхроимпульсу
------------------------------------------------------------------------------------
INT_sync : process(VSync, HSync_count)
begin
if HSync_count >= 8 then
C_INT <= '1';
elsif (VSync'event and VSync = '1') then
C_INT <= '0';
end if;
end process INT_sync;
Cо сбросом
------------------------------------------------------------------------------------
-- Сигнал прерывания
-- Примечание: прерывание генерится с частотой 70Гц по кадровому синхроимпульсу
------------------------------------------------------------------------------------
INT_sync : process(C_RESET, VSync, HSync_count)
begin
if C_RESET = '0' or HSync_count >= 8 then
C_INT <= '1';
elsif (VSync'event and VSync = '1') then
C_INT <= '0';
end if;
end process INT_sync;
Еще чуток сигналов и синхрогенератор считай написан :)
Может, так (вне процессов) ?
C_INT <= '0' when VSync = '1' and HSync_Count < 8 and C_RESET = '1' else '1';
Нужен ли тут C_RESET (это сброс процессора?), не могу сказать, этот ты должен сам решить.
Может, так (вне процессов) ?
C_INT <= '0' when VSync = '1' and HSync_Count < 8 and C_RESET = '1' else '1';
Нужен ли тут C_RESET (это сброс процессора?), не могу сказать, этот ты должен сам решить.
C_RESET это общий сброс. По сути при сбросе проц запрещает прерывание. По логике, если и возникнет, один фиг его не обработают.
Может действительно сброс лишний.
---------- Post added at 12:12 ---------- Previous post was at 11:59 ----------
Кстати, на счет прерывания.
Помоему не получится как ты написал. Кадровый синхроимпульс длится две строки.
Получится что прерывание возникнет еще и во второй строке.
Mick, без диаграмм сигналов мне сложно сказать, правильно или нет.
Mick, без диаграмм сигналов мне сложно сказать, правильно или нет.
Диаграммы я пока не знаю как в квартусе строить.
Ну а так, если логически смотреть, то твой вариант не использует регистров. А раз так, то прерывание будет возникать на каждой строке пока активен VSync. В доке на видеорежим указано, что кадровый импульс длится 2 строки. Значит и прерывание возникнет два раза. Тут надо подмешивать тогда еще VSync_count(0) = '0'.
Ну или по старинке на ТМ2, т.е. через регистр. :)
---------- Post added at 13:32 ---------- Previous post was at 13:31 ----------
А INTA зачем?
Ты это о чем. Можно ведь и без него делать.
Вот вроде сигналы синхрогенератора все описал (во вложении).
Еще бы отдиаграммить это бы все для полного счастья.
Следующим шагом надо работу с памятью описать.
Mick
Диаграммы я пока не знаю как в квартусе строить.
Я о твоих диаграммах, проектных. Про развертку.
Посмотрел код гориз.развертки:
можно тогда сделать условие не Vsync=1, а Vsync_count=411.
можно тогда сделать условие не Vsync=1, а Vsync_count=411.
Да, в принципе и так можно. Все никак не привыкну к абстракции этого языка. :) Я все на схему опираюсь.
Отмечу себе на заметку на будущую оптимизацию. Пока оставлю как привык :)
Диаграмм разверток нет, только синхросигналы управления.
Я их чуть позже тоже выложу, потому как там надо будет скорректировать фронты срабатывания.
---------- Post added at 16:25 ---------- Previous post was at 16:21 ----------
Кстати, а простенького кода сумматора нет. Мне нужно 6 адресов сложить чтобы на следующую строку переключится.
Тут задумка http://zx-pk.ru/showpost.php?p=600922&postcount=192 в pdf-ке
P.S. Правда я похоже на схеме ошибся. Я расчитал для одного банка памяти что надо прибавлять A0h к каждой строке, а нужно 50h, потому как банки две и адреса у них при обращении к видеопамяти синхрогенератором одинаковые.
Мне нужно 6 адресов сложить чтобы на следующую строку переключится.
C = A + B :)
C = A + B :)
А флаг переноса? Там как бы складываются неоднородные сигналы (не по порядку)
Mick, а что ты имеешь в виду под сумматором?
Знак плюса - сумматор.
Sync_count <= Sync_count + Sync_count2; SyncCountы - signalы опред.разрядности.
Где в схеме сумматор ? Опиши подробнее.
А зачем делать линейную видеопамять? Можно отвести под строку 256 байт. Так и генератор видеоадреса будет проще, и для Z80 меньше геморроя при расчете адреса.
А зачем делать линейную видеопамять? Можно отвести под строку 256 байт. Так и генератор видеоадреса будет проще, и для Z80 меньше геморроя при расчете адреса.
Да особо гемора то нет. В PC особо не заморачиваешься A0h прибавлять :)
---------- Post added at 17:10 ---------- Previous post was at 17:07 ----------
Где в схеме сумматор ? Опиши подробнее.
На схеме ram.pdf два крайних левых ИМ3 сумматора.
Там я ошибся, они прибавляют как бы A0h, а нужно 50h (потому как видео буферы как бы параллельно работают).
Но для примера хотя бы как на схеме опишите. Буду безмерно рад :)
А флаг переноса?
C = A + B + Carry ?
A,B к примеру 8 бит, С-9бит, 9 бит как знак переноса для следующего сумматора
C = A + B + Carry ?
A,B к примеру 8 бит, С-9бит, 9 бит как знак переноса для следующего сумматора
Чтобы не гадать вот что надо просуммировать.
Это кусок схемы с ошибкой, но суть не меняется.
Вроде так:
VX <= ( V7 & V6 & V5 & V4 & H9 & H8 ) + ( '0' & V8 & V7 & V6 & V5 & V4 );
Вроде так:
VX <= ( V7 & V6 & V5 & V4 & H9 & H8 ) + ( '0' & V8 & V7 & V6 & V5 & V4 );
Непонял немного. :)
Я когда то на AHDL писал сумматор, вот поднял AHDL язык и чуток переложил. Получилось вот как, если чего не напутал.
------------------------------------------------------------------------------------
-- Формирование адресов VX
------------------------------------------------------------------------------------
VX5 <= H8 xor V4;
VX5_CY <= (H8 and V4) or (H8 xor V4);
VX6 <= (H9 xor V5) xor VX5_CY ;
VX6_CY <= (H9 and V5) or ((H9 xor V5) and VX5_CY);
VX7 <= V4 xor V6 xor VX6_CY;
VX7_CY <= (V4 and V6) or ((V4 xor V6) and VX6_CY);
VX8 <= (V5 xor V7) xor VX7_CY;
VX8_CY <= (V5 and V7) or ((V5 xor V7) and VX7_CY);
VX9 <= (V6 xor V8) xor VX8_CY;
VX9_CY <= (V6 and V8) or ((H9 xor V5) and VX8_CY);
VX10 <= (V7 xor '0') xor VX9_CY;
AHDL ассемблер, VHDL и Verilog это Pascal и C, то есть языки высокого уровня, где можно не замарачиваться с RTL уровнем а описывать алгоритмы поведенчески, они тебе сами нагенерят сумматоров, они и делители и умножители нагенерят, правда асихронные и медленные
То что выше написали это конкатенация сигналов в векторы а потом сложение этих векторов
Mick, если бы писал модуль сумматора, то твой код вполне бы подошел. На VHDL такими вещами можно и не заморачиваться. Просто объединяй биты в слова, слова складывай - и все.
Мне кажется, тебе надо книгу почитать для примера. Суворова, Шейнин Проектирование цифровых систем на VHDL или автора Бибило
Мне кажется, тебе надо книгу почитать для примера. Суворова, Шейнин Проектирование цифровых систем на VHDL или автора Бибило
Конечно надо, только это боюсь затянется. По мне быстрее научусь если по примеру мозгового штурма. :)
Обмозговал раскладку памяти и как должны работать сумматоры, чтобы прибавлять 50h с каждой строкой (25 текстовых строк )
Теоритическая раскладка
V8 V7 V6 V5 V4 H9 H8 H7 H6 H5 H4 H3 VA11 VA10 VA9 VA8 VA7 VA6 VA5 VA4 VA3 VA2 VA1 VA0
0 0 0 0 0 0 0 0 0 0 0 0 - 1 строка 000h -> 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 - 2 строка 050h -> 0 0 0 0 0 1 0 1 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 - 3 строка 0A0h -> 0 0 0 0 1 0 1 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0 0 0 - 4 строка 0F0h -> 0 0 0 0 1 1 1 1 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 - 5 строка 140h -> 0 0 0 1 0 1 0 0 0 0 0 0
0 0 1 0 1 0 0 0 0 0 0 0 - 6 строка 190h -> 0 0 0 1 1 0 0 1 0 0 0 0
0 0 1 1 0 0 0 0 0 0 0 0 - 7 строка 1E0h -> 0 0 0 1 1 1 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0 - 8 строка 230h -> 0 0 1 0 0 0 0 1 0 0 0 0
0 1 0 0 0 0 0 0 0 0 0 0 - 9 строка 280h -> 0 0 1 0 1 0 0 0 0 0 0 0
0 1 0 0 1 0 0 0 0 0 0 0 - 10 строка 2D0h -> 0 0 1 0 1 1 0 1 0 0 0 0
0 1 0 1 0 0 0 0 0 0 0 0 - 11 строка 320h -> 0 0 1 1 0 0 1 0 0 0 0 0
0 1 0 1 1 0 0 0 0 0 0 0 - 12 строка 370h -> 0 0 1 1 0 1 1 1 0 0 0 0
0 1 1 0 0 0 0 0 0 0 0 0 - 13 строка 3C0h -> 0 0 1 1 1 1 0 0 0 0 0 0
0 1 1 0 1 0 0 0 0 0 0 0 - 14 строка 410h -> 0 1 0 0 0 0 0 1 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 0 - 15 строка 460h -> 0 1 0 0 0 1 1 0 0 0 0 0
0 1 1 1 1 0 0 0 0 0 0 0 - 16 строка 4B0h -> 0 1 0 0 1 0 1 1 0 0 0 0
1 0 0 0 0 0 0 0 0 0 0 0 - 17 строка 500h -> 0 1 0 1 0 0 0 0 0 0 0 0
1 0 0 0 1 0 0 0 0 0 0 0 - 18 строка 550h -> 0 1 0 1 0 1 0 1 0 0 0 0
1 0 0 1 0 0 0 0 0 0 0 0 - 19 строка 5A0h -> 0 1 0 1 1 0 1 0 0 0 0 0
1 0 0 1 1 0 0 0 0 0 0 0 - 20 строка 5F0h -> 0 1 0 1 1 1 1 1 0 0 0 0
1 0 1 0 0 0 0 0 0 0 0 0 - 21 строка 640h -> 0 1 1 0 0 1 0 0 0 0 0 0
1 0 1 0 1 0 0 0 0 0 0 0 - 22 строка 690h -> 0 1 1 0 1 0 0 1 0 0 0 0
1 0 1 1 0 0 0 0 0 0 0 0 - 23 строка 6E0h -> 0 1 1 0 1 1 1 0 0 0 0 0
1 0 1 1 1 0 0 0 0 0 0 0 - 24 строка 730h -> 0 1 1 1 0 0 1 1 0 0 0 0
1 1 0 0 0 0 0 0 0 0 0 0 - 25 строка 780h -> 0 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 H9 H8 H7
+
V8 V7 V6 V5 V4 0 0
+
0 0 V8 V7 V6 V5 V4 VX6 VX5 VX4 VX3 VX2 VX1 VX0
0 0 0 0 0 0 0
0 0 0 0 0 0 0 - 1 строка 000h -> 0 0 0 0 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 0 1 - 2 строка 050h -> 0 0 0 0 1 0 1
0 0 0 1 0 0 0
0 0 0 0 0 1 0 - 3 строка 0A0h -> 0 0 0 1 0 1 0
0 0 0 1 1 0 0
0 0 0 0 0 1 1 - 4 строка 0F0h -> 0 0 0 1 1 1 1
0 0 1 0 0 0 0
0 0 0 0 1 0 0 - 5 строка 140h -> 0 0 1 0 1 0 0
0 0 1 0 1 0 0
0 0 0 0 1 0 1 - 6 строка 190h -> 0 0 1 1 0 0 1
0 0 1 1 0 0 0
0 0 0 0 1 1 0 - 7 строка 1E0h -> 0 0 1 1 1 1 0
0 0 1 1 1 0 0
0 0 0 0 1 1 1 - 8 строка 230h -> 0 1 0 0 0 1 1
0 1 0 0 0 0 0
0 0 0 1 0 0 0 - 9 строка 280h -> 0 1 0 1 0 0 0
0 1 0 0 1 0 0
0 0 0 1 0 0 1 - 10 строка 2D0h -> 0 1 0 1 1 0 1
0 1 0 1 0 0 0
0 0 0 1 0 1 0 - 11 строка 320h -> 0 1 1 0 0 1 0
0 1 0 1 1 0 0
0 0 0 1 0 1 1 - 12 строка 370h -> 0 1 1 0 1 1 1
0 1 1 0 0 0 0
0 0 0 1 1 0 0 - 13 строка 3C0h -> 0 1 1 1 1 0 0
0 1 1 0 1 0 0
0 0 0 1 1 0 1 - 14 строка 410h -> 1 0 0 0 0 0 1
0 1 1 1 0 0 0
0 0 0 1 1 1 0 - 15 строка 460h -> 1 0 0 0 1 1 0
0 1 1 1 1 0 0
0 0 0 1 1 1 1 - 16 строка 4B0h -> 1 0 0 1 0 1 1
1 0 0 0 0 0 0
0 0 1 0 0 0 0 - 17 строка 500h -> 1 0 1 0 0 0 0
1 0 0 0 1 0 0
0 0 1 0 0 0 1 - 18 строка 550h -> 1 0 1 0 1 0 1
1 0 0 1 0 0 0
0 0 1 0 0 1 0 - 19 строка 5A0h -> 1 0 1 1 0 1 0
1 0 0 1 1 0 0
0 0 1 0 0 1 1 - 20 строка 5F0h -> 1 0 1 1 1 1 1
1 0 1 0 0 0 0
0 0 1 0 1 0 0 - 21 строка 640h -> 1 1 0 0 1 0 0
1 0 1 0 1 0 0
0 0 1 0 1 0 1 - 22 строка 690h -> 1 1 0 1 0 0 1
1 0 1 1 0 0 0
0 0 1 0 1 1 0 - 23 строка 6E0h -> 1 1 0 1 1 1 0
1 0 1 1 1 0 0
0 0 1 0 1 1 1 - 24 строка 730h -> 1 1 1 0 0 1 1
1 1 0 0 0 0 0
0 0 1 1 0 0 0 - 25 строка 780h -> 1 1 1 1 0 0 0
Общая раскладка ОЗУ
http://s019.radikal.ru/i620/1307/1d/db05c524ab4b.gif (http://radikal.ru/fp/421dec9b05164fe3a108d6990c107eee)
Ну и во вложении кусок схемы с измененными сумматорами.
Предыдущий файл я удалил за неактуальностью.
shurik-ua
17.07.2013, 14:02
Длительность прерывания 32 такта процессора.
да так сделано в спектруме, но это не означает что так правильно )
по хорошему нужно примерно так
--INT
process(vsync,сpu_m1,cpu_iorq)
begin
if (cpu_iorq and cpu_m1) = '1' then
cpu_int <= '0';
elsif vsync'event and vsync = '1' then
cpu_int <= '1';
end if;
end process;
VGA_VSYNC <= vsync;
правда квартус выдаст warning что клок vsync не прописан в sdc файле, поэтому нужно его там создать )
p.s. активный уровень сигналов сpu_m1 и cpu_iorq - "1", для активного "0" будет - "if (cpu_iorq or cpu_m1) = '0' then"
бмозговал раскладку памяти и как должны работать сумматоры, чтобы прибавлять 50h с каждой строкой (25 текстовых строк )
50h это 40h + 10h
ну к примеру VADDR = VA << 6 + VA << 4 + X
Тобиш умножение VA на 50h
50h это 40h + 10h
ну к примеру VADDR = VA << 6 + VA << 4 + X
Тобиш умножение VA на 50h
Не совсем там получаются чистые VA. Нужно еще и строчные счетчики прибавлять, так как память линейная.
Не совсем там получаются чистые VA
Ну я смысле написал, а счетчики сделать лучше что бы точка отчета совпадала с первым выводимым пикселем, по ресурсам меньше выйдет, и VA будет совпадать с адресами
Ну я смысле написал, а счетчики сделать лучше что бы точка отчета совпадала с первым выводимым пикселем, по ресурсам меньше выйдет, и VA будет совпадать с адресами
Опять же, если смотреть на таблицу памяти, то в фазе H2 = 1 VA подменяются кодом символа для данных из знакогенератора. Так что VA не только за коды символов отвечают, но еще и из знакогенератора читают.
Mick
Так что с кодом сумматоров-то ? Получается ?
если смотреть на таблицу памяти, то в фазе H2 = 1 VA подменяются кодом символа для данных из знакогенератора
Ты про мультиплексоры говоришь?
Mick
Так что с кодом сумматоров-то ? Получается ?
Я пока не прошивал. А так пытаюсь набросать пока виртуальную схему, чего я хочу в итоге :)
Оптимизировать буду потом.
---------- Post added at 18:53 ---------- Previous post was at 18:52 ----------
Ты про мультиплексоры говоришь?
Я ориентируюсь по схеме. По схеме у меня VA это адреса видеоформирователя. В одной фазе они отображают код символа из текстового буфера и код цвета, а в другой отображаются на знакогенератор
---------- Post added at 18:54 ---------- Previous post was at 18:53 ----------
Mick, добавь простой счетчик пикселей отображаемой области, пусть он проецирует их адрес на память. Всё.
А чем случай с сумматором не подходит?
Я ориентируюсь по схеме.
Схемы зло, поведенческое описание рулит, синтезаторы заточены под поведенческое описание и очень много чего плотненько укладывают макроцелы, а rtl стилем описания ты только палки в колеса синтезатору вставляешь, все равно в итоге получиться далеко не то что ты пытался изобразить
К примеру все логические И ИЛИ НЕ условия с простыми результатами, мультиплексоры в некоторых случаях в итоге укалываются в LUTы которые по смыслу как мелкие РТшки в дешифраторах, видеогенераторах и прочей лабуде, где кучу логикой заменяют табличной истиности
Надо мыслить не как бы из того что есть собрать то что нужно, а думать как оно должно работать, буквально разок переключиться на такой метод мышления и дальше пойдет по накатоной
Схемы зло......
Может быть касательно VHDL и Verilog это утверждение и верно. А так не согласен. Схемы заставляют включать мозг. Гораздо интреснее бывает составить из кубиков что то необычное, чем его просто описать некой формулой :)
Надо мыслить не как бы из того что есть собрать то что нужно, а думать как оно должно работать, буквально разок переключиться на такой метод мышления и дальше пойдет по накатоной
Да, так конечно правильнее. Но не все сразу :)
Еще вопрос связанный с записью в память. Как известно шина данных от процессора идет одна. В ПЛИС она разветвляется на две - два банка памяти. Вопрос как правильно разделить ее при записи . Я написал пока так.
------------------------------------------------------------------------------------
-- Запись в память
------------------------------------------------------------------------------------
Write_ram : process(WR_RAM)
begin
if WR_RAM ='0' then
if CA(0) = '0' then
MDL <= CD;
WR_RAM_L <= '0';
MDH <= (others => 'Z');
WR_RAM_H <= '1';
else
MDH <= CD;
WR_RAM_H <= '0';
MDL <= (others => 'Z');
WR_RAM_L <= '1';
end if;
else
WR_RAM_L <= '1';
WR_RAM_H <= '1';
MDH <= (others => 'Z');
MDL <= (others => 'Z');
end if;
end process Write_ram;
Тут мысль пришла, а если так написать. Так вроде проще запись
MDL <= CD when (WR_RAM ='0' and CA(0) ='0') else (others => 'Z');
WR_RAM_L <= '0' when (WR_RAM ='0' and CA(0) ='0') else '1';
MDH<= CD when (WR_RAM ='0' and CA(0) ='1') else (others => 'Z');
WR_RAM_H <= '0' when (WR_RAM ='0' and CA(0) ='1') else '1';
Mick, второй вариант, по-моему, лучше.
Вот добавил код управления памятью и портами. Осталось для первоначального включения добавить только видеоформирователь.
Гуру поведенческого описания поглядите на досуге.
Ram_smx <= '1' when CA(15) and ( CA(14) xor RMode_r ) else '0';
В остальном не заметил ничего подозрительного.
Насчет сумматора:
попробуй также мой вариант и сравни кол-во лог.ячеек.
Может не стоило так мучаться.
Ram_smx <= '1' when CA(15) and ( CA(14) xor RMode_r ) else '0';
Что то я не понял. А зачем тогда обозначать '1' и '0, когда
можно просто
Ram_smx <= CA(15) and (CA(14) xor RMode_r);
А понял, ты имел ввиду Ram_smx <= '1' when (CA(15) = '1' and ( CA(14) xor RMode_r ) = '1') else '0';
По умолчанию сигнал сравнивается с '1'.
Mick
А зачем тогда обозначать '1' и '0, когда
можно просто
Если сигнал =1, то он воспринимается как true,
и наоборот.
Так что можно и без явного сравнения с 0 или 1 записать.
Насчет сумматора:
попробуй также мой вариант и сравни кол-во лог.ячеек.
Может не стоило так мучаться.
Сделал как ты написал, только я складывал как бы три слова.
По старинке у меня проект занимает 174 Logic Cells - 125 LC Registers
По твоему методу 176 Logic Cells - 125 LC Registers
Вобщем добавил я видеоформирователь. Пока не буду вставлять интрефейс SD карты. Я его чесно пионерски стырю с того что ZEK для Феникса писал :)
Посмотрите, может какие замечания будут.
Я не писал, я затачивал и синхронности добавил что бы не глючило
Я не писал, я затачивал и синхронности добавил что бы не глючило
Ну в любом случае, посмотрю тот код и подгоню для своей борды. :)
Mick, вот этот код в регистре сдвига нужен ?
Reg_inf(0) <= '0';
Mick, вот этот код в регистре сдвига нужен ?
Reg_inf(0) <= '0';
Я уже поправил на
Reg_inf(7 downto 0) <= Reg_inf(6 downto 0) & '0';
Я пока цвета так распределил YBGRybgr
Или может наподобие спека сделать YGRBygbr
Цвет фона - старшая тетрада, цвет пикселей - младшая тетрада.
Вот еще один вариант прошивки. Включил в нее код поддержки SD карты.
Теперь буду пробовать заливать.
Проект занял 206 Lоgic Cells - 147 LC Registers. Что составляет 36% от всей емкости EPM570
Mick
Я уже поправил на
Reg_inf(7 downto 0) <= Reg_inf(6 downto 0) & '0';
Я не об этом. Там ВООБЩЕ нужно этот 0 записывать ?
Если вот так оставить Reg_inf(7 downto 1) <= Reg_inf(6 downto 0); и все?
Mick
Я не об этом. Там ВООБЩЕ нужно этот 0 записывать ?
Если вот так оставить Reg_inf(7 downto 1) <= Reg_inf(6 downto 0); и все?
Да как то по привычке все :)
Powered by vBulletin® Version 4.2.5 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot