|
Использование Интерфейсов SV в Quartus BlockDiagramFile |
|
|
|
Feb 7 2011, 10:00
|

Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 16-11-09
Из: Украина Юг
Пользователь №: 53 659

|
Не могу Сгенерировать Символ модуля если у него в портах используется Интрефейс СистемВерилога. Взялся за изучение системверилога. (до этого пользовал обычный). хочу использовать Интерфейсы в своём проекте. TOP проекта - bdf файл. ну т.е. блок-диаграм-файл. описал тестовый модуль вида: создаю один из текстовых фалйлов проекта *.sv module processor ( // main_bus interface port main_bus bus,
// other ports input logic clock, input logic resetN, ); // ... // module functionality codeendmoduleв итоге есть несколько модулей. проект компилируется нормально. НО! теперь при попытке сгенерировать "символ файл" мне пишется ошибка: Error (10016): Can't create symbol/include/instantiation/component file for module "processor" because port "bus" has an unsupported typeт.е. интерфейсы нельзя использовать при построении блок-схем или я что-то не так пользую? З.Ы. Quartus 10.1
Сообщение отредактировал bark - Feb 7 2011, 12:24
--------------------
Работаю 20ns в сутки.
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 29)
|
Feb 8 2011, 09:13
|

Гуру
     
Группа: Свой
Сообщений: 2 291
Регистрация: 21-07-05
Пользователь №: 6 988

|
пример обертки: CODE 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
) CODE 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 и схематиком непонятны так же, как поиск ручки подсоса в мерсе
|
|
|
|
|
Feb 8 2011, 09:50
|

Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 16-11-09
Из: Украина Юг
Пользователь №: 53 659

|
Спасибо за разъяснения. ещё вопрос: вот все эти параметры 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 - Feb 8 2011, 09:53
--------------------
Работаю 20ns в сутки.
|
|
|
|
|
Feb 8 2011, 10:45
|
Частый гость
 
Группа: Свой
Сообщений: 82
Регистрация: 16-03-09
Из: ex USSR
Пользователь №: 46 167

|
Цитата(bark @ Feb 8 2011, 11:20)  Как в текстовом виде по-людски удобно генерировать и вставлять меги типа PLL, памяти и т.п.? в блок диаграмме такие вещи вставляются удобно и понятно.
сейчас если мне надо использование такой меги в тексте, то я сначала вставлял её в блок диаграмму, потом правой кнопкой мыши на ней - OpenDesignsFile - там открывал сгенерированный верилоговский исходник и копипастил инстанцию сконфигурированной меги. Если вы нужную функцию генерите МегаВизардом, то делать вообще ничего не надо. Визард, наряду с bsf файлом для графики, генерит и готовые файлы для вставки уже сконфигурированных модулей в текстовые файлы. Если генерите мегафункции на Верилоге, то смотрите к примеру файлы, заканчивающиеся на _inst.v. Они, собственно говоря, для этого и предназначены - чтобы не надо было все параметры в общем файле прописывать.
|
|
|
|
|
Feb 8 2011, 12:29
|

Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 16-11-09
Из: Украина Юг
Пользователь №: 53 659

|
вобщем похоже что есть способ всё это скрестить. попробую использовать структукы 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 - Feb 8 2011, 13:11
--------------------
Работаю 20ns в сутки.
|
|
|
|
|
Mar 2 2011, 11:07
|

Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 16-11-09
Из: Украина Юг
Пользователь №: 53 659

|
Цитата(Krys @ Mar 2 2011, 10:45)  Мы тоже так пытались сделать. Правда, в Active-HDL и для Xilinx. Проблема в том, что шина может содержать в себе только сигналы одного направления. Т.е. либо все выходы либо все входы. А вот в интерфейс можно было запихивать сигналы любой направленности. В случае с шинами придётся делать отдельно шину на вход, шину на выход, что уже приводит к обрастанию связями. да есть такое. но в данном случае меня это полностью устраивает. мне как раз и надо блоки сигналов из одного модуля в другой передавать. под весом авторитетных мнений потихоньку буду пытаться отказываться от bdf.
--------------------
Работаю 20ns в сутки.
|
|
|
|
|
Mar 9 2011, 11:19
|

Частый гость
 
Группа: Свой
Сообщений: 131
Регистрация: 16-11-09
Из: Украина Юг
Пользователь №: 53 659

|
Цитата(Postoroniy_V @ Mar 9 2011, 10:28)  А как Вы опишете в графике generate, при чём на пару сотен модулей внутри?  никто ведь не запрещает использовать вложения bsf в bsf. у меня например прошлый проект был с очень развитой иерархией. ТОП, в нем несколько основных блоков, порты, PLL и как правило мультиплексоры для тестовых выводов. в основных разделах свои bsf со своим дальнейшим расширением. у них допустимо добавление параметров, поэтому меняющиеся разрядности шин при правильной организации проблемы не составляют. в итоге очень удобная и наглядная визуализация структуры проекта. минусы конечно тоже свои есть... но удобство в этом есть вполне определённое.
--------------------
Работаю 20ns в сутки.
|
|
|
|
|
Mar 10 2011, 04:59
|

