jenya7 0 23 июня, 2019 Опубликовано 23 июня, 2019 (изменено) · Жалоба Есть кор с 16-битной РАМ. Я пишу туда данные последовательно. Данные передаю сериально по 8 бит. Пакет такой CONT_WRITE ADR_MSB ADR_LSB DATA0_MSB DATA0_LSB …. DATAn_MSB DATAn_LSB CONT_WRITE – команда последовательной записи в РАМ. ADR_MSB ADR_LSB - начальный адрес. (sspi_cont_addr <= ADR_MSB & ADR_LSB) DATA0_MSB DATA0_LSB – данные из которых я составляю слово и выставляю на шину данных. Ну и сам код ---------------------------CONTINIOUS WRITE------------------------------------- when ST_CONT_WRITE_1 => --first address and data SITAL_1553_1_ADR <= sspi_cont_addr; SITAL_1553_1_CS <= '1'; SITAL_1553_1_WR <= '1'; SITAL_1553_1_RD <= '0'; st_count := 0; byte_idx := 0; --skip command and address if (bytes_counter = X"03") then SitalState <= ST_CONT_WRITE_2; end if; when ST_CONT_WRITE_2 => if (cs2 = '0') then if (new_byte = '1') then --next data if (byte_idx = 2) then byte_idx := 0; --next address sspi_cont_addr <= sspi_cont_addr + '1'; end if; SitalState <= ST_CONT_WRITE_3; end if; else --end of message SitalState <= ST_SITAL_IDLE; end if; when ST_CONT_WRITE_3 => --set a word from bytes case byte_idx is when 0 => sspi_cont_data(15 downto 8) <= sspi_data; SitalState <= ST_CONT_WRITE_2; when 1 => sspi_cont_data(7 downto 0) <= sspi_data; reg_count := 0; --word is complete SITAL_1553_1_ADR <= sspi_cont_addr; SITAL_1553_1_DIN <= sspi_cont_data; SitalState <= ST_CONT_WRITE_4; when others => end case; byte_idx := byte_idx + 1; when ST_CONT_WRITE_4 => reg_count := reg_count + 1; --set address and data SITAL_1553_1_ADR <= sspi_cont_addr; SITAL_1553_1_DIN <= sspi_cont_data; --expose the data on the bus for x ckocks if (reg_count = 8) then SitalState <= ST_CONT_WRITE_2; end if; Данные прописываются, но иногда я вижу какое то слово прописалось не верно – скажем вместо 0х8000 я вижу 0х8100. Обычно какой нибудь бит в слове реверсируется. Я посылаю 30 байт (15 слов) обычно прыгают слова 2 и 14, иногда другие. Не могу понять в чем проблема. Сигнал тап не ловит проблему. Куда копать? Изменено 23 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dvlwork 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба Ну вы сразу описывайте: моделирование корректно работает? STA сходится, все констрейны описаны? Предупреждения при синтезе серьезные есть? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июня, 2019 Опубликовано 24 июня, 2019 (изменено) · Жалоба 1 hour ago, dvlwork said: Ну вы сразу описывайте: моделирование корректно работает? STA сходится, все констрейны описаны? Предупреждения при синтезе серьезные есть? предупреждений куча. какие из них серьезные не знаю. констрейны - только это #************************************************************** # Set Maximum Delay #************************************************************** set_max_delay -rise_from [get_clocks MAX10_CLK2_50] -rise_to [get_clocks SSPI_CLK] 20ns set_max_delay -rise_from [get_clocks SSPI_CLK] -rise_to [get_clocks MAX10_CLK2_50] 20ns в SDC файле. предупреждения в основоном двух типов 1. used implicit default value for signal *** because signal was never assigned a value or an explicit default value. 2. object *** assigned a value but never read не думаю что они серьезные. Изменено 24 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба я добавил для отладки when ST_CONT_WRITE_4 => reg_count := reg_count + 1; --set address and data SITAL_1553_1_ADR <= sspi_cont_addr; SITAL_1553_1_DIN <= sspi_cont_data; --added for test if (sspi_cont_addr = test_addr) then test_data <= sspi_cont_data; end if; --expose the data on the bus for x ckocks if (reg_count = 8) then SitalState <= ST_CONT_WRITE_2; end if; и я вижу test_data никогда не прыгает. то есть перед записью слово всегда стабильно. тогда по окончании записи я иду и считываю слово. when ST_CONT_WRITE_2 => if (cs2 = '0') then ------------------- else --end of message --SitalState <= ST_SITAL_IDLE; SitalState <= ST_TEST_WRITE_1; end if; when ST_TEST_WRITE_1 => --read from the address SITAL_1553_1_CS <= '1'; SITAL_1553_1_WR <= '0'; SITAL_1553_1_RD <= '1'; SITAL_1553_1_ADR <= test_addr; -- + X"000D"; test_data1 <= SITAL_1553_1_DOUT; st_count := 0; SitalState <= ST_TEST_WRITE_2; when ST_TEST_WRITE_2 => st_count := st_count + 1; test_data1 <= SITAL_1553_1_DOUT; if (st_count = 8) then SitalState <= ST_SITAL_IDLE; end if; и я вижу что test_data1 прыгает. то есть проблема во время записи в РАМ. слово прописывается плохо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 24 июня, 2019 Опубликовано 24 июня, 2019 (изменено) · Жалоба 23 hours ago, jenya7 said: скажем вместо 0х8000 я вижу 0х8100. Обычно какой нибудь бит в слове реверсируется. у меня так при записи в pcie бывает, когда какой то констрейн не опишу или slack в отчетах фигурирует. Постоянно 1 бит портится. Уже приучил себя, что если вдруг проблема видится железячной и нет слаков в Time Analyzer, полюбому что то в sdc не занес 51 minutes ago, jenya7 said: констрейны - только это клоки тоже важно описать. 52 minutes ago, jenya7 said: предупреждения в основоном двух типов в Time Analyzer красным не горит Unconstrained Path? если речь про квартус Изменено 24 июня, 2019 пользователем new123 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба 1 hour ago, new123 said: у меня так при записи в pcie бывает, когда какой то констрейн не опишу или slack в отчетах фигурирует. Постоянно 1 бит портится. Уже приучил себя, что если вдруг проблема видится железячной и нет слаков в Time Analyzer, полюбому что то в sdc не занес клоки тоже важно описать. в Time Analyzer красным не горит Unconstrained Path? если речь про квартус есть красные предупреждения в Unconstrained Path но это на сигналы которыми я даже не пользуюсь. в sdc прописал #************************************************************** # Create Clock #************************************************************** create_clock -period "50.0 MHz" [get_ports MAX10_CLK2_50] create_clock -period "10.0 MHz" [get_ports SSPI_CLK] create_clock -period "100.0 MHz" [get_ports s_clk_100mhz] #************************************************************** # Set Maximum Delay #************************************************************** set_max_delay -rise_from [get_clocks MAX10_CLK2_50] -rise_to [get_clocks SSPI_CLK] 20ns set_max_delay -rise_from [get_clocks SSPI_CLK] -rise_to [get_clocks MAX10_CLK2_50] 20ns set_max_delay -rise_from [get_clocks s_clk_100mhz] -rise_to [get_clocks s_clk_100mhz] 20ns Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба 55 minutes ago, jenya7 said: сть красные предупреждения в Unconstrained Path но это на сигналы которыми я даже не пользуюсь. как минимум, там должны были быть Unconstrained Clock, потому что вы их не описали в sdc. Хотя могу ошибаться. А неописанные клоки это очень важно. Fitter тогда раскладывает на свое усмотрение и потом оно, если повезет, заработает, но чаще будут сбои. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба Какая длина провода соединяющая две платы? или Вы работаете в пределах одной ПЛИС? под сериально это UART или SPI ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июня, 2019 Опубликовано 24 июня, 2019 (изменено) · Жалоба 1 hour ago, Maverick_ said: Какая длина провода соединяющая две платы? или Вы работаете в пределах одной ПЛИС? под сериально это UART или SPI ? SPI. Растояние между контролером и ФПГА несколько сантиметров. Это две платы соединенные конектором. Но я установил что проблема именно в записи в РАМ. Выше я представил свои отладочные действия. Изменено 24 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба 24 minutes ago, jenya7 said: SPI. Растояние между контролером и ФПГА несколько сантиметров. Это две платы соединенные конектором. Но я установил что проблема именно в записи в РАМ. Выше я представил свои отладочные действия. А можно не писать на этом форуме слова ФПГА и РАМ? Я вообще не понимаю о чём речь идёт и куда модератор смотрит... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июня, 2019 Опубликовано 24 июня, 2019 (изменено) · Жалоба 1 hour ago, _4afc_ said: А можно не писать на этом форуме слова ФПГА и РАМ? Я вообще не понимаю о чём речь идёт и куда модератор смотрит... ФПГА = FPGA РАМ = RAM вас легко сбить с толку. в этой области надо быть тертым перцем. Изменено 24 июня, 2019 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_4afc_ 25 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба 3 minutes ago, jenya7 said: РАМ = RAM Дело в том, что я постоянно лезу в ваш топик думая, что у вас проблемы с Pulse-amplitude modulation, вы как-то по-аккуратнее с жаргонизмами... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба 1 hour ago, _4afc_ said: Дело в том, что я постоянно лезу в ваш топик думая, что у вас проблемы с Pulse-amplitude modulation, вы как-то по-аккуратнее с жаргонизмами... ну тут тертые мущины. они меня понимают. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
new123 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба кстати, а что за память? не внешняя случаем? тогда на нее все тайминги в sdc загонять надо. или та которая на чипе Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 июня, 2019 Опубликовано 24 июня, 2019 · Жалоба 1 hour ago, new123 said: кстати, а что за память? не внешняя случаем? тогда на нее все тайминги в sdc загонять надо. или та которая на чипе это кор. в нем 16-битная память. мне наружу выходит шина адреса, шина данных, и управляющие линии. мой управляющий модуль обращается к модулю кора в котором память. в принципе я с кором работаю только через запись чтение в память. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться