RobFPGA 27 4 февраля, 2019 Опубликовано 4 февраля, 2019 · Жалоба Приветствую! Переделывая некий модуль с verilog на SystemVerilog возникла желание сделать порты модулей более читаемыми, а не как просто плоские вектора бит. Чтобы через длительное время после дизайна ( через неделю например :) ) открыв исходник было понятно что безликий bus_addr [ADDR_WH-1:0] на самом деле ... typedef struct packed { logic [SEG_WH-1:0 seg; logic [BLK_WH-1:0] blk; logic [IDX_WH-1:0] idx; } st_ADDR_A_t; Можно определить структуру в package package types_pq; typedef struct packed { ... } st_ADDR_A_t; module addr_gen #(... ... output types_pq::st_ADDR_A_t bus_addr, ... Но тогда если нужно несколько одинаковых (функционально) модулей с разными вариантами (шириной полей) структур придется делать copy-paste модулей (скучно ). Казалось бы самое правильное тут это interface да с потрошками параметрами :). interface bus_if #(IDX_WH=1, BLK_WH=1, SEG_WH=1) (); logic [SEG_WH-1:0] seg; logic [BLK_WH-1:0] blk; logic [IDX_WH-1:0] idx; ... endinterface ... bus_if #(.IDX_WH(10), .BLK_WH(8), .SEG_WH(5)) if_bus_addr (); module addr_gen #( bus_if.M bus_addr, ... Но мне интересно стало а можно ли как по другому? Оказалось что да - тип порта можно передавать через parameter module addr_gen #(parameter type BUS_T = types_pq::st_ADDR_A_t) ( ... output BUS_T bus_addr, ... addr_gen #(.BUS_T(types_pq::st_ADDR_A_t)) i_addr_gen_a (...); addr_gen #(.BUS_T(types_pq::st_ADDR_B_t)) i_addr_gen_b (...); Проверил что сей изыск успешно синтезируется в Synplify 2018.03 и в Vivado 2018.3, а вот в старичке Qu 14.1 увы нет. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 11 февраля, 2019 Опубликовано 11 февраля, 2019 · Жалоба Ну можно этот тип запихнуть и в interface и при их объявлении уже указывать на структуру из package. interface bus_if #(parameter type st_ADDR_t = bit) (); st_ADDR_t st_ADDR endinterface bus_if #(.st_ADDR_t(types_pq::st_ADDR_A_t)) if_bus_addr_a (); bus_if #(.st_ADDR_t(types_pq::st_ADDR_B_t)) if_bus_addr_b (); addr_gen i_addr_gen_a (if_bus_addr_a); addr_gen i_addr_gen_b (if_bus_addr_b); Стало ли нагляднее... боюсь через неделю все равно придется заглядывать в package. Но раз уж поля структуры адреса в интерфейсе, удобно ассершен прикрутить какой-нибудь нужный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 14 июня, 2022 Опубликовано 14 июня, 2022 · Жалоба столкнулся с применением такого в исходниках cva6 / ariane квеста 10.4е такое не понимает, ругается на Internal error: unhandled IDL type два случая 1) изи module axi_lite_interface #( ... parameter type axi_req_t = ariane_axi::req_t, parameter type axi_resp_t = ariane_axi::resp_t ) ( ... input axi_req_t axi_req_i, output axi_resp_t axi_resp_o, ... assign data_o = axi_req_i.w.data; валится на assign выглядит так будто axi_req_t воспринимает как wire (является ли wire IDL y questa - хз) при отказе от передачи типа в параметре и явном указании input ariane_axi::req_t axi_req_i, работает ------------------- 2) хуже module plic_regs #( parameter type reg_req_t = logic, ... input reg_req_t req_i, ... if (req_i.valid) begin if (req_i.write) begin то есть в модуле (и вышестоящих по иерархии) тип указан logic, хотя по коду это структура, и только где-то на самом верху передается тип plic_top #( .N_SOURCE ( ariane_soc::NumSources ), .N_TARGET ( ariane_soc::NumTargets ), .MAX_PRIO ( ariane_soc::MaxPriority ), .reg_req_t ( plic_req_t ), то есть патчить сложнее ---------------- скомпилировалось с -sfcu (и переписывания сгенеренных средой tcl скриптов - может что-то упустил), но симуляция не работает, пока разбираюсь ---------------- есть вопрос - это известная фича, я не изобретаю велосипед? может есть более правильные пути? опенсорсные авторы в "саппорте" советуют выкинуть квесту и взять другой симулятор, но мне проще с квестой, а не верилятором :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 14 августа, 2022 Опубликовано 14 августа, 2022 · Жалоба On 6/14/2022 at 11:57 AM, yes said: опенсорсные авторы в "саппорте" советуют выкинуть квесту и взять другой симулятор, но мне проще с квестой, а не верилятором :) а что верилятор такое нормально переварит? сомнения берут меня.. :-/ теже авторы из Цюриха и Болоньи в других репо наоборот ментор нахваливают, да не простой, а с доп.фичами: Quote Mentor ModelSim ( the free version provided by Altera is only partially working, see issue #12). https://github.com/pulp-platform/pulpissimo#requirements Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 15 августа, 2022 Опубликовано 15 августа, 2022 · Жалоба 12 hours ago, Doka said: а что верилятор такое нормально переварит? сомнения берут меня.. :-/ теже авторы из Цюриха и Болоньи в других репо наоборот ментор нахваливают, да не простой, а с доп.фичами: собрать самому verilator мне не удалось. там вроде бы в опенпитоне (по-моему этой средой пользовался) вроде бы и срез с гита вериляторного фиксированый и все-такое - но не собралось. может старался недостаточно. но скачал виртуальную машину, где уже все как бы собрано из этих исходников - там работает. сам по себе верилятор тоже неплохо собирается - но в той опенпитоновской среде кучу длл-ек подключает еще что-то - вобщем проблемы с хостовым компилятором и либами. ----------------------------- этот вопрос решился с каденсовским симулятором, там тоже есть всякие варнинги про unsupported - но вобщем работает. ================ под ментором с фичами, по-моему, подразумевается квеста. а в моделсиме нет рандомизации, нет кавериджа и ассершинов, еще может чего-то то нет. в коде полно "if modelsim выкинуть кусок" Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 1 15 августа, 2022 Опубликовано 15 августа, 2022 · Жалоба 37 minutes ago, yes said: сам по себе верилятор тоже неплохо собирается - но в той опенпитоновской среде кучу длл-ек подключает еще что-то - вобщем проблемы с хостовым компилятором и либами. судя по упоминанию длл-ек сборка в винде. там не пробовал. в линуксе всё по стоковой инструкции из коробки собирается - что икарус, что верилятор. единственное, об ред-хатовский gcc версии 4.8 может споткнуться, ну так это не беда - есть devtoolset с любой версией gcc up to 11 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 15 августа, 2022 Опубликовано 15 августа, 2022 · Жалоба 1 minute ago, Doka said: судя по упоминанию длл-ек сборка в винде. там не пробовал. в линуксе всё по стоковой инструкции из коробки собирается - что икарус, что верилятор. да в теории оно все так "ис коропки", а попробуй собери :). тем более в гитах версии/таги опенсорсники не любят. если берешь какой-то замороженный проект, то там для субмодулей могут быть указаны хэши - но такое тоже редко... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 15 августа, 2022 Опубликовано 15 августа, 2022 · Жалоба On 6/14/2022 at 10:57 AM, yes said: 2) хуже ... Вот из за таких ситуаций я и ограничился лишь стадией экспериментов. Слишком уж узкая область применения такого подхода при синтезе при неочевидных профитах и очевидных проблемах. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться