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

use entity - что означает?

Вопрос следующий. В ActiveHDL создается электрическая схема, в которую вставляется элемент, представляющий собой кор, сгенеренный коргенератором. После компиляции схемы в получившемся VHDL файле появляется вот такая строка

for DATA_FROM_RAM_FIFO : async_fifo_32bits_deph1024_bram_001 use entity ip_cores.async_fifo_32bits_deph1024_bram_001(async_fifo_32bits_deph1024_bram_001

_a);

 

Кто нибудь может точно объяснить что это означает.

 

Сам элемент, когда ставится на схему, в отдельном VHDL файле выглядит так:

 

LIBRARY ieee;
USE ieee.std_logic_1164.ALL;
-- synthesis translate_off
Library XilinxCoreLib;
-- synthesis translate_on
ENTITY async_fifo_32bits_deph1024_bram_001 IS
    port (
    din: IN std_logic_VECTOR(31 downto 0);
    rd_clk: IN std_logic;
    rd_en: IN std_logic;
    rst: IN std_logic;
    wr_clk: IN std_logic;
    wr_en: IN std_logic;
    almost_full: OUT std_logic;
    dout: OUT std_logic_VECTOR(31 downto 0);
    empty: OUT std_logic;
    full: OUT std_logic;
    prog_full: OUT std_logic;
    valid: OUT std_logic);
END async_fifo_32bits_deph1024_bram_001;

ARCHITECTURE async_fifo_32bits_deph1024_bram_001_a OF async_fifo_32bits_deph1024_bram_001 IS
-- synthesis translate_off
component wrapped_async_fifo_32bits_deph1024_bram_001
    port (
    din: IN std_logic_VECTOR(31 downto 0);
    rd_clk: IN std_logic;
    rd_en: IN std_logic;
    rst: IN std_logic;
    wr_clk: IN std_logic;
    wr_en: IN std_logic;
    almost_full: OUT std_logic;
    dout: OUT std_logic_VECTOR(31 downto 0);
    empty: OUT std_logic;
    full: OUT std_logic;
    prog_full: OUT std_logic;
    valid: OUT std_logic);
end component;

-- Configuration specification 
    for all : wrapped_async_fifo_32bits_deph1024_bram_001 use entity XilinxCoreLib.fifo_generator_v3_3(behavioral)
        generic map(
            c_rd_freq => 100,
            c_wr_response_latency => 1,
            c_has_srst => 0,
            c_has_rd_data_count => 0,
            c_din_width => 32,
            c_has_wr_data_count => 0,
            c_implementation_type => 2,
            c_family => "virtex2",
            c_has_wr_rst => 0,
            c_wr_freq => 100,
            c_underflow_low => 0,
            c_has_meminit_file => 0,
            c_has_overflow => 0,
            c_preload_latency => 0,
            c_dout_width => 32,
            c_rd_depth => 512,
            c_default_value => "BlankString",
            c_mif_file_name => "BlankString",
            c_has_underflow => 0,
            c_has_rd_rst => 0,
            c_has_almost_full => 1,
            c_has_rst => 1,
            c_data_count_width => 9,
            c_has_wr_ack => 0,
            c_use_ecc => 0,
            c_wr_ack_low => 0,
            c_common_clock => 0,
            c_rd_pntr_width => 9,
            c_has_almost_empty => 0,
            c_rd_data_count_width => 9,
            c_enable_rlocs => 0,
            c_wr_pntr_width => 9,
            c_overflow_low => 0,
            c_prog_empty_type => 0,
            c_optimization_mode => 0,
            c_wr_data_count_width => 9,
            c_preload_regs => 1,
            c_dout_rst_val => "0",
            c_has_data_count => 0,
            c_prog_full_thresh_negate_val => 449,
            c_wr_depth => 512,
            c_prog_empty_thresh_negate_val => 3,
            c_prog_empty_thresh_assert_val => 2,
            c_has_valid => 1,
            c_init_wr_pntr_val => 0,
            c_prog_full_thresh_assert_val => 450,
            c_use_fifo16_flags => 0,
            c_has_backup => 0,
            c_valid_low => 0,
            c_prim_fifo_type => "512x36",
            c_count_type => 0,
            c_prog_full_type => 1,
            c_memory_type => 1);
