Перейти к содержанию
    

slkhome

Свой
  • Постов

    94
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные slkhome


  1. On 8/2/2022 at 7:26 AM, Vadim_nsk said:

    но не вдаваться в тонкости работы шины.

    Вдаваться придется, рано или поздно.

    Вот пример как у нас реализовали, для быстрого тестирования

        -- Write to AXI4-lite
        procedure axiWrite(
            constant Addr_in      : in    std_logic_vector(C_ADDRESS_SIZE-1 downto 0);-- Address to write to
            constant Data_in      : in    std_logic_vector(C_DATA_SIZE-1 downto 0);-- Data to write
            signal   Axi          : inout AXI_TYPE;-- AXI signals connected to slave
            signal   Clk_in       : in    std_logic;-- Clock to synchronize operation with
            constant Show_info_in : in    boolean := false;-- Display information in log about operation
            constant Timeout_in   : in    natural := 5)-- Maximum operation cycles before timeout error
        is
            variable axi_awready_asserted  : boolean := false;
            variable axi_wready_asserted   : boolean := false;
            variable axi_bvalid_asserted   : boolean := false;
            variable axi_bready_deasserted : boolean := false;
            variable axi_write_successful  : boolean := false;
        begin
            -- Setting signals controlled by slave to 'Z' state (in case AXI_TYPE wasn't initialized)
            Axi.awready_out   <= 'Z';
            Axi.wready_out    <= 'Z';
            Axi.bvalid_out    <= 'Z';
            Axi.bresp_bus_out <= (others => 'Z');
    
            -- Initializing master signals before transmission
            Axi.awprot_bus_in <= (others => '0');
            Axi.awvalid_in    <= '0';
            Axi.wstrb_in      <= (others => '1');
            Axi.wvalid_in     <= '0';
            Axi.bready_in     <= '0';
    
            -- Synchronizing transmission start to rising edge
            wait until rising_edge(Clk_in);
    
            -- Setting up address for writing
            Axi.awaddr_bus_in <= Addr_in;
            Axi.awvalid_in    <= '1';
    
            -- Setting up data for writing
            Axi.wdata_bus_in <= Data_in;
            Axi.wvalid_in    <= '1';
    
            for i in 0 to Timeout_in-1 loop
                wait until rising_edge(Clk_in);
    
                -- Check if address ready from slave was received
                if (Axi.awready_out = '1') then
                    Axi.awvalid_in <= '0';
                    axi_awready_asserted := true;
                end if;
    
                -- Check if data ready from slave was received
                if (Axi.wready_out = '1') then
                    Axi.wvalid_in <= '0';
                    axi_wready_asserted := true;
                end if;
    
                -- Check if write response from slave was received
                if (Axi.bvalid_out = '1') then
                    Axi.bready_in <= '1';
                    axi_bvalid_asserted := true;
                end if;
    
                -- If master asserted response ready, deassert it
                if (Axi.bready_in = '1') then
                    Axi.bready_in <= '0';
                    axi_bready_deasserted := true;
                end if;
    
                -- If operation was successful, set success flag and exit loop
                if ((axi_awready_asserted  = true)  and
                    (axi_wready_asserted   = true)  and
                    (axi_bvalid_asserted   = true)  and
                    (axi_bready_deasserted = true)) then
                    axi_write_successful := true;
                    exit;
                end if;
            end loop;
    
            -- Display information if it was requested
            if ((Show_info_in = true) and (axi_write_successful = true)) then
                report "Successfully wrote " & integer'image(to_integer(signed(Data_in))) & " to address " & integer'image(to_integer(unsigned(Addr_in)));
            end if;
    
            -- Display error if write was unsuccessful
            if (axi_write_successful = false) then
                case Axi.bresp_bus_out is
                    when "00" =>
                        report "AXI write error, write response is 0b00 - OKAY" severity error;
                    when "01" =>
                        report "AXI write error, write response is 0b01 - EXOKAY" severity error;
                    when "10" =>
                        report "AXI write error, write response is 0b10 - SLVERR" severity error;
                    when "11" =>
                        report "AXI write error, write response is 0b10 - DCERR" severity error;
                    when others =>
                        report "AXI write error, unknown response code" severity error;
                end case;
            end if;
        end axiWrite;
    

     

  2. On 7/26/2022 at 4:01 PM, Koluchiy said:

    Хочу сделать так, как описал выше.

    В моем понимании, должно работать.

    Приведите весь текст констрейнтов. Так будет проще понимать чего вы хотите. А еще лучше и часть кода, где реализованы выходные буферы интерфейса.

  3. On 7/26/2022 at 4:58 PM, mixa7109 said:

    Нет, в режиме дебаггера не могу поставить на паузу, вылетает ошибка.

    Рекомендую разобраться с этим. Так как может прерывания..., может частота .... может сброс ....

    On 7/26/2022 at 4:58 PM, mixa7109 said:

    У меня сломанная версия, должно на все хватать....

    Если на других платах это ядро работает, то вопрос снимаю. А если там чего-то другое - нужно разбираться.

    У меня как-то тоже все было хорошо лицензировано - но вот IP нормально не прикручивался. Пришлось писать свое IP для Изернета. Spartan-6 был.

  4. Компетенции у меня в этом вопросе почти нет, но предлагаю рассмотреть вопросы ниже.

    Совпадают ли у Вас версии Vivado с примером?

    Предлагаю проверить конфигурацию BSP - все ли либы подключены с нужными версиями?

    Дебажится ли нормально MicroBlaze?

    В догонку - хватает ли лицензий для такой системы?

  5. On 7/25/2022 at 11:40 PM, Zversky said:

    А что вы всё на 10.5, попробовать ту же 2020.1 или уже 2021.1 (если чего поновее в закромах не появилось) не желаете?

    Без явных преимуществ перехода на что-то другое - пустая трата времени. Нужно код пилить )

    On 7/25/2022 at 11:40 PM, Zversky said:

    Как проводили замеры?

    Специально не проводил. Осталось впечатление. Вероятно смотрел время начала и окончания симуляции, разница, и в Линуксе и в Винде, одного проекта.

    On 7/25/2022 at 11:40 PM, Zversky said:

    Зачем же полностью переходить? Часть тут, часть тут. Либо две машины, либо два диска, либо, в конечном итого, виртуалка?

    А потом просто все перетаскиваешь на Линукс и забываешь про винду как про страшный сон )

    On 7/25/2022 at 11:40 PM, Zversky said:

    Я собираюсь на тоже железо, где стоит хостовая Win10 ставить хостовую же Ubuntu. Правда, Win10 стоит на SSD, Ubuntu же поставлю на HDD - это не сильно замедлит моделирование?.

    Без вариантов на SSD и Софт и проект. Все локальные рабочие копии на SSD.

     

  6. 1. Какая версия QuestaSim у вас?

    2. У меня была хостовя ОС Винда 10 и виртуальная CentOS 7. На CentOS работала даже быстрее чем под Windows, примерно на 30 %.

    3. Предлагаю обратить внимание на всяческий вывод собщений в терминал, лог,... Они могу оч. сильно затормаживать.

    4. Так же степень оптимизации, временная точность (1 fs or 2 ps).

    5. При переходе с 10.2 на 10.5 на Windows 10 ускорилось моделироваие, по ощущениям наза в 1,5.

    В общем конечно рекомендую переходить на Linux, если есть такая возможность. Там все более удобно будет, когда разберетесь с окружением.

    У меня пока ни как не получается перейти на  Linux, так как некоторые программы у меня требуют windows.

  7. Сразу скажу - сам так не делал. Так редко изменяются собственные IP, что заморачиваться с этим не довелось.

    А как вариант:

    Когда создаете свой IP через Tools/Create and Package new IP.... - там создается файлик *.tcl в каталоге xgui. Там вероятно можно прописать все Вам необходимые параметры. Так же это можно добавить через ГУИ Vivado при редактировании  ядра. Там можно через менюшки добавлять свои порты, группы портов, интерфейсы и вероятно и свои параметны, которые будут в дальнейшем использоваться в rtl. 

    ПС: в Телеге этот вопрос у Вас я понял по другому видимо. Может чейчас - это то что Вы хотели узнать.

  8. On 7/21/2022 at 6:01 PM, andrew_b said:

    Частоты прописаны? Тайминги сходятся?

    Да, все есть, все сходится. Так собственно только для клока констрейнт. Остальные сигналы статические.

    Тут уже накидали вариантов вот таких:

    - добавить корку прямо в проекте Vivado, а в SG выдавать только уже результат.

    - посмотреть какие-то  events через AXI. Не появляются ли подозрительные.

    - Покурить Change log на корку

    - добавить констрейнт на jitter входного этого клока, и с ним поиграть

    - Добавить PLL на эту частоту и уже с него задавать а не напрямую с пина

    - изучить различные комбинации подключения этих DDSов и их конфигураций.

    Может еще чего придумается?

     

  9. В чем может быть проблема с искажениями сигнала с выхода DDS? Как решить?

    Создал проект в 

    Matlab 2017b  + Xilinx System Generator (Vivado 2018.3)

    В этом поекте исользуется DDS compiler 6.0. Настройки по умолчанию + Taylor Series Corrected + Range 90 dB + Freq res 1000 Hz

    После добавления это проект из System generator-а в Vivado, компиляции проекта, и прошивки в железо - выяснилось что из 3х используемых DDS работает корректно только один.

    Он (DDDS) отличается от остальных тем, что у него в качестве памяти используется распределенная память, а у остальных блоковая. И тем не менее иногда и этот работающий DDS (другая компиляция) работатет не корректно.

    Некорректная работа заключается в том, что в генерируемом сигнале присутствуют искажения. Периодичность повторения искажений квазислучайная. При моделировании в MatLab искажения не проявляются, либо нужно очень долго моделировать - это не делал. 

    На некоторых выходных частотах DDS искажения не проявляются, либо настолько малы что не отображаются на Осциллографе или анализаторе спектра.

    @litv - Есть мысли?

  10. On 7/5/2022 at 4:53 PM, RRoman_ said:

    Если я буду писать в эту флэшку по JTAG я наверное сотру Image Recovery Tool?

    Великовероятно что именно так!

    On 7/5/2022 at 4:53 PM, RRoman_ said:

    Может и образ будет по неправильному адресу записан.

    Если через JTAG - то он запишет туда, куда вы укажите. Точно не помню - или при создании *.mcs, или уже при самой прошивке указыается откуда будет писаться.

     

    On 7/5/2022 at 4:53 PM, RRoman_ said:

    Т.е. видимо у SOM есть своя особая структура данных QSPI, которая характерна только для этих модулей?

    Вероятно нет. Структура в итоге будет такая, как Вы сами зададите.

     

    On 7/5/2022 at 4:53 PM, RRoman_ said:

    Или QSPI всегда два образа (А/В) содержит?

    Из коробки возможно. А так как вы зададите и будете прошивать. Если будете грузиться с SD - то qspi вообще может не использоваться.

  11. https://docs.xilinx.com/v/u/en-US/ug1089-kv260-starter-kit

    Стандартные способы JTAG или micorSD.

    Дальше можно развивать как у любого модуля с ПЛИС в зависимости от имеющихся других интерфейсов.

    И для всего этого и то что перечислили Вы нужна базовая плата, чтобы физически было возможно подключиться

    программатором или подключить microSD.

    Что вы хотите реализовать на этом железе в итоге (чтобы можно было ответить корректнее)? 

    Планируете использовать процессорные ядра или только пока логику? 

    Какая базовая базовая плата? Своя или из какого-нибудь кита?

  12. Вы можете это сделать из GUI, затем посмотреть в Tcl Console команду, которая была выполнена. 

    Так можно вообще любые действия "подсмотреть" и получить команду на это действие.

  13. Думаю проще и надежнее собрать какой-нибудь проектик, и уже в реальном проекте посмотреть можно ли на конкретные ноги сделать назначение как Вам нужно. Там же и посмотреть какое питание допустиком для этой ноги с этим режимом. Тем более заранее накиданный проект изабвит вас от возможных ошибок с питанием банков и возможностями конкреных выводов ПЛИС.

  14. On 6/7/2022 at 1:19 PM, jenya7 said:

    Тестбенч показывает вообще какую то дичь.

    Так нужно сначала тестбенч получить адекватный, а уж потом в железе. Если у Вас тест бенч не рабочий - так в железе еще менее вероятно будет рабоать )

     

  15. On 5/31/2022 at 3:32 PM, Longiel said:

    В Vivado, как известно, есть две "крайние" опции: tcl.pre в настройках синтеза и tcl.post в настройках битстрима.

    Еще можно в гуи добавить кнопочку с запуском своего скрипта, который сначала как раз будет править сырцы, а затем запускать уже все остальное. Таким образом Out-of-date должен появляться до начала синтеза ....

  16. 21 hours ago, IgorMov said:

    Кто нибудь может помочь с созданием *.coe файла для инициализации ROM в Vivado, Xilinx?
    Из hex, bin или из MatLab. В MatLAb есть функция "coewrite", но то чтор она прождает Vivaldo "не нравится".

    Сначала делал простым копипастом, пото перешел в Симулинк и все что нужно уже генерил из него со всеми инициализациями. Там уже можно и FDATool использовать, и через переменный WorkSpace инициализировать все что нужно и выгружать, или вообще через *.m скрипты. 

    Стандартные методы как-то не прижились.

  17. On 5/20/2022 at 6:01 PM, Maverick_ said:

     

    Разобрался. Оказывается у меня в фоне был еще один Моделсим запущен. Поэтому даже если я правил файл, не подхватывались изменения.

    Когда все закрыл и запустил все заново - все заработало и подхватилось.

    Спасибо! 

  18. 1 hour ago, yes said:

    у меня пока нет понимания, что можно сделать, чтобы такое заработало.

    писать какие-то коды для линукс-хоста (типа эмуляция эзернет через PCIe) хотелось бы как можно меньше

    ИМХО. На сколько я понимаю NFS работает через TCP/IP или UDP. Так что стек это нужно поддерживать, хотябы UDP. А вот нижние уровни Эзернета можно не реализовывать.

    Было бы хорошо найти хотябы описания примеров.

    Если нет задела и опыта, то работа будет интересной )

×
×
  • Создать...