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

Использование Интерфейсов SV в Quartus BlockDiagramFile

Не могу Сгенерировать Символ модуля если у него в портах используется Интрефейс СистемВерилога.

 

Взялся за изучение системверилога. (до этого пользовал обычный).

хочу использовать Интерфейсы в своём проекте.

 

TOP проекта - bdf файл. ну т.е. блок-диаграм-файл.

 

описал тестовый модуль вида:

 

создаю один из текстовых фалйлов проекта *.sv

 

module processor (

//
main_bus interface port

main_bus bus,

 

//
other ports

input logic
clock,

input logic
resetN,

);

// ... // module functionality code

endmodule

 

в итоге есть несколько модулей. проект компилируется нормально.

 

НО!

 

теперь при попытке сгенерировать "символ файл" мне пишется ошибка:

Error (10016): Can't create symbol/include/instantiation/component file for module "processor" because port "bus" has an unsupported type

 

т.е. интерфейсы нельзя использовать при построении блок-схем или я что-то не так пользую?

 

З.Ы. Quartus 10.1

Изменено пользователем bark

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


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

Никто не сталкивался или непонятен вопрос? =\

 

Вобщем конечная цель - уменьшить количество соединений в БлокДиаграмме групированием логически связанных между собой сигналов.

 

Может для этого есть более удобный и понятный инструментарий чем интерфейсы? посоветуйте...

иначе проект станет очень неудобным из-за стремительного обрастания сигналами. =\ а я до этого доводить не хочу.

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


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

Делайте лучше топ проекта в текстовом виде.

Иначе, когда количество блоков в нем будет больше десятка-двух, замучаетесь графические связи рисовать, даже для интерфейсов. Особенно когда сигналы идут сразу в несколько блоков.

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

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


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

Но вопрос остаётся открытым. как сделать чтобы генерировало модули с интерфейсами?

 

Как в текстовом виде по-людски удобно генерировать и вставлять меги типа PLL, памяти и т.п.?

в блок диаграмме такие вещи вставляются удобно и понятно.

 

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

Изменено пользователем bark

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


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

Как в текстовом виде по-людски удобно генерировать и вставлять меги типа PLL, памяти и т.п.?

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

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


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

обертка? в смысле мега так и вставляется в bdf а потом не переносится целиком, а переподключается в тексте то что сгенерировало в bdf?

а память... я предпочитаю в явном виде указывать её использование. а не оставлять на волю оптимизатора.

 

Судя по всему ответа на вопрос нет. точнее он отрицательный. по крайней мере так говорят на форуме альтеры.

Изменено пользователем bark

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


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

пример обертки:

module scfifo_wrapper
#(parameter depth_log = 9, dw = 12, showahead = "ON")
(
   input   aclr,
   input   clock,
   input   [dw-1:0] data,
   input   rdreq,
   input   wrreq,
   output  [dw-1:0] q
);
scfifo  scfifo_component
(
   .aclr(aclr),
   .clock(clock),
   .data(data),
   .rdreq(rdreq),
   .wrreq(wrreq),
   .q(q),
   .almost_empty(),
   .almost_full(),
   .empty(),
   .full(),
   .sclr(),
   .usedw()
);
defparam
   scfifo_component.add_ram_output_register = "OFF",
   scfifo_component.intended_device_family = "Cyclone III",
   scfifo_component.lpm_numwords = 2**depth_log,
   scfifo_component.lpm_showahead = showahead,
   scfifo_component.lpm_type = "scfifo",
   scfifo_component.lpm_width = dw,
   scfifo_component.lpm_widthu = depth_log,
   scfifo_component.overflow_checking = "ON",
   scfifo_component.underflow_checking = "ON",
   scfifo_component.use_eab = "ON";
endmodule

пример памяти (смотрите в квартус-хендбуке главу Recommended HDL Coding Styles

)

module sc_wr_ram
#(parameter num_words = 256, dw = 8)
(
   input   clk,
   input   [dw-1:0] d,
   input   [$clog2(num_words)-1:0] write_address,
   input   [$clog2(num_words)-1:0] read_address,
   output  reg [dw-1:0] q,
   input   we
);
localparam  aw = $clog2(num_words);
reg [dw-1:0] mem [2**aw-1:0];
integer i;
initial begin
for (i = 0; i < 2**aw; i++)
   mem[i] = '0;
end
always_ff @(posedge clk)
begin
   if (we)
       mem[write_address] = d;
   q = mem[read_address];
end
endmodule

