Jump to content
    

Параметризация в Verilog

что ква написал, я понял. не обратил на это внимания т.к. линейный порт работал без объявления ff2

 

Это потому, что Квартус смысла не увидел в вашем описании. (константы на выход).

А по сути, без путей к файлам других проектов и на AHDL ничего не получиться.

Share this post


Link to post
Share on other sites

че-то я так и не разобрался с двумерными портами. если есть время гляньте пжлст в архиве проект квартуса "test_b". там 5 строк. не знаю, как исправить ошибку

proj.7z

Share this post


Link to post
Share on other sites

че-то я так и не разобрался с двумерными портами. если есть время гляньте пжлст в архиве проект квартуса "test_b". там 5 строк. не знаю, как исправить ошибку

подключение к sv модулю, ahdl модуля через include???

`include "D:\proj\test_a\test_a.tdf"

module test_b
    (
    Wd,
    k
    );
input [0:7] Wd [2:0];
output [0:7] k [2:0];

test_a tst(
            .Wd(Wd),
            .k(k)
            );
endmodule

грандиозно %)))

Share this post


Link to post
Share on other sites

я про то и писал до этого. если, его не указывать, то ругается на двумерный порт. посмотрите 18 и 19 сообщения на 2 странице. поэтому и прописал, кст. как можно это запустить и возможно ли вообще?

Share this post


Link to post
Share on other sites

я про то и писал до этого. если, его не указывать, то ругается на двумерный порт. посмотрите 18 и 19 сообщения на 2 странице. поэтому и прописал, кст. как можно это запустить и возможно ли вообще?

Вы меня озадачиваете по многим пунктам :wacko: :

1. Вы действительно не поняли, в чем была ошибка реализации в ваших сообщениях 18 и 19 и по прежнему наступаете на те же грабли?

2. В своем коде вы не знаете/не догадываетесь во что разворачивается AHDL запись вида a[4..2][3..1], но при этом это не мешает вам присваивать это не упакованному массиву, свойство которого, как я надеюсь вы знаете.

3. В своем коде вы подключаете AHDL файл как include файл для синтезатора с языка SV, без всякой задней мысли о том, что SV может не знать об AHDL

4. Не догадываетесь состыковать файлы на разных языках описания, в квартусе, в пределах одного компилятора нельзя, и это можно сделать только после синтеза модулей. И тут могут быть проблемы совместимости интерфейсов модулей написанных на разных языка.

 

Ну и последнее, после всего этого, вы утверждаете, что синтез двумерных портов очень плохо реализован в квартусе??? :cranky: Мой вам совет либо разберитесь по учебникам что это такое и с чем это едят, либо не используйте многомерные порты вообще.

Share this post


Link to post
Share on other sites

1) сообщение 19 Ваше) после него был приписан инклюд. Знама, что нужно указывать верилоговский файл

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

3) про это я и спрашивал. это возможно вообще указать?

4) вообще никак состыковать?

 

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

 

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

 

загадочное "это" - это что?

 

ЗЫ: очень важен ответ на 4 пункт. если "можно", то был бы рад увидеть исправленный вариант

Share this post


Link to post
Share on other sites

4. Не догадываетесь состыковать файлы на разных языках описания, в квартусе, в пределах одного компилятора нельзя, и это можно сделать только после синтеза модулей. И тут могут быть проблемы совместимости интерфейсов модулей написанных на разных языка.

 

Проблемы совместимости интерфейсов, безусловно, возникать могут, но так уж строго говорить о невозможности состыковать файлы на разных языках описания нельзя. Для языков с поддержкой декларации модуля (SV и VHDL) некоторые ситуации вполне разрешимы и без раздельного синтеза.

 

Пример stu решается так:

extern module test_a( input [7:0] Wd[2:0], output [7:0] k[2:0]);

module test_b
    (
    Wd,
    k
    );
input [7:0] Wd[2:0];
output [7:0] k[2:0];

test_a tst(
            .Wd(Wd),
            .k(k)
            );
endmodule

 

Только не забудьте в Project->Add/Remove Files in Project добавить в список файлов test_a.tdf из другого проекта.

 

proj.rar

 

Share this post


Link to post
Share on other sites

Проблемы совместимости интерфейсов, безусловно, возникать могут, но так уж строго говорить о невозможности состыковать файлы на разных языках описания нельзя. Для языков с поддержкой декларации модуля (SV и VHDL) некоторые ситуации вполне разрешимы и без раздельного синтеза.

да, как то забыл про экстерн. т.к. не использую его никогда, ИМХО лучше врапер, чем потом искать что к чему, наелся в свое время, больше не хочу.

 

ЗЫ. несмотря на то, что квартус съел ваше описание, налицо нарушение стандарта, присвоение упакованного массива, к неупакованному массиву. По стандарту это НЕ допускается, хотя квартус часто закрывает глаза на стандарт (при этом от версии к версии это закрытие может быть разным, тоже в свое время наелся с этим).

 

ЗЗЫ. AHDL массивы вида a[4..2][3..1] в AHDL это именно упакованные массивы, т.к.

Quartus Help

Example of Dual-Range Group Names   
--------------------------------------------------------------------------------
The dual-range group a[4..2][3..1] is equivalent to the following groups:

(a4_[3..1], a3_[3..1], a2_[3..1])

(a4_3, a4_2, a4_1, a3_3, a3_2, a3_1, a2_3, a2_2, a2_1)

 

ЗЗЗЫ. ну и судя по стандарту IEEE-1800-2009 раздел 7.4.5 Multidimensional arrays, по идее, для корретного отображения, нужно было указывать input [2:0][7:0] Wd, output [2:0][7:0] k. Так что, такие выверты, на свой страх и риск.

Share this post


Link to post
Share on other sites

Пример stu решается так:

extern module test_a( input [7:0] Wd[2:0], output [7:0] k[2:0]);

 

спасибо огромное за конкретный ответ на конкретный вопрос, а не загон про то, "как наши корабли бороздят просторы вселенной"!!!

Share this post


Link to post
Share on other sites

спасибо огромное за конкретный ответ на конкретный вопрос, а не загон про то, "как наши корабли бороздят просторы вселенной"!!!

отстутствие желания научиться логически осмысливать свои действия при выполнении работы ваше право. подождем темы на форуме вида : "что делать квартус переворачивает шину/обрезает биты", "что делать при смене версии проект не работает" или что-то другое в этом роде, как програмерская фишка ляжет.

Share this post


Link to post
Share on other sites

можно годами осмысливать, если не знать описанный выше метод. и результата все равно не будет. по поводу корректности указывания портов, полностью Вам верю, т. к. на AHDL описывал 3-4 маленьких проекта и все

Edited by stu

Share this post


Link to post
Share on other sites

ЗЫ. несмотря на то, что квартус съел ваше описание, налицо нарушение стандарта, присвоение упакованного массива, к неупакованному массиву. По стандарту это НЕ допускается, хотя квартус часто закрывает глаза на стандарт (при этом от версии к версии это закрытие может быть разным, тоже в свое время наелся с этим).

 

ЗЗЫ. AHDL массивы вида a[4..2][3..1] в AHDL это именно упакованные массивы, т.к.

Quartus Help

Example of Dual-Range Group Names   
--------------------------------------------------------------------------------
The dual-range group a[4..2][3..1] is equivalent to the following groups:

(a4_[3..1], a3_[3..1], a2_[3..1])

(a4_3, a4_2, a4_1, a3_3, a3_2, a3_1, a2_3, a2_2, a2_1)

 

ЗЗЗЫ. ну и судя по стандарту IEEE-1800-2009 раздел 7.4.5 Multidimensional arrays, по идее, для корретного отображения, нужно было указывать input [2:0][7:0] Wd, output [2:0][7:0] k. Так что, такие выверты, на свой страх и риск.

 

Я бы не сказал, что из Квартусовского хелпа следует, что массивы AHDL - упакованные массивы в понимании SV. Ведь в AHDL это даже и массивом не называется - называется группой: "Symbolic names and ports of the same type can be declared and used as groups ... A group is treated as a collection of nodes and acted on as a single unit."

 

У Квартуса есть фишка - он числа в конце имени интерпретирует как индексы массива. Есть так же оператор объединения в группу. Но объединение в группу не означает упаковку в трактовке SV. В хелпе просто показано соответствие индексов массива позиции в операторе объединения в группу и не более того. Кстати в учебниках по SV есть примеры такого же рода. Например когда Вы объявляете смешанный массив [7:0]A[2:0], то обращаясь к его элементам Вы не пишете B <= A[k], Вы пишете B <= A[k] и вот примеры разъясняют какие индексы идут в начале, а какие в конце.

 

Кроме того, межязыковое взаимодействие стандартом SV вообще не определено. Я лишь указал, что есть внешний модуль с таким-то именем и такими-то портами. И когда я подключал к этому модулю свои сигналы я не "соединял" неупакованный массив с упакованным. Поэтому стандарт не нарушен и Квартус глаза тут ни на что не закрывал - Квартус нашел модуль с указанным именем и подходящими портами. То что порты test_a на AHDL он интерпретирует не так строго, как SV так это право Квартуса - еще раз повторю, что в AHDL нет понятия упакованного и не упакованного массива. Квартус в данном случае имеет полное право, считать, что SV-кие input [2:0][7:0] Wd, input [7:0]Wd[2:0], input Wd[2:0][7:0] и AHDL-кие Wd[2..0][7..0]: input - есть одно и тоже.

 

То, что в дальнейших версиях Квартуса все может поменяться, то это правда, хотя и маловероятная :) Но так обычно стыковку модулей на разных языках выполняют не из прихоти, а по необходимости (особенно, когда речь идет о AHDL), то вопрос как состыковать "здесь и сейчас" стоит острее, чем вопрос как сделать это на все случаи жизни, версии синтезаторов и т.д.

 

 

Share this post


Link to post
Share on other sites

... ИМХО лучше врапер, ...

я пару раз видел на форуме это слово и определение смотрел) а конкретно не знаю, что это. к данному проекту как его описать, можете подсказать?

Share this post


Link to post
Share on other sites

я пару раз видел на форуме это слово и определение смотрел) а конкретно не знаю, что это. к данному проекту как его описать, можете подсказать?

 

Так test_b и есть тот самый врапер для test_a :)

 

Врапер это просто обертка, которая служит прослойкой между оригинальным модулем и тем в который его "впихнуть" надо. Как правило, выполняет преобразование типов сигналов, может выполнять простейшие операции или подавать константы на "лишние" входы.

 

Например, у Вас в модуле есть отдельно строб чтения (RD) и записи (WR), а Вася написал модуль, который имеет вход направления (DIR) и строб выполнения операции (STRB). Просто так использовать васин модуль не получится т.к. напрямую RD и WR подключить к DIR/STRB не выйдет. Вот чтобы нигде ничего не переделывать пишут врапер, который выполнит преобразование RD/WR в DIR/STRB. Или есть модуль со входами A[7:0], B[7:0], C[7:0], D[7:0], E[7:0], а Вы захотели двумерные массивы использовать. Опять же пишите врапер со входом X[4:0][7:0] где всего-навсего Х "раздаете" на A, B, C, D и E.

 

Для данной темы, на мой взгляд, врапер ситуацию никак не меняет т.к. все равно нужно состыковать AHDL с SV и все равно врапер будет реализован так же как test_b и все равно, по мнению des00, будет конструкция "на свой страх и риск".

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.

×
×
  • Create New...