Worldmaster 0 6 июля, 2023 Опубликовано 6 июля, 2023 · Жалоба В общем собрал все в кучу, Все IP Core загрузились, все синтезируется без ошибок. Сделал тестбенч. Но все равно не понятно как в тестбенче эмулировать входные данные на порт INOUT. Вот что получилось: Это схема из даташита. TXE согласно даташиту можно игнорировать. что я и делаю. Вот что я получаю в симмуляторе: Вот увеличенный сегмент где происходит. Логика моей прграммы такая: 1. В течении n циклов задержка перед отправкой. Сейчас 10 циклов но потом планирую каждую секунду. 2. Затем идет заполнение массива на отправку. 3. Установка параметров отправки и запуск модуля. 4. Ждем пока все закончится и будет выставлен флаг готовности. 5. Переходим на пункт 1. Взял код из примера по взаимодействию. FT_STATUS ftStatus = dxDevice.OpenByIndex(0); if (ftStatus != FT_STATUS.FT_OK) { MessageBox.Show("Device not found"); } uint bytesWritten = 0; uint bytesRead = 0; dxDevice.SetPipeTimeout(0x82, 3000); dxDevice.SetPipeTimeout(0x02, 3000); ftStatus = dxDevice.SetStreamPipe(0x02, loopBytes); writeBytes[0] = 0xae; writeBytes[1] = 0x1; ftStatus = dxDevice.WritePipe(0x02, writeBytes, (uint)writeBytes.Length, ref bytesWritten); if (ftStatus == FTDI.FT_STATUS.FT_TIMEOUT) { //dxDevice.AbortPipe(0x02); //Debug.Log("\tReadPipe timedout bytesTransferred={0}!", bytesTransferred); } ftStatus = dxDevice.ReadPipe(0x82, readBytes, (uint)readBytes.Length, ref bytesRead); if (ftStatus == FTDI.FT_STATUS.FT_TIMEOUT) { dxDevice.AbortPipe(0x82); //Debug.Log("\tReadPipe timedout bytesTransferred={0}!", bytesTransferred); } ftStatus = dxDevice.ClearStreamPipe(0x02); Но почему то ничего не происходит. Пробовал также изменить чтобы было чтение из шины. И отправлял команду чтобы светодиод включать, но также ничего не проходит. Вот прикладываю сам проект SimpleTest.7z. В проекте есть тестбенч simulate.vhd и проект для ModelSim. Опять прошу помощи если у кого есть желание. Спасибо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 9 июля, 2023 Опубликовано 9 июля, 2023 · Жалоба On 7/6/2023 at 4:08 PM, Worldmaster said: В общем собрал все в кучу, Все IP Core загрузились, все синтезируется без ошибок. Сделал тестбенч. Но все равно не понятно как в тестбенче эмулировать входные данные на порт INOUT. Я для себя делал так. В тестбенче чтение состояния шины и сопутствующих сигналов из файла. В определенном формате. С выдачей одной строки файла в один такт клока. В случае чего и запись в файл в том же определенном формате. Позволяет не тормозить и не бороться с синтаксисом VHDL-Verilog а решать свою задачу. Массивы? каждую секунду? Такое возможно либо если у вас скорость обновления данных в них низкая, либо если вы не понимаете что делаете. В современном мире принято работать по ивентам - по событийному характеру а не по вот этим "раз в секунду" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 9 июля, 2023 Опубликовано 9 июля, 2023 · Жалоба В 09.07.2023 в 09:59, krux сказал: по событийному характеру а не по вот этим "раз в секунду" Хорошо. У меня есть счетчик который с каждым ивентом по нисходящему фронту сигнала тактирования увеличивает свое значение на 1. Ивент нисходящего фронта происходит с частотой в 50 мегагерц. При достижении счетчиком числа в 50 000 000 происходит ивент и включается заполнение буфера данных и автомат переходит в состояние передачи данных. Это понятное объяснение события "раз в секунду" ?? В 09.07.2023 в 09:59, krux сказал: В тестбенче чтение состояния шины и сопутствующих сигналов из файла. Спасибо. Попробую так. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 17 июля, 2023 Опубликовано 17 июля, 2023 (изменено) · Жалоба В общем вроде бы заработало, но какие то непонятки. Подскажите пожалуйста еще один момент. На диаграмме передачи мастер должен устанавливать данные на восходящем фронте или на нисходящем?? Потому что сейчас при отправке я записываю на нисходящем фронте данные: DATA_1 <= x"e0" ; DATA_2 <= x"e1" ; DATA_3 <= x"e2" ; DATA_4 <= x"e3" ; BE <= "1111"; -- count of valid bytes for 4 blocks Но при чтении с компа я получаю данные: [0] 0xff byte [1] 0xfe byte [2] 0xff byte [3] 0xff byte Но это вроде как данные с командной фазы где определяет что прилете запрос на чтение. И лишь изредка попадают данные которые должны быть но с индекса 4: [4] 0xe0 byte [5] 0xe1 byte [6] 0xe2 byte [7] 0xe3 byte Это с фронтами напутано или в чем?? но если я меняю обработку на восходящий фронт то вообще все перестает работать. Изменено 17 июля, 2023 пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 18 июля, 2023 Опубликовано 18 июля, 2023 · Жалоба Вот сделал наконец тестбенч нормально. На рисунке сверху мой результат в ModelSim снизу из даташита. Попытался стянуть рисунки чтобы было понятно. Ну все равно очевидно что все совпадает идеально. Я просто отправляю 8 байт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться