alxkon
Участник-
Постов
145 -
Зарегистрирован
-
Посещение
Весь контент alxkon
-
Спасибо огромное! Это ведь действительно очевидно, туплю... С RTL и TB на Verilog и SV не работал до сих пор особо, так, подправить и разобраться как работает. Зато теперь открыл для себя +include+
-
SystemVerilog видимость parameter в task
alxkon опубликовал тема в Языки проектирования на ПЛИС (FPGA)
Приветствую всех! С 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 должен видеть переменные из главного модуля? -
В новый проект эта серия Артиксов встает как влитая, если еще и цены приемлимые будут то вообще сказка - тут и трансиверов достаточно и логики. Давно ждали такого. Видно Lattice начал поджимать своими xxxx NX.
-
Спасибо за ссылку. Как Вы думаете использовать такой анализатор?
-
Вы правы, серьезные вещи нужно тестировать сертифицироваными приборами. Но предварительный частичный входной контроль работоспособности плат (целостность проводников, наличие всех напряжений питания и другие несложные функции) вполне посильная задача, особой точности не нужно, такой прибор можно размножить и распараллелить проверку.
-
Не скажу о финансовой состоятельности осцилографостроения, но для меня идеи уважаемого Leka надолкнули на мысли о создании примитивного тестера плат на основе дешевых FPGA devkit : логические каналы тестируем с помощью '1', '0', измеряем наличие присутствия всех нужных напряжений с помощью дельтасигма АЦП реализованых на ПЛИС и если нужно можно и ЦАП реализовать и функциональный генератор также. Вот еще где-то промелькало раньше о возможности использования GT трансиверов ПЛИС для измерения быстрых сигналов, но не могу найти тему...
-
Lattice Software
alxkon ответил StewartLittle тема в Среды разработки - обсуждаем САПРы
Интересует такой вопрос - после смены в Diamond-e Active HDL на ModelSim, кто-либо пробывал симулировать старые ядра в которых присутствуют black-box-ы, обфурскации и прочие штуки генерированые из Clarity? А то я попробовал с ядро с MIPI и все как-то грустно, с ходу симуляция не идет, хотя вроде бы подсовывал, библиотеки ovi_lifmd и pmi_work из папки modeltech... -
Интраоральная камера
alxkon ответил apetondr тема в Оптика и оптоэлектроника
А после сборки прототипа еще сертификацию на работу устройства in vivo, камера то интероральная. -
Я имел ввиду female connector для DATA1-DATA3. Возможно родные male можно выбросить и впаять pin header
-
А разъёмы для даных Вы нашли?
-
уже есть Lattice MachXO2-3 и ICE40, вот только не у всех из них есть QFP корпус, что не всегда удобно
-
А есть где либо описание вашего метода?
-
Я под линукс попробовал написать свою програму для оживления XDMA (в режиме AXI stream), без драйвера. Доступ к регистрам есть все нормально, но похоже ПЛИС не видит дескрипторов из-за того что они выделены в user space (получается в виртуальной памяти). Наверное нужно все же написать минимальный драйвер что бы разместить дескрипторы и буфера для h2c/c2h трансферов по физическим адрессам? Я знаю что есть драйвер от Ксайлинкса, но нахрапом его оседлать у меня не получилось - чет там очень все сложно написано и все виснет после загрузки. Скажите пожалуйста, Вы писали драйвер сами или доводили до ума ксайлинксовский?
-
А Вы могли бы привести назваие и автора?
-
А Вы могли бы поделится информацией как именно Наверное уважаемому AVR было бы интересно и актуально, да и другим...
-
Тогда есть вариант: Удалить проверку в драйвере или он закрыт производителем ? Не подключал именно к Raspberry, к по этому не знаю насколько сложно
-
Кросслинк поток однозначно запустит сам, вопрос ожидает ли драйвер на Raspberry какого-либо ответа от камеры по I2C ?! Вы можете посмотреть что там в драйвере или он закрыт?
-
Cобственно мы взяли Crosslink на вход сенсор с subLVDS, выход CSI-2, есть готовый bridge от Lattice, а так же есть составные компоненты этого bridge. Tак что можно и сенсор с другим интерфейсом использоватъ. Насколько з понимаю для датарейта 900Mbps и ниже , можно взять MachXO3. Сами не решались делать по причинам с которыми Вы столкнулись - верификация
-
Один из вариантов это взять какой либо одноплатник с CSI-2 с линуксом и пытатся разобратся что приходит битым? А cколько нужно выложить за IP Вы узнавали?
-
Я имел ввиду что возможно перепутаны каналы, например 8-й с 11-м. Столкнулся с таким у сенсоров Сони IMX178: название data пинов A,B,C,D... не совпадало с номером сериального канала. Хотя по логике data А должно соответствовать lane 0. Из документации было неочевидно сразу. Пришлось перемапить каналы в ПЛИС. В другом случае IMX226 все сделали согласно документации... Не работает, оказалось маппинг пинов сенсора и lanes number та же как и у IMX178
-
Хорошо бы загнать сенсор в режим теста, если такой режим имеется. И по известному паттерну определить работает ли lvds интерфейс корректно. Горизонтальные полосы могут быть если перепутаны lanes.
-
Да, там есть конфигурационный флеш ( Instant-on (0.5 ms or less) configuration time ), но это мелкий FPGA, а не CPLD, в отличии от CoolRunner. Можно еще смотреть MachXO2/MachXO3 от Lattice, там тоже есть флеш, цена наверное будет получше
-
MAX V ведь SRAM based по сути FPGA, просто названа CPLD
-
FPGA Lattice
alxkon ответил Trumr тема в Работаем с ПЛИС, области применения, выбор
Что по Вашему мнению первопричина - тул или сам чип? У Вас был полностью свой HDL или использовались IP от производителя? -
FPGA Lattice
alxkon ответил Trumr тема в Работаем с ПЛИС, области применения, выбор
Я как раз сегодня заполнил Crosslink на 69% и маппинг выдал кучу ошибок по холдам. Раньше это корректировалось в place&route а теперь не разводится нивкакую :(