Jump to content
    

Параметризация проекта на Verilog

Добрый всем день. Может кто-нибудь подсказать, как сделать под Verilog-ом файл с параметрами на подобии VHDL-ного:

package parameters is

...

end parameters;

package body parameters is
end parameters;

Чтобы можно было пользоваться одними и теми же константами (параметрами) в разных модулях/файлах проектах.

И еще вопрос, как можно в одном проекте (работаю под Xilinx ISE 14.7) совместить модули написанные на разных языках (VHDL и Verilog)? Головной файл VHDL, но в нем надо вызывать модули написанные на Verilog.

Share this post


Link to post
Share on other sites

55 minutes ago, EpLeon said:

И еще вопрос, как можно в одном проекте (работаю под Xilinx ISE 14.7) совместить модули написанные на разных языках (VHDL и Verilog)?

Легко.

55 minutes ago, EpLeon said:

Головной файл VHDL, но в нем надо вызывать модули написанные на Verilog.

Никаких проблем.

Share this post


Link to post
Share on other sites

3 minutes ago, andrew_b said:

Легко.

Никаких проблем.

Очень информативный ответ.

Share this post


Link to post
Share on other sites

Сделать обычный файл с объявлением парметров и заинклюдить его в нужных местах. На SV я в отдельном файле package делал и так же подключал через import в нужных файлах

Quote

Чтобы можно было пользоваться одними и теми же константами (параметрами) в разных модулях/файлах проектах

 

Share this post


Link to post
Share on other sites

1 minute ago, R6L-025 said:

Сделать обычный файл с объявлением парметров и заинклюдить его в нужных местах. На SV я в отдельном файле package делал и так же подключал через import в нужных файлах

 

Спасибо. Но вопрос про Verilog. Как это сделать в SV, я тоже знаю. Просто ISE не поддерживает SV.

Share this post


Link to post
Share on other sites

Так инклюдами же. Они в обычном Verilog есть. В файле через define определяем параметры, например, `define MY_DEF 42, и инклюдим через `include "path/to//file"

Share this post


Link to post
Share on other sites

8 minutes ago, R6L-025 said:

Так инклюдами же. Они в обычном Verilog есть. В файле через define определяем параметры, например, `define MY_DEF 42, и инклюдим через `include "path/to//file"

Я пытался сделать вот так, создав файл Eth_parameters:
 

    `define Eth_WORD_WIDTH                                = 16;

    `define ETH_HEADER_LENGTH                            = 14;
    `define IP_HEADER_LENGTH                                = 20;
    `define UDP_HEADER_LENGTH                            = 8;
    `define OPCODE_LENGTH                                    = 2;

А потом в коде модулей:

module Eth_ext_pkt (
//-----------------------------------------------------------------------------
// Libraries
//-----------------------------------------------------------------------------
`include "Eth_parameters.v"
//---------------------------------------------------------------

И потом в самом модуле использовать переменные с верхним апострофом (например `Eth_WORD_WIDTH):

//-----------------------------------------------------------------------------
// Signal declarations
//-----------------------------------------------------------------------------
    wire                                      RxByte_Cnt_sclr;
    wire [`RxByte_Cnt_Width_ext:0]  		  RxByte_Cnt_o;
    wire [`Eth_WORD_WIDTH-1:0]				RxByte_Cnt_Reg_o;
    wire                                      RAM_Overflow;
    wire                                      RAM_Overflow_SRFF_o;

Но синтаксическая проверка ругается на это... Что я тут делаю не правильно?

Share this post


Link to post
Share on other sites

знака "=" не должно быть, и ";" в конце тоже уберите. Ну и путь в `include <...> должен быть понятным синтезатору. В квартусе у меня пути идут относительно  директории где лежит файл проекта квартуса

Share this post


Link to post
Share on other sites

Just now, R6L-025 said:

знака "=" не должно быть. Ну и путь в `include <...> должен быть понятным синтезатору. В квартусе у меня пути идут относительно  директории где лежит файл проекта квартуса

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

Share this post


Link to post
Share on other sites

1 hour ago, EpLeon said:

Очень информативный ответ.

Вы сами попробовали что-нибудь сделать? У вас не получилось? Какие ошибки выдаёт синтезатор?

Share this post


Link to post
Share on other sites

27 minutes ago, EpLeon said:

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

Чтобы  синтезатор или сим нашел эти include файлы надо при запуске сима/синтеза соотв. ключами указывать путь поиска  к папкам где эти файлы лежат

Share this post


Link to post
Share on other sites

14 hours ago, R6L-025 said:

знака "=" не должно быть, и ";" в конце тоже уберите. Ну и путь в `include <...> должен быть понятным синтезатору. В квартусе у меня пути идут относительно  директории где лежит файл проекта квартуса

Попробовал. Убрал знаки "=" и ";" в файле параметров и в модуле прописал полный путь до него. Появилась синтаксическая ошибка на вот такую запись:

    wire [`RxByte_Cnt_Width_ext:0]     RxByte_Cnt_o;
ERROR:HDLCompilers:26 - "../LIB/Ethernet/Verilog/Eth_ext_pkt.v" line 89 unexpected token: 'integer'
ERROR:HDLCompilers:26 - "../LIB/Ethernet/Verilog/Eth_ext_pkt.v" line 89 expecting ':', found ')'

И данная параметризация нужна для синтеза, если это важно.

13 hours ago, andrew_b said:

Вы сами попробовали что-нибудь сделать? У вас не получилось? Какие ошибки выдаёт синтезатор?

Да, пробовал. Да, не получилось - иначе бы и не просил помощи! Одни и те же на разные подключаемые модули:

Например, на вот такой модуль:

    Eth_Rx_DDR: entity work.Rx_DDR_Buff
    port map (
                    ...
    );

Выдает вот такую ошибку:

ERROR:HDLParsers:709 - ".../Main.vhd" Line 593. Rx_DDR_Buff is not an entity name

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

 

Edited by EpLeon

Share this post


Link to post
Share on other sites

2 hours ago, EpLeon said:

Да, пробовал. Да, не получилось

С этого и надо начитать: делал то и это, получил то и это. В ваших же интересах предоставить максимум информации сразу, не дожидаясь дополнительных вопросов. Рекомендую прочитать HOWTO :: Как правильно задавать вопросы.

2 hours ago, EpLeon said:
Rx_DDR_Buff is not an entity name

Да, direct instantiation не работает. Используйте дедовский способ с предварительной декларацией компонента.

Share this post


Link to post
Share on other sites

  

10 minutes ago, andrew_b said:

С этого и надо начитать: делал то-то и то-то, получил то-то и то-то. В ваших же интересах предоставить максимум информации сразу, не дожидаясь дополнительных вопросов. Рекомендую прочитать HOWTO :: Как правильно задавать вопросы.

Ну, честно говоря... на мой взгляд это как-то очевидно, что надо сначала попробовать самому разобраться (примеры в инете, книги и поэкспериментировать с кодом), а потом уже задавать вопросы и приставать к людям. Поэтому и не писал, что это все проделал.

10 minutes ago, andrew_b said:

Да, direct instantiation не работает. Используйте дедовский способ с предварительной декларацией компонента.

Не очень понял. Я не так давно начал писать на Verilog-е. До этого писал на AHDL. Не могли бы более детально объяснить с примером?

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...