Jump to content
    

Search the Community

Showing results for tags 'systemverilog'.

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Сайт и форум
    • Новости и обсуждения сайта и форума
    • Другие известные форумы и сайты по электронике
    • В помощь начинающему
    • International Forum
    • Образование в области электроники
    • Обучающие видео-материалы и обмен опытом
  • Cистемный уровень проектирования
    • Вопросы системного уровня проектирования
    • Математика и Физика
    • Операционные системы
    • Документация
    • Системы CAD/CAM/CAE/PLM
    • Разработка цифровых, аналоговых, аналого-цифровых ИС
    • Электробезопасность и ЭМС
    • Управление проектами
    • Neural networks and machine learning (NN/ML)
  • Программируемая логика ПЛИС (FPGA,CPLD, PLD)
    • Среды разработки - обсуждаем САПРы
    • Работаем с ПЛИС, области применения, выбор
    • Языки проектирования на ПЛИС (FPGA)
    • Системы на ПЛИС - System on a Programmable Chip (SoPC)
    • Methods and tools for FPGA/ASIC verification
  • Цифровая обработка сигналов - ЦОС (DSP)
    • Сигнальные процессоры и их программирование - DSP
    • Алгоритмы ЦОС (DSP)
  • Микроконтроллеры (MCU)
    • Cредства разработки для МК
    • ARM
    • RISC-V
    • AVR
    • MSP430
    • Все остальные микроконтроллеры
    • Отладочные платы
  • Печатные платы (PCB)
    • Разрабатываем ПП в САПР - PCB development
    • Работаем с трассировкой
    • Изготовление ПП - PCB manufacturing
  • Сборка РЭУ
    • Пайка и монтаж
    • Корпуса
    • Вопросы надежности и испытаний
  • Аналоговая и цифровая техника, прикладная электроника
    • Вопросы аналоговой техники
    • Цифровые схемы, высокоскоростные ЦС
    • RF & Microwave Design
    • Метрология, датчики, измерительная техника
    • АВТО электроника
    • Умный дом
    • 3D печать
    • Робототехника
    • Repair and debug
  • Силовая электроника - Power Electronics
    • Силовая Преобразовательная Техника
    • Обратная Связь, Стабилизация, Регулирование, Компенсация
    • Первичные и Вторичные Химические Источники Питания
    • Высоковольтные Устройства - High-Voltage
    • Электрические машины, Электропривод и Управление
    • Индукционный Нагрев - Induction Heating
    • Системы Охлаждения, Тепловой Расчет – Cooling Systems
    • Моделирование и Анализ Силовых Устройств – Power Supply Simulation
    • Компоненты Силовой Электроники - Parts for Power Supply Design
  • Интерфейсы
    • Форумы по интерфейсам
  • Поставщики компонентов для электроники
    • Поставщики всего остального
    • Компоненты
  • Майнеры криптовалют и их разработка, BitCoin, LightCoin, Dash, Zcash, Эфир
    • Обсуждение Майнеров, их поставки и производства
  • Дополнительные разделы - Additional sections
    • Встречи и поздравления
    • Ищу работу
    • Предлагаю работу
    • Куплю
    • Продам
    • Объявления пользователей
    • Общение заказчиков и потребителей электронных разработок

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


AIM


MSN


Сайт


ICQ


Yahoo


Jabber


Skype


Город


Код проверки


skype


Facebook


Vkontakte


LinkedIn


Twitter


G+


