![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
![[community profile]](https://www.dreamwidth.org/img/silk/identity/community.png)
Предлагаю вниманию таблицу адресов для отображения в MMU.
Версия предварительная и будет немного изменяться по ходу реализации внешних устройств.
Битность регистров для UART, SPI, i2c не окончательная, там надо еще подумать.
Буду делать в первую очередь RTL-модель для PIC и GPIO без привязки к определенному железу.
Версия предварительная и будет немного изменяться по ходу реализации внешних устройств.
Битность регистров для UART, SPI, i2c не окончательная, там надо еще подумать.
Буду делать в первую очередь RTL-модель для PIC и GPIO без привязки к определенному железу.
| Address | Unit | Register | R/W | Width | Description | |---------+-------+-----------+-----+-------+---------------------------------------------------| | 77777 | PIC | IFS (РАП) | RW | 48 | Флажки прерываний ожидающих обработку | | 77776 | | IFSSET | W | 48 | Установка по маске | | 77775 | | IFSCLR | W | 48 | Сброс по маске | | 77774 | | IEC(РМРП) | RW | 48 | Маска разрешенных прерываний | | 77773 | | IECSET | W | 48 | Установка по маске | | 77772 | | IECCLR | W | 48 | Сброс по маске | | 77771 | | reserved | | | | | 77770 | | OFF(РНП) | R | 6 | Номер старшего бита в IFS | |---------+-------+-----------+-----+-------+---------------------------------------------------| | 77767 | Timer | T0CON | RW | 48 | Управление режимом и делителем | | 77766 | | T0TMR | RW | 48 | Текущее значение таймера | | 77765 | | Т0PRD | RW | 48 | Период | | 77764 | | T0IE | RW | 1 | Разрешение прерываний | | 77763 | | | | | | | 77762 | | | | | | | 77761 | | | | | | | 77760 | | | | | | |---------+-------+-----------+-----+-------+---------------------------------------------------| | 77757 | GPIO | TRIS | RW | 48 | Направление данных | | 77756 | | PORT | RW | 48 | Запись - выдача, чтение - прием | | 77755 | | CNIE | RW | 1 | Разрешение прерывания по изменению входных данных | | 77754 | | CNEN | RW | 48 | Маска отслеживаемых пинов | | 77753 | | reserved | | | | | 77752 | | reserved | | | | | 77751 | | reserved | | | | | 77750 | | reserved | | | | |---------+-------+-----------+-----+-------+---------------------------------------------------| | 77747 | FLASH | CSR | RO | 32 | Статус регистр флеш-памяти | | 77746 | | CCR | RW | 32 | Управляющий регистр флеш-памяти | | 77745 | | AL | RW | 32 | Защелка адреса читаемой/записываемой ячейки | | 77744 | | DATA | RW | 32 | Содержимое ячейки по адресу AL | |---------+-------+-----------+-----+-------+---------------------------------------------------| | 77000 | DRAM | | RW | 48 | On CHIP Data RAM | | 0 | | | | | | |---------+-------+-----------+-----+-------+---------------------------------------------------|
no subject
Date: 2019-04-18 04:42 pm (UTC)Заглушки на GPIO, PIC пока не тестировал.
Общие тесты проходят, кроме двух STI и большой ALU. Предполагаю, что тест использует верхнюю область памяти куда отображаются регистры внешних устройств.
Может быть одним глазком гляните, а я пока спать :)
no subject
Date: 2019-04-18 05:15 pm (UTC)no subject
Date: 2019-04-18 06:12 pm (UTC)no subject
Date: 2019-04-18 08:55 pm (UTC)no subject
Date: 2019-04-18 09:42 pm (UTC)Сложно ли её подвинуть на 74000?
no subject
Date: 2019-04-19 05:54 pm (UTC)no subject
Date: 2019-04-19 06:59 pm (UTC)Аналогично прогнал kalah.b6, обнаружил несколько обращений в верхнюю страницу:
01754: vjm 77451(14)
02577: vjm 77400(14)
07715: vjm 76312(16)
11105: vjm 76312(16)
12455: uj 76022
12500: uj 76021
74311: vjm 76005(16)
75707: vjm 76415(11)
У нас только половина страницы зарезервирована: 77000-77777. Два вызова идут по адресам 77400 и 77451.
Да ладно, придумаем что-нибудь. Рантайм всё равно придётся подменить. Да и нет особой необходимости запускать ни калах, ни мониторку.
no subject
Date: 2019-04-20 03:02 pm (UTC)Ввод задач через UART :) будто с перфоленты.
no subject
Date: 2019-04-18 07:26 pm (UTC)Предлагаю добавить специальный флажок в тестбенч, который бы отключал секцию периферийных регистров в MMU, специально для теста АУ.
Я поправил тест STI, чтобы он не попадал на адреса периферийных регистров. Наверное и тест АУ тоже можно исправить. Я гляну позже.
no subject
Date: 2019-04-19 03:30 am (UTC)Можно попробовать +disable_mmu наверное и условную компиляцию.
no subject
Date: 2019-04-19 05:37 am (UTC)no subject
Date: 2019-04-18 06:19 pm (UTC)Я где-то так себе и представлял.
Несколько замечаний поверхностным взглядом:
(1) Разместить устройства чуть менее плотно по адресам. В будущем захочется добавить ещё регистров, к примеру модемные сигналы для UART.
(2) Для каждого регистра лучше делать отдельный always-блок с присваиваниями. Иначе потом будут сложности при синтезе, да и код упрощается.
(3) Не все регистры стоит сбрасывать по reset, для экономии по току. Скажем IFS может очищиться софтом.
(4) Названия регистров может быть чуть изменить, чтобы не обвиняли в микрочипо-центричности. :) Я подумаю.
no subject
Date: 2019-04-19 04:07 am (UTC)2) Хорошо. Единственное что вызывает вопрос: при записи в регистр IFS и если пришло прерывание я его накладываю. Это нормально? Или лучше его терять при такой ситуации?
3) Можно. Но если там при включении будет мусор, а у нас микрокод после старта машины сразу разрешает внешние прерывания и может произойти сбой.
4) Хорошо.
no subject
Date: 2019-04-19 05:52 am (UTC)(2) Накладывать при записи это правильно. В принципе, на следующем такте оно и так наложится, но лучше при записи его не игнорировать, из принципа.
(3) Сбоя не будет, ведь IEC сбрасывается по reset и отключает реакцию на IFS.
no subject
Date: 2019-04-18 07:37 pm (UTC)no subject
Date: 2019-04-19 04:11 am (UTC)С тестами которые тестируют комбинационную логику проблем нет. А вот как выглядит тест который тестирует протоколы взаимодействия - вопрос. Если есть где посмотреть - сбросьте.
Я имею ввиду тест такой, который ждет события и подсовывает следующую порцию данных.
Вот например ставит в наблюдение ножку GPIO ждет например 10 тактов - прерывания нет, затем меняет полярность и ждет 10 тактов - прерывания нет - FAIL, прерывание пришло в течении 10 тактов, то тест переходит на следующий шаг.
Я вот с такими не сталкивался.
no subject
Date: 2019-04-19 06:17 am (UTC)https://github.com/adibis/Interrupt_Controller/blob/master/testbench/intrCntrl_tb.v
no subject
Date: 2019-04-20 02:56 pm (UTC)