-- synthesis translate_on
BEGIN
-- synthesis translate_off
U0 : wrapped_async_fifo_32bits_deph1024_bram_001
        port map (
            din => din,
            rd_clk => rd_clk,
            rd_en => rd_en,
            rst => rst,
            wr_clk => wr_clk,
            wr_en => wr_en,
            almost_full => almost_full,
            dout => dout,
            empty => empty,
            full => full,
            prog_full => prog_full,
            valid => valid);
-- synthesis translate_on

END async_fifo_32bits_deph1024_bram_001_a;

 

при синтезе, синтезатор XST должен взять только Entity, а архитектуру не смотреть, и уже при имплементации подключить edn файл.

Я так понимал, что эта строка и говорит синтезатору, использовать только Entity. Потому что все работает правильно, а вот если строчку for DATA_FROM_RAM_FIFO : async_fifo_32bits_deph1024_bram_001 use entity ip_cores.async_fifo_32bits_deph1024_bram_001(async_fifo_32bits_deph1024_bram_001

_a); удалить, то синтезатор начинает синтезировать архитектуру, говорит что все входы не используются, и все выходы он сажает на 0.

 

Однако...

В одном из проектов этого не произошло. Синтезатор начинает синтезировать архитектуру, и как результат никакого фифо в прошивке не появляется. Проверили все настройки синтеза. Все одинаково.

В чем может быть дело?

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


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

Кто нибудь может точно объяснить что это означает.

Конечно. Точно это может объяснить, например, IEEE Std 1076™-2002. Параграф 1.3.

 

Зачем скрыто от синтезатора архитектурное тело async_fifo_32bits_deph1024_bram_001_a? Если это издержки подсаживания на рисуночки, завязывайте, пока не поздно. Читайте стандарты. Помогает.

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


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

Зачем скрыто от синтезатора архитектурное тело async_fifo_32bits_deph1024_bram_001_a? Если это издержки подсаживания на рисуночки, завязывайте, пока не поздно. Читайте стандарты. Помогает.

 

Затем, что это архитектурное тело не синтезируемо, а работает лишь при моделировании.

И использование графического редактора или VHDL описания сути не меняет

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


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

Затем, что это архитектурное тело не синтезируемо, а работает лишь при моделировании.

И использование графического редактора или VHDL описания сути не меняет

 

На мой взгляд :( (я так думаю) , архитектурное тело синтезируемо или не синтезируемо зависит от описания, т.е. какие операторы/функции/библиотеки используются при описании цифрового устройства на языке VHDL и поддерживаются ли они синтезатором :) В графическом редакторе (схематике) библиотека элементов, которая доступна для использования, является пригодной для синтеза, и схемы нарисованные в схематике, с помощью библиотечных элементов будут синтезироваться и моделироваться :)

В данном случае может быть требуется какая-то лицензия на корку фифо (хотя мало вероятно) либо Вы не правильно подсоединяете к проекту либо синтезатор упростил Вашу схему.

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


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

На мой взгляд :( (я так думаю) , архитектурное тело синтезируемо или не синтезируемо зависит от описания, т.е. какие операторы/функции/библиотеки используются при описании цифрового устройства на языке VHDL и поддерживаются ли они синтезатором :) В графическом редакторе (схематике) библиотека элементов, которая доступна для использования, является пригодной для синтеза, и схемы нарисованные в схематике, с помощью библиотечных элементов будут синтезироваться и моделироваться :)

В данном случае может быть требуется какая-то лицензия на корку фифо (хотя мало вероятно) либо Вы не правильно подсоединяете к проекту либо синтезатор упростил Вашу схему.

 

Неправильно вы все думаете. Посмотрите на приведенный код. Там стоят директивы

-- synthesis translate_off
-- synthesis translate_on

 

Для синтезатора архитектурное тело пустое!!!!

выглядит так

ARCHITECTURE async_fifo_32bits_deph1024_bram_001_a OF async_fifo_32bits_deph1024_bram_001 IS
BEGIN
END async_fifo_32bits_deph1024_bram_001_a;

 

И оно должно быть пустым!!! Т.к. сам фифо уже существует в виде списка цепей, отсинтезированный!!!

 

И когда синтезатор видит такую архитектуру, он естественно делает пустой блок, а не берет edn файл из библиотеки коров.

Насколько я понял, use entity должна говорить о том, чтобы синтезатор не брал архитектуру, а фактически вставил компонент как black box! Но судя по всему, я понял не совсем верно! Вот и вопрос, что не так я понял

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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