jenya7 0 21 ноября, 2018 Опубликовано 21 ноября, 2018 (изменено) · Жалоба У меня РАМ 16 бит адрес и 16 бит дата. А дату я получаю побайтно. Поэтому мне нужно на каждые 2 байта собрать 16-бит даты и прописать в текущий адрес и подготовить следующий адрес. when ST_CONT_WRITE_2 => if (reg_load = '1') then byte_idx := byte_idx + 1; case byte_idx is when 1 => sspi_cont_data(15 downto 8) <= sspi_data; when 2 => sspi_cont_data(7 downto 0) <= sspi_data; byte_idx := 0; SITAL_1553_1_ADR <= sspi_cont_addr; --RAM address bus SITAL_1553_1_DIN <= sspi_cont_data; --RAM data bus spi_cont_addr <= sspi_cont_addr + '1'; --next address when others => end case; end if; Но я вижу удвоение адреса (spi_cont_addr) 0 2 4 .... вместо увеличения на 1. Что я упускаю? По моему я понял. reg_load должен длиться один такт. Изменено 21 ноября, 2018 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 21 ноября, 2018 Опубликовано 21 ноября, 2018 · Жалоба 2 часа назад, jenya7 сказал: У меня РАМ 16 бит адрес и 16 бит дата. А дату я получаю побайтно. Поэтому мне нужно на каждые 2 байта собрать 16-бит даты и прописать в текущий адрес и подготовить следующий адрес. when ST_CONT_WRITE_2 => if (reg_load = '1') then byte_idx := byte_idx + 1; case byte_idx is when 1 => sspi_cont_data(15 downto 8) <= sspi_data; when 2 => sspi_cont_data(7 downto 0) <= sspi_data; byte_idx := 0; SITAL_1553_1_ADR <= sspi_cont_addr; --RAM address bus SITAL_1553_1_DIN <= sspi_cont_data; --RAM data bus spi_cont_addr <= sspi_cont_addr + '1'; --next address when others => end case; end if; Но я вижу удвоение адреса (spi_cont_addr) 0 2 4 .... вместо увеличения на 1. Что я упускаю? По моему я понял. reg_load должен длиться один такт. Не правильно поняли. Значение на которое каждый такт инкрементируется счетчик не зависит от длительности сигнала разрешения. Сигнал разрешения лишь говорит о том сколько времени (тактов) считать счетчику. Попробуйте счетчик описывать отдельным компонентом. А автомат управляет счетчиком только формируя сигнал разрешения. Сразу найдете где проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 22 ноября, 2018 Опубликовано 22 ноября, 2018 · Жалоба используете корку памяти с байтовым адресом и смотрите порты памяти в симуляторе? тогда там и будет +2) адрес байтовый используется для записи полуслова. ЗЫ. код грязный. не понимаете зачем нужны переменные, не используйте. совет на будущее) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ZwergNase 0 22 ноября, 2018 Опубликовано 22 ноября, 2018 · Жалоба А я вот вижу: spi_cont_addr <= sspi_cont_addr + '1'; --next address а видимо должно быть: Sspi_cont_addr <= sspi_cont_addr + '1'; --next address Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 22 ноября, 2018 Опубликовано 22 ноября, 2018 · Жалоба 20 minutes ago, Zwerg_nase said: А я вот вижу: spi_cont_addr <= sspi_cont_addr + '1'; --next address а видимо должно быть: Sspi_cont_addr <= sspi_cont_addr + '1'; --next address ошибка copy-paste. в реальности конечно sspi_cont_addr. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться