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

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

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

package parameters is

...

end parameters;

package body parameters is
end parameters;

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

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

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


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

55 minutes ago, EpLeon said:

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

Легко.

55 minutes ago, EpLeon said:

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

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

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


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

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

Quote

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

 

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


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

1 minute ago, R6L-025 said:

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

 

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

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


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

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

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


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

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;

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

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


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

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

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


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

Just now, R6L-025 said:

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

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

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


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

1 hour ago, EpLeon said:

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

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

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


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

27 minutes ago, EpLeon said:

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

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

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


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

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

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

 

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

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


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

2 hours ago, EpLeon said:

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

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

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

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

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


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

  

10 minutes ago, andrew_b said:

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

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

10 minutes ago, andrew_b said:

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

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

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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