Гуру
     
Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271

|
Цитата(Postoroniy_V @ Mar 10 2011, 06:52)  А если нужно не добавить разряд в шине, а добавить новую шину и вывести её с нижнего уровня на топ? перерисовывать всю иерархию так ведь? ну что ж ..очень удобно...главное при деле В коде это тоже не очень красиво и не очень быстро. Да и в графике не так трудно подправить один порт. У нас была необходимость выводить сигналы не напостоянно, а при отладке. Тогда мы, чтобы не переделывать графику, временно дописывали нужные порты прямо в коде. Когда отладка заканчивалась, достаточно было перегенерировать код из схемы - и всё возвращалось на пути своя. А чтобы выводить сигналы напостоянно - это нам не требовалось, т.к. в сложных проектах необходимо заранее продумывать интерфейсы стыков между блоками
--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
|
|
|
|
|
Mar 10 2011, 06:14
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Krys @ Mar 9 2011, 13:57)  Я вот себе не представляю, как бы без графики соединял огромное количество блоков на верхнем уровне друг с другом... Застрелиться... Это всё "детские" болезни.  Пройдёт. Цитата(Krys @ Mar 9 2011, 13:57)  Я для себя пока принял так: логику автомата описываю текстом на языке, а соединяю отдельные блоки всё равно в графике... Хоть какая-то наглядность... Когда модулей будет реально много, то никакой наглядности там не будет. Наглядность получается, когда можно выделить функционально законченные блоки и показать их связи, причём блоков должно быть в пределах десятка, иначе всё это "размывается", загромождается и сам чёрт ногу сломит. Поэтому куда реальнее набросать структурную схемку проекта (или его частей, которые этого заслуживают) в каком-нить редакторе вроде Visio, и по ней уже писать код. А в Top'е просто описать межсоединения модулей. Только делать это аккуратно, с отступами. И, кстати, поиск (и замену) в тексте делать куда удобнее и средства для этого более развитые.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 10 2011, 07:30
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792

|
Цитата(des00 @ Mar 10 2011, 09:29)  а уж до чего ляпота смотреть в системе контроля версий кто и что делал %) Не вижу проблем смотреть то же самое для графики. Средства Mentor типа HDL Designer позволяют это делать. Осталось дождаться нормальной графики для SV. Ох не люблю я холивары, но всё же... Для себя остановился на таком подходе - верхний уровень иерархии - всегда графика. Кол-во блоков на верхнем уровне должно соответствовать структурной схеме конфигурации ПЛИС. Далее - на усмотрение разработчиков этих блоков. При правильном структурированном подходе глубина иерархии 12 - не так уж и страшно.
--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
|
|
|
|
|
Mar 11 2011, 07:39
|
Знающий
   
Группа: Свой
Сообщений: 572
Регистрация: 17-11-05
Из: СПб, Россия
Пользователь №: 10 965

|
Цитата(Krys @ Mar 10 2011, 06:09)  Это пока единственный минус, который нам реально мешает. Хотя генерэйт на верхних уровнях обычно не требуется. Т.к. описывает просто соединение блоков, а не их поведение. Если действительно хочется generate в графике, то посмотрите на HDL Designer - он позволяет делать if generate и loop generate специальными рамочками. Изврат редкий, но работает ;-) Мне вот реально не хватает в графике (как квартуса, так и HDL Designer) возможности комментирования. Не в смысле написать поясняющий текст, а в плане "закомментировать" участок кода (картинки), так, чтобы она никак не обрабатывалась синтезатором, но была легко доступна при необходимости.
|
|
|
|
|
Mar 11 2011, 13:03
|
Местный
  
Группа: Свой
Сообщений: 375
Регистрация: 9-10-08
Из: Таганрог, Ростовская обл.
Пользователь №: 40 792

|
Цитата(alexadmin @ Mar 11 2011, 10:39)  Если действительно хочется generate в графике, то посмотрите на HDL Designer - он позволяет делать if generate и loop generate специальными рамочками. Изврат редкий, но работает ;-)
Мне вот реально не хватает в графике (как квартуса, так и HDL Designer) возможности комментирования. Не в смысле написать поясняющий текст, а в плане "закомментировать" участок кода (картинки), так, чтобы она никак не обрабатывалась синтезатором, но была легко доступна при необходимости. Странный пост. Вы же сами написали, что " HDL Designer - он позволяет делать if generate и loop generate специальными рамочками. " Вот возьмите, обведите картинку рамочкой и поставьте IF const_1 = 0 GENERATE . Вот вам и комментирование участка кода. Нередко, для того, чтобы сделать универсальный IP блок необходимо по пол схемы через if generate делать. И ничего. А если кому-то понадобится чистый код - он генерится автоматом. Вообще вопрос удобства настолько индивидуален, что спорить об этом бесполезно. Лучше делиться тонкостями работы с тем или иным САПРом.
--------------------
Глупцы игнорируют сложность. Прагматики терпят ее. Некоторые могут избегать ее. Гении ее устраняют.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|