ошибка реализации устройства
#1
Отправлено 17 Июнь 2012 - 16:18
реализует совместный доступ устройств ввода и вывода к ОЗУ. Разрядность адреса ОЗУ — 5 битов, разрядность данных — 7 битов. По нечётным тактам в ячейку ОЗУ со случайным адресом (сгенерированным генератором случайных чисел) записывается ASCII код символа из буфера компонен-та «Клавиатура», причём если буфер пуст (на выходе компонента — значение «0»), то запись не происходит. По чётным тактам происходит вывод содержимого ОЗУ на светодиодную матрицу размером 7x32 с помощью развёртки, то есть каждый чётный такт — следующая строка точек.
1. Значение ошибки регулярно подаётся на матрицу,о чём она сигнализирует строкой пикселей, подсвеченной красным. Такого не должно быть.
2. Сама схема работает неверно. Если мы не вводим никаких новых символов, изображение на матрице меняться не должно,поскольку содержимое ОЗУ не меняется.
..в чем заключается ошибка на практике и как это исключить?
7_cursovik_6.zip (12,47К)
Количество загрузок:: 2
#2
Отправлено 18 Июнь 2012 - 06:53
#4
Отправлено 18 Июнь 2012 - 14:25
1. У нас есть 2 источника адреса. 1 - генератор случайных чисел, 2 - счетчик тактов. который зациклен на количество строк развертки матрицы (оно же - количество ячеек памяти)?
2. У нас есть 2 клока - четный и нечетный (схему деления клока на четный/нечетный я приводил в ваших старых топиках) - не вижу на схеме. (При этом четный и нечетный клоки - это не фронт и спад сигнала).
3. По каждому четному клоку нужно переключать адрес на входе ОЗУ с ист.1 и ист.2 - это не вижу тоже. Параллельно с этим нужно отображать 1 символ в виде строки на матрице (не пытаться сделать полную развертку в один такт).
4. По каждому нечетному - опять переключаем адрес с ист. 2 на ист. 1, ну и вводим с клавиатуры 1 символ.
5. Матрица все равно будет обновлятся при отсутствии ввода - так как полный цикл развертки происходит за 32 такта, а не за 1. Если нужно делать полное обновление матрицы за 1 такт - нужен второй клок.
6. Красная строка - у меня сложилось впечатление, что это просто активная строчка, выбранная демультиплексором, а не ошибка. Нет?
С адресом я пока не понял, как именно сейчас работает связка ОЗУ/Демуль/Экран - если на входе ОЗУ случайный адрес - на выходе данных должно быть корректное значение (из случайной ячейки) и это значение должно рисоваться на матрице...
Up. Разобрался. При выводе на матрицу надо еще включить сигнал sel, иначе он на дату Z выводит вместо значения.
Вечером буду дома - нарисую, если к тому моменту сами не разберетесь.
#5
Отправлено 18 Июнь 2012 - 15:33
2. Должен быть по условию только один клок.
5. При отсутствии ввода матрица не должна обновляться.
6. Нет, это все-таки ошибка, обозначаемая программой.
Попробую пока поэксперементировать.
#6
Отправлено 18 Июнь 2012 - 20:44
Базовый генератор - один, синхронных клоков - три. Базовый клок, четный клок и нечетный клок.
После полного прохода матрица обновлятся не будет. Но как минимум в течение 64 тактов базового клока после последнего ввода возможно обновление тех строк, которые менялись. Если уж совсем нельзя - без второго (асинхронного к первому) генератора - никак. А при втором генераторе - нужны переходы между клоковыми доменами в районе матрицы. Как делать переход - кое-что сказано здесь.
Там довольно криво выглядит место чтения из клавиатуры. Было бы неплохо пропустить это через регистр, но тогда там придется пропускать и один из адресов, это довольно сильно усложнит схему и внесет задержку. Посмотрите повнимательней - если в какие-то моменты символ будет проглатываться - доработаю.
Прикрепленные файлы
-
my_var.zip (1,74К)
Количество загрузок:: 2
#7
Отправлено 18 Июнь 2012 - 21:29
к примеру, реализация осуществляется примерно так(вариант схемы старого топика, переделанный сегодня)..только боюсь преподавателю необходима именно новая переделанная версия, а не старая, то есть новая схема должна содержать - матрицу с форматом входа - "по строкам".
Прикрепленные файлы
-
7-6.zip (1,64К)
Количество загрузок:: 2
#8
Отправлено 18 Июнь 2012 - 21:51
#10
Отправлено 18 Июнь 2012 - 22:12
У вас в любом случае будет выход генератора. Его, конечно, можно не подавать на тактирование ОЗУ - но тогда там совсем нехорошо получается - придется подавать на синхровход сигнал с логической функции (так как вход там единственный), т.е. по сути заново его создавать. И также по условию встречаются понятия четных тактов и нечетных - как ни считай - у меня 3 получается в итоге.
#11
Отправлено 18 Июнь 2012 - 22:21
и к примеру, если допустить меньшее количество элементов?
#13
Отправлено 18 Июнь 2012 - 22:46
и в результате получилась более правдоподобная схема, с добавлением триггера, спасибо за идею=)
вероятно, теперь нет ошибок, по крайней мере красным не заполняется и значения не меняются, когда не вводим ничего..
еще в первом прошлом варианте - сначала значения заносились в озу, и только потом передавались для формирования изображения на матрицу. Это было не совсем то, необходимо было сразу, без полного заполнения озу..
очень надеюсь, что в этот раз все понравится)
__
спасибо большое за помощь в курсовой, без вас бы я не справилась
Прикрепленные файлы
-
7-6_new.zip (1,63К)
Количество загрузок:: 2
#14
Отправлено 18 Июнь 2012 - 22:58
Up. Посмотрел - у вас сейчас не совсем понятно одно место - адрес для ОЗУ подается только из генератора случайных чисел.
#16
Отправлено 18 Июнь 2012 - 23:09
В первом мы выставляем случайный адрес - и пишем по этому случайному адресу значение из клавиатуры.
А во втором мы обходим все адреса начиная с 00, затем 01, 02 и.т.д. с инкрементом на единицу - каждый из этих адресов в свой такт должен оказаться на адресном входе ОЗУ. Сейчас я не вижу, чтоб он туда попадал в какой-либо момент времени.
Up. Точнее, не вижу момента выставления случайного адреса. А счетчики возле адреса и возле матрицы - по сути дублируются.
#17
Отправлено 18 Июнь 2012 - 23:34