Jump to content

    
Sign in to follow this  
lkg47

SV modport иерархия

Recommended Posts

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

Возможно ли протаскивать сигналы через интерфейс с 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

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.

Sign in to follow this