Одноклассники

  1. Здравствуйте, коллеги Ситуация: В package определена экспортируемая в C++ функция. На стороне C++ данная функция вызывается в случайный момент времени тредом, который к DPI не имеет отношения. Во время вызова функции из C++ симулятор Xcelium выдаёт следующие ошибки: "DPI Scope function call allowed only from context function" и "The C identifier "foo" representing an export task/function cannot be executed from a non-context area". Перед вызовом функции foo в стороннем треде я пробовал принудительно задавать контекст: svSetScope(svGetNameFromScope("foo_pkg")), но безуспешно. Я даже пробовал заранее сохранять переменную с контекстом (GLOBAL_SCOPE=svGetScope()) и перед вызовом устанавливать контекст: svSetScope(GLOBAL_SCOPE). Тоже безрезультатно. При вызове svSetScope(GLOBAL_SCOPE) DPI не видит контекста вообще и устанавливает его в NULL. На форуме Cadence нашёл заметку в которой автор решает описываемую проблему, используя функции __sync_lock_test_and_set и __sync_lock_release. Как и над какими переменными он их использует - не понятно. -- Сталкивался ли кто с подобной проблемой и как решил?
  2. Здравствуйте, коллги Можете подсказать открытое ПО или библиотеки для генерации регистровых UVM моделей по excel или IP-XACT файлам? Так же было бы не плохо генерировать IP-XACT с помощью GUI или какой-нибудь Python либы с простым API.
  3. Здравствуйте, коллеги Слышал про возможность "растянуть" time-slot на временной диаграмме в симуляторе Xcelium. Насколько я понимаю, это наглядно отобразит действия во всех временных регионах внутри любого time-slot (удобно при отлавливании race-condition). Может ли кто подсказать алгоритм действий?
  4. Здравствуйте, коллеги Вопрос по адаптеру (adapter) UVM RAL для AXI4. В uvm_cookbook сказано: "when using explicit prediction, the status value returned to the predictor is ignored. This means that if an errored (UVM_NOT_OK) status is being returned from a register access, the register access will need to be filtered out before sending information to the Predictor if that errored transfer is not meant to update the mirrored value of a register.". Получается, что вне зависимости от статуса транзакции (канал BRESP), модель регистров будет обновлена, что не совсем правильно. Тут https://blog.verificationgentleman.com/2014/04/13/custom-field-access-policies-in-uvm-ral.html человек советует переписать predictor. Стоит ли этим заниматься или есть более простое решение?
  5. Здравствуйте, коллеги Попал ко мне на стол VIP от Cadence под названием CDN_AXI. Подключил его классически: интерфейс+конфиг+агент+sequence. Но сигнал WVALID ведёт себя неадекватно, т.е. переводится в единицу и так в ней и висит до конца симуляции... VIP настроен на полный AXI4. У всех транзакций burst законстрейнен до длины 1. Бывало ли такое у кого и как лечится?
  6. Здравствуйте, коллеги Можно ли считать, что для оператора {<<N{array}} нет никакой разницы что подано ему в качестве аргумента: массив или вектор? Т.е. он проводит конкатенацию над входным массивом (если таковой подан на вход) и меняет его порядок в соответствии с “N”.
  7. Здравствуйте, коллеги В данный момент генерацию клоков осуществляю с помощью модуля с подобным объявлением: clk_gen #( .CLK_F_MHZ(<частота в МГц>), .RST_DUR_NS(<длительность ресета в нс>) ) i_clk_gen( .clk_o(), .rst_n_o() ); Нахожу данный подход гибким и легко переиспользуемым в других проектах. Слышал, что для UVM применяют неких специализированных агентов. Использовал ли их кто-нибудь? Т.е. что это за зверь?
  8. Здравствуйте, коллеги В данный момент руководствуюсь советом из "Universal Verification Methodology UVM Cookbook" от Siemens. А именно: Нахожу данную структуру удобной. Единственно добавляю папку scripts для сборки и пр. А как Вы организуете свой тестбенч?
  9. Здравствуйте, коллеги Пытаюсь удостовериться в правильности ответа данного поста: https://stackoverflow.com/questions/17327680/what-is-the-difference-between-single-and-double-ampersand-binary-opera А именно: в случае если операнд оператора && (логическое И) является вектором, то этот операнд сначала сравнивается с 0 (нулём), и результат этого сравнения уже идёт на вход &&. Как ни шерстил стандарт - ничего подобного не нашёл. Теоретически можно сравнивать вектор с нулём, или приводить его к одному биту. Т.е. возможны два подхода, и они по разному работают.
  10. Здравствуйте, коллеги Возникла проблема при миграции с QuestaSim в Xcelium Есть следующий код: T temp_numb; //... // Convert to actual number if (type(temp_numb) == type(int)) temp_numb = temp_numb_str.atoi(); else if(type(temp_numb) == type(int unsigned)) temp_numb = T'(temp_numb_str.atoi()); else if(type(temp_numb) == type(byte)) temp_numb = byte'(temp_numb_str.atoi()); else if(type(temp_numb) == type(real)) temp_numb = temp_numb_str.atoreal(); else if(type(temp_numb) == type(shortreal)) temp_numb = shortreal'(temp_numb_str.atoreal()); else `uvm_fatal("FILE READ", "Unsupported type of parameter") Здесь происходит парсинг входной строки в один из встроенных SV типов. Соль в том, что подобное сравнение типов спокойно компилируется в Questasim, а вот Xcelium при компиляции выдаёт ошибку. Пока пришлось закомментить данный блок и оставить конвертацию в один тип, но это костыль, а костыли - зло. Есть ли сравнение типов в Xcelium?
  11. Здравствуйте. Есть такой код: class driver... task main; automatic int sender_iterator; ... forever begin ... sender_iterator=0; while(sender_iterator<t.transaction_full.size) begin fork automatic int k = sender_iterator; begin $display("---transaction index automatic %d---", k); $display("---transaction index foreach %d---", sender_iterator); send_UDDCP_arr(t.transaction_full[k], UDDCP_inputs[k]); end join_none sender_iterator++; end ... wait fork; ... end endtask endclass Когда происходит первая итерация цикла forever begin, я вижу в консоли: # ---transaction index automatic 10--- # ---transaction index foreach 11--- # ---transaction index automatic 9--- # ---transaction index foreach 11--- # ---transaction index automatic 8--- # ---transaction index foreach 11--- # ---transaction index automatic 7--- # ---transaction index foreach 11--- # ---transaction index automatic 6--- # ---transaction index foreach 11--- # ---transaction index automatic 5--- # ---transaction index foreach 11--- # ---transaction index automatic 4--- # ---transaction index foreach 11--- # ---transaction index automatic 3--- # ---transaction index foreach 11--- # ---transaction index automatic 2--- # ---transaction index foreach 11--- # ---transaction index automatic 1--- # ---transaction index foreach 11--- # ---transaction index automatic 0--- # ---transaction index foreach 11--- Но во второй итерации я вижу: # ---transaction index automatic 21--- # ---transaction index foreach 22--- После этого я обращаюсь к несуществующему элементу, и программа падает. Почему не обнуляется sender_iterator?
  12. Собственно, вопрос в заголовке. Мне нужно загрузить данные из всех файлов, содержащих определённую подстроку.
  13. Здравствуйте. В пакете есть задача: task wait_one(inout logic c, s); while(1) begin @(posedge c); if(s) break; end endtask Я вызываю её внутри класса таким образом: task automatic send_UDDCP(UDDCP_transaction_full transaction, virtual UDDCP_interface intf); ... wait_one(intf.clk, intf.read_ready); ... endtask Проблема в том, что строчка @(posedge c); никогда не исполняется. Но, если заменить этот код на другой, без вызова задачи, всё работает: task automatic send_UDDCP(UDDCP_transaction_full transaction, virtual UDDCP_interface intf); ... while(1) begin @(posedge intf.clk); if(intf.read_ready) break; end ... endtask Насколько я понимаю, верилог копирует c и s только 1 раз при входе в задачу. Я попробовал другой вариант: task automatic wait_one(ref logic c, s); while(1) begin @(posedge c); if(s) break; end endtask Но, когда я пытаюсь запустить симуляцию, мне говорят, что "Actual argument expression for ref formal 'c' is not an equivalent type." Системверилог не умеет передавать ссылку на поле виртуального интерфейса, или в чём проблема?
  14. Есть конструктор: function new (const ref UDDCP_header h, const ref int unsigned d[$], bit v[$], int b, int a); Так он работает: int be, aa; ... be = 100; aa = 250; trans_single = new(h[i],d[i],valids_single,be,aa); А так нет: trans_single = new(h[i],d[i],valids_single,100,250); Моделсим при компиле говорит, что "The expression "100" is illegal for use with ref argument "b"". Почему?
  15. Здравствуйте. У меня есть модуль с массивом интерфейсов в портах. Как передать этот массив в тест? Я создал ещё один параметризованный тип интерфейса, где параметр - число исходных интерфейсов. Всё компилится, но, когда я запускаю симуляцию, моделсим пишет, что "illegal assignment to type 'virtual UDDCP_interface_arr' from type 'interface UDDCP_interface_arr #(11)". Видимо, мне надо как-то передать параметр внутрь блока program, чтобы при этом параметр был виден уже в портах. Я попытался это сделать, но так не компилится, выдаёт ошибку из-за того, что рараметр объявлен позже, чем используется: program test(UDDCP_interface UDDCP_rout, UDDCP_interface_arr #(p) UDDCP_inputs, additional_ports add_ports); parameter p=11; ... Можно как-то сделать параметризованные порты у program? Я не нашёл примеров. Или вообще можно не городить огород, а просто как-то передавать массив интерфейсов через программу в объект класса? На всякий случай файлы исходников прикреплю. new.7z
  16. Всем привет! Помогите, пожалуйста, разобратся с условиями для covergroup. Цель следующая, учитывать значение в coverpoint только когда оно валидно. Вот варианты: covergroup iff_cg @( posedge clk ); value_cp : coverpoint dif.value iff ( dif.valid && dif.flag ) { } endgroup covergroup pos_iff_cg @( posedge clk iff ( dif.valid && dif.flag ) ); value_cp : coverpoint dif.value { } endgroup covergroup smpl_cg; value_cp : coverpoint dif.value {} endgroup smpl_cg _smpl; pos_iff_cg _pos_iff; iff_cg _iff; task cc(); forever begin @( posedge clk ); if( dif.valid && dif.flag ) begin _smpl.sample(); end end endtask Получается так, что pos_iff_cg и smpl_cg дают ожидаемый результат, а в iff_cg не хватает попаданий, но при этом все значениям которые были в тесте есть. Как правильно делать в таких случаях? Скрин: Я думал столбец Coverage для bin -- это кол-во попаданий, или это не так? Тогда как интерпретировать этот столбец? Код в архиве, симулятор Questa. cover_min.zip
  17. Приветствую Возник вот такой вопрос- Есть интерфейс с пучком сигналов которые для удобства определены как структура interface if_TEST #(ID_WH=3) ; typedef struct packed { u1_t [ID_WH-1:0] sig0; u1_t sig1; u7_t sig2; //... } st_TEST_t; st_TEST_t st; bit valid; bit ready; modport in (input st, valid, output ready); modport ou (output st, valid, input ready); endinterface и хочется мне в месте где такой интерфейс применяется получить актуальную ширину структуры в битах. Поскольку реальное значение будет зависит от параметра который меняется при инстанцировании интерфейса. Казалось бы что проще module test (if_TEST.in if_test, ...); localparam ST_WH = $bits(if_test.st); ... module top (...); if_TEST #(4) if_test (); test i_test(.if_test(if_test), ...); ... На что получаю в Modelsim (Intel start edition 2020.1/2020.3) маловразумительную ошибку - ** Error: (vsim-8894) In instance ".../i_test" parameter reference "if_test.st" through interface port "if_test" is not valid when the actual interface in the instance is an arrayed instance element or below a generate construct." Маловразумительную потому что этот интерфейс инстанцирован сам по себе - ни как array, ни из под generate. Самое прикольное что в Qu все синтезируется как надо, а в Modelsim такая вот засада. Вот и ломаю голову как сделать чтобы и в симе и в синтезе получать нужное заначене ширины. Удачи! Rob.
  18. Приветствую всех! С 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 должен видеть переменные из главного модуля?
  19. Всем привет. Мы проводим стримы по FPGA/ПЛИС тематике на твиче по адресу twitch.tv/fpgasystems Обычно, это среда и суббота в 20:00. Записи прошедших стримов лежат на youtube: youtube.com/c/fpgasystems Ждём Вас на стриме. Анонсы предстоящих эфиров в группе в телеграм @fpgasystems (https://t.me/fpgasystems) и VK и FB
  20. www.kraftway.ru Занимаемся разработкой материнских плат, видеокамер, коммутаторов и т.п. оборудования. Основной долгоиграющий продукт в работе: Микроконтроллер SSD диска. Есть первая рабочая версия. Вторая версия почти готова к отправке на фабрику. Планируем уже разработку третей версии. Там нужно будет принять участие в пересмотре архитектуры продукта. Сейчас под ARM, планируем RISC-V, но это не точно:-) Чем занимаемся: • Разработка конфигураций для FPGA Xilinx Zynq/UltraScale+; • Встраивание сторонних IP-блоков, разработка собственных IP-блоков; • Оптимизация проекта по быстродействию и занимаемым ресурсам; • Отладка интерфейсов взаимодействия FPGA и встроенного процессора ARM • Поддержка наследуемого кода, поиск и исправление в нем ошибок • Добавление в существующие модули новых функциональных возможностей; как пример задачи: разработка контроллера NVME. Пожелания по опыту/навыкам: Знание Verilog; Опыт написания тестбенчей с формированием отчетов; Опыт работы с Xilinx (ISE/Vivado) / Altera (Intel) (Quartus); Опыт работы с ПЛИС со встроенными процессорными ядрами (Xilinx Zynq, Intel Cyclone V SoC, Arria 10 SoC); Команда: 5 разработчиков ПЛИС. Verilog/SystemVerilog + смежные команды (математики, физдизайнеры). 2 верификатора. Redmine/Jira, git. Условия: Склоняемся больше к офисной работе. Но готовы обсудить и удалёнку/полуудалёнку) Место работы: м.Алексеевская, 5 мин.пешком от метро, 15 минут от платформы Рижская. График работы: Пятидневка. 8-часовой рабочий день. Обычно с 10 до 19. По деньгам: ориентир на 150+ т.р. в месяц. Всё в белую. Контакт: Борзов Максим Telegram https://t.me/Maksim_Borzov [email protected]
  21. Всем привет. Пытаюсь передать параметризированную структуру между модулями и поскольку "parameter type" в Quartus 18.1 не работает, я хочу сделать это через интерфейс. Описываю его в отдельном файле, создаю инстанс в топ модуле, а во вложенном модуле пытаюсь вытащить из него тип данных. Выглядит это так: interface intf_WITHSTRUCT #(WIDTH=8); typedef struct packed{ logic val; logic [WIDTH-1:0] cnt; } st_INSIDE_INTF; st_INSIDE_INTF struct_inst; endinterface: intf_WITHSTRUCT module top (output logic [7:0] ocnt); intf_WITHSTRUCT #(.WIDTH(8)) interface_inst(); test i_test ( .clk(clk_125MHz), .rst(prb_rst), .blabla(interface_inst), .ocnt(ocnt) ); endmodule: top module test ( input clk, input rst, intf_WITHSTRUCT blabla, output logic [7:0] ocnt ); typedef blabla.st_INSIDE_INTF st_INSIDE_INTF_import; // Вытаскивю структуру st_INSIDE_INTF_import new_struct_inst; // Создаю инстанс always_ff@(posedge clk or posedge rst) if(rst) new_struct_inst <= '0; else new_struct_inst.cnt <= new_struct_inst.cnt + 1'b1; always_ff@(posedge clk or posedge rst) if(rst) ocnt <= '0; else ocnt <= new_struct_inst.cnt; endmodule: test В результате получаю ошибку: Error (10733): Verilog HDL error at test.sv(17): cnt is not declared under this prefix В чем может быть ошибка? Что странное, если во вложенном модуле я присваиваю структуре (которая в интерфейсе) значения, то ошибки не возникает. На мой взгляд не логичное поведение
  22. Доброго времени суток. Проколупавшись целый день над вопросом решил обратиться к гуру. Есть ли какой-то способ создать типизированный параметр? В моём случае имеется enum тип вида: typedef enum byte {mon, tue, wed, thu, fri} weekdays_t; Но когда я пытаюсь сделать параметр такого типа, ничего не выходит. Вернее мне нужен параметр длинной n таких типов. Может кто-то сталкивался и есть решение (либо уже переработал...) Допустим получится создать массив с указанным типом. Ну или просто двумерный массив-параметр. Дальше загвоздка в его объявлении. Во всех случаях присвоение происходит поэлементно каждому элементу массива и некое дефолтное значение: parameter [7:0] byte_pattern_p [14:0] = '{1:'1, 2:'1, default:0}; Но что если мне нужно присвоить константы некому диапазону значений, коих к примеру 30 штук. Не писать же каждый номер и значение... Ну или просто списком задавать, тоже неудобно если элементов за 200 заваливает. Заранее спасибо за ответы
  23. Доброго времени суток. Не удается реализовать конструкцию, позволяющую сгенерирвать массив с интерфейсами, каждый из которых может быть настроен с помощью своих параметров. По задумке необходимо подключить слейвы/мастера к интерконнекту. В проекте предполагаются абоненты с разными параметрами интерфейсов (в частности разрядность шины). Передавать шины в интерконнект хочется массивом, а внутри уже подключать нужный к нужному. Возможно есть interface BUS #( parameter int asize = 32, parameter int dsize = 32 ); logic [asize-1:0] addr; logic [asize-1:0] data; endinterface; module top; BUS #( .asize (), .dsize () ) buses [0:1] (); interconnect inter_i ( .slaves(buses) ); slave1 slv1_i ( .slave(buses[0]) ); slave1 slv1_2 ( .slave(buses[1]) ); endmodule
  24. Всем добра. Столкнулся с непонятной мне вещью: logic reset; logic [5:0] cnt; always_ff @(posedge clk) begin cnt <= reset ? '0 : cnt + 1; end Работает, но always_ff @(posedge clk) begin cnt <= reset ? '0 : cnt++; end нет. Отсылка к стандарту или куда-либо ещё приветствуется.
  25. Добрый день. Возник вопрос, как в модельсим передать между модулями упакованную структуру одно поле которой параметризировано? Если пишу так, то он ругается на то что структура не определена (логично): module input_processing #( parameter WORK_WIDTH = 18 )( input logic ireset, input logic iclk, output st_TAG port_tag, ); typedef struct packed{ logic throw; logic R_pack; logic H_pack; logic [$clog2(WORK_WIDTH)-1:0] pad; logic [15:0] slice_len; } st_TAG; ** Error: near "port_tag": syntax error, unexpected IDENTIFIER, expecting ')'. Если так, то говорит, что не определен параметр (тоже логичо): typedef struct packed{ logic throw; logic R_pack; logic H_pack; logic [$clog2(WORK_WIDTH)-1:0] pad; logic [15:0] slice_len; } st_TAG; module input_processing #( parameter WORK_WIDTH = 18 )( input logic ireset, input logic iclk, output st_TAG port_tag, ); ** Error: (vsim-3043) Unresolved reference to 'WORK_WIDTH' in $root.WORK_WIDTH. На самом деле у меня уже возникала похожая проблема, только не со структурой, а с функцией. Возникала ошибка, когда я пытался рассчитать размерность порта с помощью функции определенной в теле модуля. Я нахожу логику в ошибках modelsim, но если он запрещает заходить в тело модуля при объявлении портов, то должна быть возможность определить структуру/функцию в описании портов, чтобы использовать их там. Или нет? Забавно, что Quartus ошибку не выдает (по крайней мере с функциями), то есть там получается другая область видимости. Вы не находите странным такую разницу в подходах Quartus 17 и Modelsim 10.4b? Да я в принципе могу определить выход просто как разрядность и в теле присвоить ему упакованную структуру, но потом при изменении структуры мне разрядность этого выхода придется постоянно менять.
×
×
  • Create New...