Блог страдающего Лиса
Lorem ipsum hello dolor sit world amet
10 мар 2023 Пт
Подключил почти все
Осталось сделать sdram и было бы хорошо, если не было бы так страшно. Мне кажется, что эта история с sdram — это такая же история, что с алгоритмами сортировки, которые я никак сделать не мог только потому, что мне было страшно их читать, а на деле оказалось, что я придумал проблему. Планирую я эту sdram сделать через icarus, с проверкой на реальной схеме тут же, причем можно сделать такой мини-процессор, чтобы точно быть уверенным в том, что работать будет. Я хочу использовать эту память в проекте, где у меня avr процессор.
Как приблизительно она будет работать.
При чтении и записи в память, я буду использовать порты, как наиболее удобный метод. То есть, выставлять адрес в порт, и потом последовательно считывать оттуда или писать. Этот способ наиболее быстрый, на самом деле, хотя можно еще и маппить на память, но я так делать не хочу, лучше делать обмен с внешними девайсами через порты делать и я буду думать, как сделать это намного лучше.
Полагаю, у меня будет несколько ревизии памяти. Видимо, первую ревизию стоит сделать как можно проще. Подумал, что можно сделать так.
Обычно память маппят на общее адресное пространство, что правильно так делать, но не в этом случае. Мне просто нужен доступ в память любым методом, и это — один из них. Так что буду его делать.
Дело в том, что память работает на частоте 100 мгц, так что я буду фиксировать статус BSY только на негативном фронте CLK100 во время CLK25=0 (третий такт от начала). Это позволит избежать многих проблем.
Как приблизительно она будет работать.
- При получении сигнала WE, останавливать процессор и выполнять запись в память
- При получении RD=1 немного сложнее будет, надо чтобы он сразу же останавливал процессор
При чтении и записи в память, я буду использовать порты, как наиболее удобный метод. То есть, выставлять адрес в порт, и потом последовательно считывать оттуда или писать. Этот способ наиболее быстрый, на самом деле, хотя можно еще и маппить на память, но я так делать не хочу, лучше делать обмен с внешними девайсами через порты делать и я буду думать, как сделать это намного лучше.
Полагаю, у меня будет несколько ревизии памяти. Видимо, первую ревизию стоит сделать как можно проще. Подумал, что можно сделать так.
- Выставляется адрес через порты
- Если записываем, то пишется байт в порт
- Делается запись команды - RD/WR в какой-то из портов
- Ожидается результат через статус BSY
- Читается байт данных из порта (если читаем)
Обычно память маппят на общее адресное пространство, что правильно так делать, но не в этом случае. Мне просто нужен доступ в память любым методом, и это — один из них. Так что буду его делать.
Дело в том, что память работает на частоте 100 мгц, так что я буду фиксировать статус BSY только на негативном фронте CLK100 во время CLK25=0 (третий такт от начала). Это позволит избежать многих проблем.