Jump to content

    

alxkon

Участник
  • Content Count

    124
  • Joined

  • Last visited

Community Reputation

0 Обычный

About alxkon

  • Rank
    Частый гость

Recent Profile Visitors

2808 profile views
  1. Альтера-Интел обьясняли свою надпись на микроновской флешке тем что каждый чип был тщательно выращен девствинницами в лунную ночь протестирован ними лично после микрона и является особо надежным, а за надежность надо платить. Обычные микроновские флешки работали с Циклон 5 ничуть не хуже и никогда не было проблем, 100к+ устройств.
  2. Вы будете ядро свое писать или использовать готовое?
  3. Большая засада с документацией, хотя судя по тому что приемную часть строят на Xilinx и Intel GT serdes ничего там супер нового нет.
  4. Да, Вы правы. Это следствие ошибки на которую указал des00. Мне нужно было запустить TB 3-х разных латтисовских IP. DO файлов там не было я сам быстро настрогал. Начал с первого ядра сразу криво - компиляция include файла привела к появлению ошибок, которые были мною приняты как смешаный Verilog разных стандартов. Попробовал в Modelsim выбрать год стандарта и оказалось что выбрав SV ошибок нет, вот и решил что это SV. Симуляция прошла. TB второго ядра это copy-paste первого TB. А на третьем споткнулся... Нашел Стюарта Сазерленда буду вникать сразу в SV.
  5. Спасибо огромное! Это ведь действительно очевидно, туплю... С RTL и TB на Verilog и SV не работал до сих пор особо, так, подправить и разобраться как работает. Зато теперь открыл для себя +include+
  6. Приветствую всех! С 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 должен видеть переменные из главного модуля?
  7. В новый проект эта серия Артиксов встает как влитая, если еще и цены приемлимые будут то вообще сказка - тут и трансиверов достаточно и логики. Давно ждали такого. Видно Lattice начал поджимать своими xxxx NX.
  8. Спасибо за ссылку. Как Вы думаете использовать такой анализатор?
  9. Вы правы, серьезные вещи нужно тестировать сертифицироваными приборами. Но предварительный частичный входной контроль работоспособности плат (целостность проводников, наличие всех напряжений питания и другие несложные функции) вполне посильная задача, особой точности не нужно, такой прибор можно размножить и распараллелить проверку.
  10. Не скажу о финансовой состоятельности осцилографостроения, но для меня идеи уважаемого Leka надолкнули на мысли о создании примитивного тестера плат на основе дешевых FPGA devkit : логические каналы тестируем с помощью '1', '0', измеряем наличие присутствия всех нужных напряжений с помощью дельтасигма АЦП реализованых на ПЛИС и если нужно можно и ЦАП реализовать и функциональный генератор также. Вот еще где-то промелькало раньше о возможности использования GT трансиверов ПЛИС для измерения быстрых сигналов, но не могу найти тему...
  11. Интересует такой вопрос - после смены в Diamond-e Active HDL на ModelSim, кто-либо пробывал симулировать старые ядра в которых присутствуют black-box-ы, обфурскации и прочие штуки генерированые из Clarity? А то я попробовал с ядро с MIPI и все как-то грустно, с ходу симуляция не идет, хотя вроде бы подсовывал, библиотеки ovi_lifmd и pmi_work из папки modeltech...
  12. А после сборки прототипа еще сертификацию на работу устройства in vivo, камера то интероральная.
  13. Я имел ввиду female connector для DATA1-DATA3. Возможно родные male можно выбросить и впаять pin header
  14. уже есть Lattice MachXO2-3 и ICE40, вот только не у всех из них есть QFP корпус, что не всегда удобно