Pull to refresh
16K+
6
38
Rating
3
Subscribers
Send message

Вторая попытка. Подключаем SDRAM к ПЛИС

Reading time15 min
Reach and readers7.7K

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

Немного изменим аппаратную часть. Итак постановка задачи. Будем передавать по последовательному каналу (RS232) с компьютера маркер адреса 0x80, за которым ожидаются два байта содержащие адрес. Маркер данных 0x40, за которым ожидаются два байта данных. Команда 0x20 запись в память, команда 0x10 чтение из памяти (данные не требуются). Кроме этого будем отображать на семи сегментном индикаторе принятые адрес, данные (как переданные, так и прочитанные), и команды. Далее схемы. А так же имейте ввиду, так как я начинающий и опыта у меня мало, пожалуйста внимательно проверяйте всё, если будете повторять.

Читать далее

Подключаем к ПЛИС оперативную память SDRAM

Level of difficultyEasy
Reading time12 min
Reach and readers13K

На страницах всевозможных статей было написано, что управление микросхемой памяти SDRAM это очень сложно. Отчасти это верно, есть масса тонкостей. Процесс освоения новичкам осложнён отсутствием примеров на русском языке. Вашему вниманию предлагается небольшой пример, как можно подключить оперативную память к ПЛИС. Эти заметки для новичков, таких как и я. А следовательно не торопитесь, проверяйте всё что будете использовать. Особенно реализацию платы, если она у вас самодельная. Опытным пользователям можно не читать (разве что из спортивного интереса). Не буду увлекаться теорией, кому нужно читайте литературу или хотя бы спросите искусственный интеллект (он неплохо может расписать что к чему).

В общих чертах, необходимо провести инициализацию микросхемы (см. документацию на микросхему) и в дальнейшем подавать команды (это сигналы CS, RAS, CAS, WE). Повторюсь, почитайте литературу. Для тех кто совсем не в теме краткое резюме по работе с SDRAM.

Каждые 64 мс необходимо выполнить перезаряд строки памяти. Какой строки, решает сама микросхема, главное команду ей дать (плюс-минус не сильно позже указанного интервала). Так как команды выполняются значительно быстрее этого срока, то не страшно если пришло время регенерации, а выполняется команда. Можно подождать.

Дальше для чтения записи, выполняем активацию строки (память организованна в виде строк и столбцов), на шине адрес строки и команда активации. Далее команда (например) чтения столбца, на шине адрес столбца и команда чтения. Далее чтение данных и в завершении команда перезаряда (после доступа данные нужно перезаписать см. литературу). Естественно между командами выдерживаются заданные паузы (см. документацию).

Читать далее

Подключаем к ПЛИС клавиатуру PS/2 и ПК по интерфейсу RS232

Level of difficultyEasy
Reading time5 min
Reach and readers6.3K

Не большой пример для начинающих ПЛИСоводов, как подключить к ПЛИС (ALTERA Cyclon 4) клавиатуру с интерфейсом PS/2, а так же компьютер по интерфейсу RS232 (он же COM-порт).

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

Читать далее

Операторы «case» и «switch» это не сахар

Level of difficultyEasy
Reading time3 min
Reach and readers10K

На страницах Хабра не раз встречались статьи, которые прямо (или косвенно) озвучивали утверждение, что операторы языков программирования "case" и "switch" являются "синтаксическим сахаром" т.е. являются более удобной и наглядной записью последовательности операторов "if". В комментариях, с моей стороны, отмечалось недоумение, по поводу таких заявлений. Для справки приведу общий вид оператора "case" из языка программирования Турбо Паскаль.

case <ключ выбора> of

значение_1: операторы; ... значение_N: операторы;

else операторы;

end;

Когда я учился в университете основам Турбо Паскаля, наш преподаватель сознательно делал акцент на том, что данная синтаксическая конструкция, после вычисления ключа выбора, переходит на соответствующие вычисленному ключу операторы. То есть, без перебора всех ключей, сразу. В этом особенность данного оператора и его принципиальное отличие от последовательности операторов "if" (функционально эквивалентных). Так меня учили.

Авторы статей, считающие иначе, проявили завидное упорство (в комментариях), отстаиваю свою позицию, что привело к желанию разобраться в этом вопросе. (Однажды был даже такой удивительный случай, когда, вероятно начинающий программист, написал статью приблизительно следующего содержания: «А что если ключей выбора очень много? Перебор всех вариантов это долго. А что если попытаться оптимизировать такой нерациональный оператор как „case“, „switch“.» И далее рецепты по оптимизации. После справедливых замечаний в комментариях автор статью удалил. Ну что же, с кем не бывает.)

Читать далее

Information

Rating
211-th
Registered
Activity