Перейти к содержанию
    

Импорт типа данных из интерфейса

Всем привет. 
Пытаюсь передать параметризированную структуру между модулями и поскольку "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

В чем может быть ошибка?
Что странное, если во вложенном модуле я присваиваю структуре (которая в интерфейсе) значения, то ошибки не возникает. На мой взгляд не логичное поведение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

18 hours ago, Perdachillo said:

В чем может быть ошибка?

Что странное, если во вложенном модуле я присваиваю структуре (которая в интерфейсе) значения, то ошибки не возникает. На мой взгляд не логичное поведение

ошибка в нарушении стандарта, а присваивание работает, потому что структура упакована и она работает как битовый вектор, а дальше автоматические приведение разрядности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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 сказал:

она работает как битовый вектор

Тем не менее вложенный модуль понимает, что это структура, поскольку распознает её поля

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Странный пример, особенно комментарии. Устарел я, не припомню такого в стандарте 2012, а другие я не читал. Пойду снова за парту, был не прав

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Уточните для начала, что из SystemVerilog features поддерживается в конкретном Quartus'е. Точно известно, что далеко не все. Особенно из того, что на границе синтезируемого и несинтезируемого подмножеств языка (к чему можно отнести и интерфейсы).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 часов назад, Raven сказал:

Уточните для начала, что из SystemVerilog features поддерживается в конкретном Quartus'е. Точно известно, что далеко не все. Особенно из того, что на границе синтезируемого и несинтезируемого подмножеств языка (к чему можно отнести и интерфейсы).

К сожалению, там не так подробно описывается поддержка:

Скрытый текст

image.thumb.png.663309cb639da17a0283d55bee312423.png

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

2 minutes ago, Perdachillo said:

К сожалению, там не так подробно описывается поддержка:

Тогда остается только проверять на практике - кстати этот код в Modelsim работает  так что скорее всего не поддерживается именно в Qu как и  parameter type.

 

Удачи! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 минуту назад, RobFPGA сказал:

Приветствую!

Тогда остается только проверять на практике - кстати этот код в Modelsim работает  так что скорее всего не поддерживается именно в Qu как и  parameter type.

 

Удачи! Rob.

Эхх..
В очередной раз убеждаюсь, что половина инструментов systemverilog не имеет смысла, если работаешь в Quartus.  Не понимаю, что они ежегодно там обновляют.

На днях пытался работать с массивами интерфейсов и оказалось, что размерность массива можно задавать только явно числом. Если попытаться задать размерность массива интерфейсов с помощью функции (я так часто делаю для задания размерности портов в объявлении портов модуля), то вылезает ошибка. 
 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У нас на конторе специально для "поддержки" Systemverilog-ных фич купили лицензию. Вроде как Про версия (платная) уже поддерживает намного больше конструкций и не так глючит. Я конечно не проверял, но может так оно и есть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

4 минуты назад, Nick_K сказал:

У нас на конторе специально для "поддержки" Systemverilog-ных фич купили лицензию. Вроде как Про версия (платная) уже поддерживает намного больше конструкций и не так глючит. Я конечно не проверял, но может так оно и есть.

Как я понял, quartus prime pro поддерживает только 10 серии ПЛИС. Выходит, что помимо ПО надо ещё и платы обновить) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

29 minutes ago, Perdachillo said:

Как я понял, quartus prime pro поддерживает только 10 серии ПЛИС

Есть такое. Опять же, я в вопрос не вникал, но может там фишка как раз в платной версии (не Про), что она может поддерживать расширенный набор функций Systemverilog.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...