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

Что значит такая конструкция на VHDL?

В комплекте поставки EDK 6.2 есть исходники макросов для построения процессорной системы, которые я пытаюсь конвертить в Verilog.

Ниже привожу фрагмент файла.

library IEEE;
use IEEE.std_logic_1164.all;

library channel_fifo_v1_00_a;
use channel_fifo_v1_00_a.all;
.........
 COUNTER_BIT0_I : entity channel_fifo_v1_00_a.address_counter_bit0(imp)
   port map
   (
     Clk          => Clk,                              -- in
     Rst          => Rst,                              -- in
     Count_In     => i_count_out(C_NUM_BITS-1),        -- in
     Load_In      => Load_In(C_NUM_BITS-1),            -- in
     Count_Load   => Count_Load,                       -- in
     Count_Down   => Count_Down,                       -- in
     Carry_In     => alu_cy(C_NUM_BITS),               -- in
     Clock_Enable => count_clock_en,                   -- in
     Result       => i_count_out(C_NUM_BITS-1),        -- out
     Carry_Out    => alu_cy(C_NUM_BITS-1)              -- out
   );

Конвертер ругается на строку, котороя начинается с "COUNTER_BIT0_I : entity ...", сообщение об ошибке следующее:

syntax error in line 144
     COUNTER_BIT0_I : entity <--
Returned token is 280

 

Теперь, собственно, два вопроса:

1) Для общего развития: что сия конструкция значит;

2) Каим образом это переделать в удобоваримую для X-HDL 3.2.44 форму.

Что думают по этому поводу многоуважаемые знатоки VHDL?

 

На всякий случай даю все исходники, содержащиеся в той папке.

fifo.rar

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


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

1) Для общего развития: что сия конструкция значит;

Это значит, что при instantiation'e надо использовать модуль address_counter_bit0 с архитектурным телом imp из библиотеки channel_fifo_v1_00_a. При этом декларация компонента в этом архитектурном теле не требуется.

2) Каим образом это переделать в удобоваримую для X-HDL 3.2.44 форму.

А он не поддерживает VHDL'93? Наверное, тогда надо использовать компонент "как обычно", т. е. сначала продекларировать, потом смапить.

Что думают по этому поводу многоуважаемые знатоки VHDL?

Очень шорошо думаю. :) Избавляет от необходимости декларировать не blackbox-компоненты.

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


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

Вкратце так.

 

Использование конструкции (instantiation of a design entity)

 

label: entity library_name.entity_name(architecture_name)

port map(...);

 

 

начиная с VHDL'93 избавляет от необходимости декларировать компоненты в том архитектурном теле, где они используются. Ведь интерфейс модуля entity_name, который находится в библиотеке library_name, уже известен. Зачем его еще раз описывать?

 

Это сильно сокращает объем кода. Но это не относится к черным ящикам, интерфейсы которых пока нигде не описаны.

 

Если опять не понятно, задавайте конкретные вопросы.

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


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

Спасибо за ликбез :)

Как я понял, чтобы конвертер не спотыкался, то интерфейс модуля "entity_name" (в моём случае это address_counter_bit0) нужно включить в начало этого файла. Если да - то какой именно фрагмент нужно скопировать, а какой удалить? (В начале темы есть архив, там содержание всей папки "channel_fifo_v1_00_a", в т.ч. "address_counter.vhd", на котором происходит затык, и "address_counter_bit0.vhd" с описаниями архитектуры).

 

ЗЫ:Прошу прощения за назойливость. У меня не было (да и щас нет) желания вникать в тонкости VHDL, да вот пришлось...

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


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

В файле address_counter.vhd после строки 128, в котрой написано

 

architecture imp of address_counter is

 

пишете:

component address_counter_bit0
-- сюда вставляете содержимое entity модуля address_counter_bit0
-- (файл address_counter_bit0.vhd, строки 89--99)
end component;

 

То же самое для address_counter_bit.

 

Затем в том же address_counter.vhd все подстроки

 

entity channel_fifo_v1_00_a.address_counter_bit0(imp)

 

(где мапятся эти компоненты) заменяете на просто address_counter_bit0.

То же самое для address_counter_bit.

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


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

Йессс! Получилось!

 

Ещё заменил:

COUNTER_BIT0_I : entity channel_fifo_v1_00_a.address_counter_bit0(imp)

на

COUNTER_BIT0_I : address_counter_bit0

и всё схавалось B)

 

Большое спасибо за пинок в нужном направлении. С меня бутылка конфет... ;)

 

--------------------------------------------------------------------------------------------

А вот сейчас почитал Ваш пост до конца, собсно там всё до конца расписано.

Изменено пользователем Vitёk

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


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

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

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

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

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

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

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

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

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

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