ваши сомнения насчет оптимизатора напрасны, все документировано. метания между интерфейсами в SV и схематиком непонятны так же, как поиск ручки подсоса в мерсе

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


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

Спасибо за разъяснения.

ещё вопрос:

вот все эти параметры scfifo.. откуда их брать? сами строки

 

defparam

scfifo_component.add_ram_output_register = "OFF",

scfifo_component.intended_device_family = "Cyclone III",

scfifo_component.lpm_numwords = 2**depth_log,

scfifo_component.lpm_showahead = showahead,

scfifo_component.lpm_type = "scfifo",

scfifo_component.lpm_width = dw,

scfifo_component.lpm_widthu = depth_log,

 

это надо просто знать или где-то заготовки есть?

 

я это похоже тоже где-то упустил.

 

 

а по поводу схематика...

он ведь предоставляет хорошую графическую наглядность проекта и его иерархии.

интерфейсы позволяют уменьшить количество ненужных подключений.. вроде ничего никому не противоречит и должно жить в гармонии )

Изменено пользователем bark

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


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

это надо просто знать или где-то заготовки есть?

параметры описываются в ug на соотв. мегафункцию. если скопипастить надо - сгенерите 1 раз визардом и скопируйте. на сложных корках, правда, этот номер не прокатит

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


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

Как в текстовом виде по-людски удобно генерировать и вставлять меги типа PLL, памяти и т.п.?

в блок диаграмме такие вещи вставляются удобно и понятно.

 

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

 

Если вы нужную функцию генерите МегаВизардом, то делать вообще ничего не надо. Визард, наряду с bsf файлом для графики, генерит и готовые файлы для вставки уже сконфигурированных модулей в текстовые файлы.

 

Если генерите мегафункции на Верилоге, то смотрите к примеру файлы, заканчивающиеся на _inst.v. Они, собственно говоря, для этого и предназначены - чтобы не надо было все параметры в общем файле прописывать.

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


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

вобщем похоже что есть способ всё это скрестить.

 

попробую использовать структукы struct.

выполняет похожую функцию с некоторыми ограничениями.

 

на выходе из модуля собирать всё в шину суммарной ширины.

на входе модуля-потребителя снова разбивать в аналогичную структуру для сохранения удобства пользования.

struct {
  logic    [7:0]     adr;
  logic    [15:0]    data;
  logic              rd;
  logic              wr;
    } bus;

wire [25:0] bus_out    = { bus.data, bus.adr, bus.rd, bus.wr };

 

можно конечно и без всяких структур и интерфейсов собирать сигналы в шины а потом распаковывать.. но всё же думаю так удобное.

Изменено пользователем bark

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


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

вобщем похоже что есть способ всё это скрестить....

мыши плакали, кололись, но продолжали жрать кактус (с)

 

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

 

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


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

вобщем похоже что есть способ всё это скрестить.

 

попробую использовать структукы struct.

выполняет похожую функцию с некоторыми ограничениями.

 

на выходе из модуля собирать всё в шину суммарной ширины.

на входе модуля-потребителя снова разбивать в аналогичную структуру для сохранения удобства пользования.

можно конечно и без всяких структур и интерфейсов собирать сигналы в шины а потом распаковывать.. но всё же думаю так удобное.

Мы тоже так пытались сделать. Правда, в Active-HDL и для Xilinx. Проблема в том, что шина может содержать в себе только сигналы одного направления. Т.е. либо все выходы либо все входы. А вот в интерфейс можно было запихивать сигналы любой направленности. В случае с шинами придётся делать отдельно шину на вход, шину на выход, что уже приводит к обрастанию связями.

 

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


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

Мы тоже так пытались сделать. Правда, в Active-HDL и для Xilinx. Проблема в том, что шина может содержать в себе только сигналы одного направления. Т.е. либо все выходы либо все входы. А вот в интерфейс можно было запихивать сигналы любой направленности. В случае с шинами придётся делать отдельно шину на вход, шину на выход, что уже приводит к обрастанию связями.

 

да есть такое.

но в данном случае меня это полностью устраивает.

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

 

под весом авторитетных мнений потихоньку буду пытаться отказываться от bdf.

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


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

под весом авторитетных мнений потихоньку буду пытаться отказываться от bdf.
Я вот себе не представляю, как бы без графики соединял огромное количество блоков на верхнем уровне друг с другом... Застрелиться... Я для себя пока принял так: логику автомата описываю текстом на языке, а соединяю отдельные блоки всё равно в графике... Хоть какая-то наглядность...

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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