Jump to content

    

SV modport иерархия

Здравствуйте, прошу помощи:

Возможно ли протаскивать сигналы через интерфейс с modport output в подмодуль, а после с modport input в подподмодуль? 

или другими словами - нужно чтоб в подмодуле возможно было изменять сигналы шины, при этом доходили до ПодПодмодуля. 

Причина использования modport - когда перешли на design partition quartus начал ругаться на неоднозначность направления портов 

Квартус дает ошибку: Error (10978): SystemVerilog error at test.sv(32): unknown type and interface type are not equivalent - equivalent types must have same number of bits

пример:

`timescale 1ns / 1ps
interface bus(
	input logic clk,
	input int x
	);
	int y;
	modport io(
		input clk,
		input x,
		output y
		);
	modport ii(
		input clk,
		input y,
		input x
		);
endinterface

/////////////////////SECOND_SUB
module second_sub(
	bus.ii bus_second,
	output int z
	);
	always_ff@(posedge bus.clk) z <= z + bus_second.x + bus_second.y;
endmodule

/////////////////////FIRST_SUB
module first_sub(
	bus.io bus_first
	);
	second_sub second_sub_inst(
		.bus_second(bus_first.ii),
		.z(z)
		);
	always_ff@(posedge bus_first.clk) bus_first.y <= z + bus_first.y;	
	 
endmodule

/////////////////////TOP
module top 
			(
			input logic clk,
			output logic out,
			input int x
			);	
	bus bus_top(
		.clk(clk),
		.x(x)
		);
	first_sub(
		.bus_first(bus_top.io)
		);
	always_ff@(posedge clk) 
		begin
		out <= bus_top.y[0];
		end
	

endmodule

 

Share this post


Link to post
Share on other sites

Я не сильно большой знаток, но  интерфейс это инкапсуляция уже существующих портов, а не сквозное декларирование и 2е - автор языка даже не упоминает об этой возможности, а он в своей книге по нескольку раз вдоль и поперёк проходит все всем возможным конструкциям. 

Share this post


Link to post
Share on other sites
On 8/30/2019 at 4:02 PM, lkg47 said:

interface bus(
  input logic clk,
  input int x
  );
	int y;

    modport io(
      input clk,
      input x,
      output y
      );

 

Во-первых так делать нельзя. То что у Вас объявлено в конструкции interface bus(...); уже априори относится к обоим модпортам. И в этом случае лучше всего оставить клок без всяких сигналов. а вот в Модпорт Вы указываете уже все конфигурируемые сигналы (т.е. там не должно быть клока, но должны быть другие сигналы, объявлённые ранее)

UPD: Во-первых так делать можно, но несколько неочевидно. В интерфейсе лучше всего оставить клок без всяких сигналов, а вот в Модпорт вынести все сигнали с объявлением направления и т.д.

Во-вторых ошибка типа:

On 8/30/2019 at 4:02 PM, lkg47 said:

unknown type and interface type are not equivalent

как-бы намекает, что у Вас не соответствуют типы сигналов. Возможно стоит явно указать что в интерфейсе все согналы типа logic. И не имея возможности посмотреть на какую строку коды ссылается ошибка - это всё гадание на кофейной гуще

В-третьих если используете модпорты - используйте только модпорты, если используете чистый интерфейс, то только чистый интерфейс. нельзя смешивать всё в кучу (я про код в топе):

On 8/30/2019 at 4:02 PM, lkg47 said:

bus bus_top(

либо же создайте ещё один модпорт, либо сделайте 2 интерфейса.

А вообще совет: идите от простого к сложному. Соберите сначала вложенные файлы с минимальным интерфейсом, потом нарастите до нужного объёма сигналов, потом подключайте в топ и т.д.

Share this post


Link to post
Share on other sites

Не согласен, модпорты как раз и есть часть интерфейса, ничего не запрещает клок собрать вместе с логикой, ошибок нет, кроме попыток продолжить использовать порты.

Share this post


Link to post
Share on other sites
12 minutes ago, lexx said:

Не согласен, модпорты как раз и есть часть интерфейса, ничего не запрещает клок собрать вместе с логикой, ошибок нет, кроме попыток продолжить использовать порты.

Извиняюсь, согласен. Не в тот Туториал посмотрел.

Share this post


Link to post
Share on other sites

 

On 8/30/2019 at 10:02 PM, lkg47 said:

Здравствуйте, прошу помощи:

Возможно ли протаскивать сигналы через интерфейс с modport output в подмодуль, а после с modport input в подподмодуль

Поправлю сам себя, только что попалось в статье. Вышеуказанная архитектура также возможна (я про интерфейс в внутрь иерархии), называется vertical interface topology, другой вариант - горизонтальная. Для этого нужно прописать дополнительный modport для нижнего уровня и так далее. 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this