Jump to content

    
Perdachillo

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

Recommended Posts

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

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

Share this post


Link to post
Share on other sites
18 hours ago, Perdachillo said:

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

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

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

Share this post


Link to post
Share on other sites
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 сказал:

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
6 часов назад, Raven сказал:

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

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

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

image.thumb.png.663309cb639da17a0283d55bee312423.png

 

Share this post


Link to post
Share on other sites

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

2 minutes ago, Perdachillo said:

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

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

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
1 минуту назад, RobFPGA сказал:

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

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

 

Удачи! Rob.

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites
4 минуты назад, Nick_K сказал:

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

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

Share this post


Link to post
Share on other sites
29 minutes ago, Perdachillo said:

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.