Perdaculus 0 11 сентября, 2020 Опубликовано 11 сентября, 2020 · Жалоба Всем привет. Пытаюсь передать параметризированную структуру между модулями и поскольку "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 В чем может быть ошибка? Что странное, если во вложенном модуле я присваиваю структуре (которая в интерфейсе) значения, то ошибки не возникает. На мой взгляд не логичное поведение Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 сентября, 2020 Опубликовано 12 сентября, 2020 · Жалоба 18 hours ago, Perdachillo said: В чем может быть ошибка? Что странное, если во вложенном модуле я присваиваю структуре (которая в интерфейсе) значения, то ошибки не возникает. На мой взгляд не логичное поведение ошибка в нарушении стандарта, а присваивание работает, потому что структура упакована и она работает как битовый вектор, а дальше автоматические приведение разрядности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Perdaculus 0 13 сентября, 2020 Опубликовано 13 сентября, 2020 · Жалоба 12.09.2020 в 08:07, des00 сказал: ошибка в нарушении стандарта А в чем нарушение? Я нашел в IEEE Std 1800-2017 в разделе 25.10 Access to interface objects такой способ: interface ebus_i; integer I; // reference to I not allowed through modport mp typedef enum {Y,N} choice; choice Q; localparam True = 1; modport mp(input Q); endinterface module Top (); ebus_i ebus (); sub s1 (ebus.mp); endmodule module sub ( interface.mp i ); typedef i.choice yes_no;// import type from interface yes_no P; assign P = i.Q; // refer to Q with a port reference initial Top.ebus.Q = i.True;// refer to Q with a hierarchical reference initial Top.ebus.I = 0;// referring to i.I would not be legal because is not in modport mp endmodule 12.09.2020 в 08:07, des00 сказал: она работает как битовый вектор Тем не менее вложенный модуль понимает, что это структура, поскольку распознает её поля Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба Странный пример, особенно комментарии. Устарел я, не припомню такого в стандарте 2012, а другие я не читал. Пойду снова за парту, был не прав Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 11 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба Уточните для начала, что из SystemVerilog features поддерживается в конкретном Quartus'е. Точно известно, что далеко не все. Особенно из того, что на границе синтезируемого и несинтезируемого подмножеств языка (к чему можно отнести и интерфейсы). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Perdaculus 0 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба 6 часов назад, Raven сказал: Уточните для начала, что из SystemVerilog features поддерживается в конкретном Quartus'е. Точно известно, что далеко не все. Особенно из того, что на границе синтезируемого и несинтезируемого подмножеств языка (к чему можно отнести и интерфейсы). К сожалению, там не так подробно описывается поддержка: Скрытый текст Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 34 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба Приветствую! 2 minutes ago, Perdachillo said: К сожалению, там не так подробно описывается поддержка: Тогда остается только проверять на практике - кстати этот код в Modelsim работает так что скорее всего не поддерживается именно в Qu как и parameter type. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Perdaculus 0 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба 1 минуту назад, RobFPGA сказал: Приветствую! Тогда остается только проверять на практике - кстати этот код в Modelsim работает так что скорее всего не поддерживается именно в Qu как и parameter type. Удачи! Rob. Эхх.. В очередной раз убеждаюсь, что половина инструментов systemverilog не имеет смысла, если работаешь в Quartus. Не понимаю, что они ежегодно там обновляют. На днях пытался работать с массивами интерфейсов и оказалось, что размерность массива можно задавать только явно числом. Если попытаться задать размерность массива интерфейсов с помощью функции (я так часто делаю для задания размерности портов в объявлении портов модуля), то вылезает ошибка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба У нас на конторе специально для "поддержки" Systemverilog-ных фич купили лицензию. Вроде как Про версия (платная) уже поддерживает намного больше конструкций и не так глючит. Я конечно не проверял, но может так оно и есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Perdaculus 0 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба 4 минуты назад, Nick_K сказал: У нас на конторе специально для "поддержки" Systemverilog-ных фич купили лицензию. Вроде как Про версия (платная) уже поддерживает намного больше конструкций и не так глючит. Я конечно не проверял, но может так оно и есть. Как я понял, quartus prime pro поддерживает только 10 серии ПЛИС. Выходит, что помимо ПО надо ещё и платы обновить) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Nick_K 0 14 сентября, 2020 Опубликовано 14 сентября, 2020 · Жалоба 29 minutes ago, Perdachillo said: Как я понял, quartus prime pro поддерживает только 10 серии ПЛИС Есть такое. Опять же, я в вопрос не вникал, но может там фишка как раз в платной версии (не Про), что она может поддерживать расширенный набор функций Systemverilog. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться