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

alxkon

Участник
  • Постов

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

  • Посещение

Весь контент alxkon


  1. Спасибо огромное! Это ведь действительно очевидно, туплю... С RTL и TB на Verilog и SV не работал до сих пор особо, так, подправить и разобраться как работает. Зато теперь открыл для себя +include+
  2. Приветствую всех! С SystemVerilog пока особого опыта нет, изучаю понемногу. Тестбенч, все сгенерировано с помощью Clarity ( Lattice Diamond 3.12 ) В топ модуле тестбенча pix2byte_tb.v определенны различные параметры, например num_frames `timescale 1 ps / 1fs `include "dut_defines.v" `include "tb_params.v" `include "vid_timing_gen_driver.v" `include "byte_out_monitor.v" module top(); `include "dut_params.v" parameter num_frames = `NUM_FRAMES; parameter hfront_porch = `HFRONT; parameter hsync_pulse = `HPULSE; parameter hback_porch = `HBACK; parameter vfront_porch = `VFRONT; parameter vsync_pulse = `VPULSE; parameter vback_porch = `VBACK; //`ifndef MISC_ON // parameter init_drive_delay = `INIT_DRIVE_DELAY; //`endif parameter output_width_in_bytes = (DATA_WIDTH*NUM_TX_LANE*TX_GEAR)/128; parameter input_width_in_bits = PIX_WIDTH*NUM_PIX_LANE; parameter input_width_in_bytes = input_width_in_bits[0] ? input_width_in_bits : input_width_in_bits[1] ? input_width_in_bits/2 : input_width_in_bits[2] ? input_width_in_bits/4 : input_width_in_bits/8; parameter multiple_bytes = input_width_in_bytes*output_width_in_bytes; parameter least_common_multiple_bytes = multiple_bytes[0] ? multiple_bytes*4 : multiple_bytes[1] ? multiple_bytes*2 : multiple_bytes; parameter number_of_bytes = (1 + `NUM_BYTES/least_common_multiple_bytes)*least_common_multiple_bytes; parameter total_pix = number_of_bytes*8/PIX_WIDTH; parameter act_pix = total_pix/NUM_PIX_LANE; parameter total_line = `NUM_LINES; parameter pixclk_period = `SIP_PCLK/2; parameter byteclk_period = (pixclk_period*DATA_WIDTH*NUM_TX_LANE*TX_GEAR)/(PIX_WIDTH*NUM_PIX_LANE*16); localparam exp_byte_count = `NUM_FRAMES * `NUM_LINES * number_of_bytes; reg reset_n; reg pix_clk_i = 0; reg byte_clk_i = 0; reg mon_en = 0; reg start_vid = 0; reg byte_log_en = 0; wire rst_n_i = reset_n; wire byte_clk = byte_clk_i; integer line_cnt = 0; integer frame_cnt = 0; integer pixel_cnt = 0; integer testfail_cnt = 0; integer txfr_delay = 100000/byteclk_period; integer wc_delay = number_of_bytes/(GEAR_16+1)*NUM_TX_LANE; reg dvalid_i; wire de_i; wire hsync_i, vsync_i; wire fv_i, lv_i; wire eof; wire [PIX_WIDTH-1:0] pix_data9_i; ..... потом в тексте есть include ............... `ifdef TX_DSI `include "test_snow_pixel2byte_dsi_reset.v" `include "test_snow_pixel2byte_dsi_trans.v" `else `include "test_snow_pixel2byte_csi2_trans.v" `include "test_snow_pixel2byte_csi2_reset.v" `endif ............... .... и вызов ........... @(posedge pix_clk_i); byte_log_en = 1; start_vid = 1; $display(" test_hsync_front_porch : %d \n", hfront_porch); $display(" test_hsync_width : %d \n", hsync_pulse); $display(" test_hsync_back_porch : %d \n", hback_porch); $display(" test_h_width : %d \n", act_pix); $display(" test_v_height : %d \n", total_line); $display(" test_vsync_front_porch : %d \n", vfront_porch); $display(" test_vsync_width : %d \n", vsync_pulse); $display(" test_vsync_back_porch : %d \n", vback_porch); mon_en = 1; test_snow_pixel2byte_csi2_trans; `ifdef DSI_RESET_TEST1 byte_log_en = 0; start_vid = 1; mon_en = 1; test_snow_pixel2byte_dsi_reset; `endif ................. В test_snow_pixel2byte_csi2_trans.v определен такой task // ========================================================================= // Filename: test_snow_pixel2byte_csi2_trans.v // Copyright(c) 2017 Lattice Semiconductor Corporation. All rights reserved. // ========================================================================= //`ifdef CSI2_TEST1 task test_snow_pixel2byte_csi2_trans; begin fork `ifdef MISC_ON if (data_type !== 6'bzz_zzz) // 20191217 while((frame_cnt !== num_frames)) begin ......................... Насколько я понимаю перед begin должны быть перечислены input и output для даного task, но их нет. Все нужные файлы включены в .do файл, использую vlog -sv -work lib filename.v чтобы добавить исходник к тестбенчу ModelSim ругается, не видит frame_cnt # ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(83): (vlog-2730) Undefined variable: 'frame_cnt'. # ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(83): (vlog-2730) Undefined variable: 'num_frames'. ###### ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(84): @(posedge eof); # ** Error: ../ipcore/pix2byte/pixel2byte_eval/testbench/test_snow_pixel2byte_csi2_trans.v(84): (vlog-2730) Undefined variable: 'eof'. Наверное есть какой-то нюанс, который мне не очевиден, я все же думаю автор этого теста проверял что генерирует wizard и запускал свой тест. Оригинального DO файла нет, он не сгенирирован wizard-ом. Подскажите пожалуйста, какая была задумка у автора этого дизайна, как task должен видеть переменные из главного модуля?
  3. В новый проект эта серия Артиксов встает как влитая, если еще и цены приемлимые будут то вообще сказка - тут и трансиверов достаточно и логики. Давно ждали такого. Видно Lattice начал поджимать своими xxxx NX.
  4. Спасибо за ссылку. Как Вы думаете использовать такой анализатор?
  5. Вы правы, серьезные вещи нужно тестировать сертифицироваными приборами. Но предварительный частичный входной контроль работоспособности плат (целостность проводников, наличие всех напряжений питания и другие несложные функции) вполне посильная задача, особой точности не нужно, такой прибор можно размножить и распараллелить проверку.
  6. Не скажу о финансовой состоятельности осцилографостроения, но для меня идеи уважаемого Leka надолкнули на мысли о создании примитивного тестера плат на основе дешевых FPGA devkit : логические каналы тестируем с помощью '1', '0', измеряем наличие присутствия всех нужных напряжений с помощью дельтасигма АЦП реализованых на ПЛИС и если нужно можно и ЦАП реализовать и функциональный генератор также. Вот еще где-то промелькало раньше о возможности использования GT трансиверов ПЛИС для измерения быстрых сигналов, но не могу найти тему...
  7. Интересует такой вопрос - после смены в Diamond-e Active HDL на ModelSim, кто-либо пробывал симулировать старые ядра в которых присутствуют black-box-ы, обфурскации и прочие штуки генерированые из Clarity? А то я попробовал с ядро с MIPI и все как-то грустно, с ходу симуляция не идет, хотя вроде бы подсовывал, библиотеки ovi_lifmd и pmi_work из папки modeltech...
  8. А после сборки прототипа еще сертификацию на работу устройства in vivo, камера то интероральная.
  9. Я имел ввиду female connector для DATA1-DATA3. Возможно родные male можно выбросить и впаять pin header
  10. уже есть Lattice MachXO2-3 и ICE40, вот только не у всех из них есть QFP корпус, что не всегда удобно
  11. Я под линукс попробовал написать свою програму для оживления XDMA (в режиме AXI stream), без драйвера. Доступ к регистрам есть все нормально, но похоже ПЛИС не видит дескрипторов из-за того что они выделены в user space (получается в виртуальной памяти). Наверное нужно все же написать минимальный драйвер что бы разместить дескрипторы и буфера для h2c/c2h трансферов по физическим адрессам? Я знаю что есть драйвер от Ксайлинкса, но нахрапом его оседлать у меня не получилось - чет там очень все сложно написано и все виснет после загрузки. Скажите пожалуйста, Вы писали драйвер сами или доводили до ума ксайлинксовский?
  12. А Вы могли бы поделится информацией как именно Наверное уважаемому AVR было бы интересно и актуально, да и другим...
  13. Тогда есть вариант: Удалить проверку в драйвере или он закрыт производителем ? Не подключал именно к Raspberry, к по этому не знаю насколько сложно
  14. Кросслинк поток однозначно запустит сам, вопрос ожидает ли драйвер на Raspberry какого-либо ответа от камеры по I2C ?! Вы можете посмотреть что там в драйвере или он закрыт?
  15. Cобственно мы взяли Crosslink на вход сенсор с subLVDS, выход CSI-2, есть готовый bridge от Lattice, а так же есть составные компоненты этого bridge. Tак что можно и сенсор с другим интерфейсом использоватъ. Насколько з понимаю для датарейта 900Mbps и ниже , можно взять MachXO3. Сами не решались делать по причинам с которыми Вы столкнулись - верификация
  16. Один из вариантов это взять какой либо одноплатник с CSI-2 с линуксом и пытатся разобратся что приходит битым? А cколько нужно выложить за IP Вы узнавали?
  17. Я имел ввиду что возможно перепутаны каналы, например 8-й с 11-м. Столкнулся с таким у сенсоров Сони IMX178: название data пинов A,B,C,D... не совпадало с номером сериального канала. Хотя по логике data А должно соответствовать lane 0. Из документации было неочевидно сразу. Пришлось перемапить каналы в ПЛИС. В другом случае IMX226 все сделали согласно документации... Не работает, оказалось маппинг пинов сенсора и lanes number та же как и у IMX178
  18. Хорошо бы загнать сенсор в режим теста, если такой режим имеется. И по известному паттерну определить работает ли lvds интерфейс корректно. Горизонтальные полосы могут быть если перепутаны lanes.
  19. Да, там есть конфигурационный флеш ( Instant-on (0.5 ms or less) configuration time ), но это мелкий FPGA, а не CPLD, в отличии от CoolRunner. Можно еще смотреть MachXO2/MachXO3 от Lattice, там тоже есть флеш, цена наверное будет получше
  20. Что по Вашему мнению первопричина - тул или сам чип? У Вас был полностью свой HDL или использовались IP от производителя?
  21. Я как раз сегодня заполнил Crosslink на 69% и маппинг выдал кучу ошибок по холдам. Раньше это корректировалось в place&route а теперь не разводится нивкакую :(
×
×
  • Создать...