Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet

10 мар 2023 Пт Подключил почти все

Осталось сделать sdram и было бы хорошо, если не было бы так страшно. Мне кажется, что эта история с sdram — это такая же история, что с алгоритмами сортировки, которые я никак сделать не мог только потому, что мне было страшно их читать, а на деле оказалось, что я придумал проблему. Планирую я эту sdram сделать через icarus, с проверкой на реальной схеме тут же, причем можно сделать такой мини-процессор, чтобы точно быть уверенным в том, что работать будет. Я хочу использовать эту память в проекте, где у меня avr процессор.
Как приблизительно она будет работать.
  • При получении сигнала WE, останавливать процессор и выполнять запись в память
  • При получении RD=1 немного сложнее будет, надо чтобы он сразу же останавливал процессор
Почему с RD сложнее, так это потому, что читается память на обратном фронте, вот в чем соль. Тут надо переделать в процессоре выставление RD перед тем, как читать из памяти, а не на обратном фронте. Надо думать еще тут.
При чтении и записи в память, я буду использовать порты, как наиболее удобный метод. То есть, выставлять адрес в порт, и потом последовательно считывать оттуда или писать. Этот способ наиболее быстрый, на самом деле, хотя можно еще и маппить на память, но я так делать не хочу, лучше делать обмен с внешними девайсами через порты делать и я буду думать, как сделать это намного лучше.
Полагаю, у меня будет несколько ревизии памяти. Видимо, первую ревизию стоит сделать как можно проще. Подумал, что можно сделать так.
  • Выставляется адрес через порты
  • Если записываем, то пишется байт в порт
  • Делается запись команды - RD/WR в какой-то из портов
  • Ожидается результат через статус BSY
  • Читается байт данных из порта (если читаем)
Это похоже на тот же самый механизм SPI SD, что я делал. Это первая ревизия контроллера памяти, где я управляю памятью как если бы это было внешнее устройство.
Обычно память маппят на общее адресное пространство, что правильно так делать, но не в этом случае. Мне просто нужен доступ в память любым методом, и это — один из них. Так что буду его делать.
clk.PNG
Дело в том, что память работает на частоте 100 мгц, так что я буду фиксировать статус BSY только на негативном фронте CLK100 во время CLK25=0 (третий такт от начала). Это позволит избежать многих проблем.
Теги: Дневник