Jump to content

    

component внутри рабочей entity

Recommended Posts

evgforum

Можно ли внутри своей рабочей entity описать компонент (component) и управлять им (входы и выходы) из этой же entity посредством сигналов, портов и проч.?

Как это сделать?

Share this post


Link to post
Share on other sites

Iouri

можно тогда у вас будет набор отдельных процесов и statements, коорые потом можно сдеать компонентом.

 

 

out1 <= in1 and in2;

process(clk)

begin

if clk ='1' and clk'event then

out2 <= out1;

end if;

end process;

 

etc.........

Share this post


Link to post
Share on other sites

evgforum
можно тогда у вас будет набор отдельных процесов и statements, коорые потом можно сдеать компонентом.

 

 

out1 <= in1 and in2;

process(clk)

begin

if clk ='1' and clk'event then

out2 <= out1;

end if;

end process;

 

etc.........

 

а библиотечный component?

как в таком случае подключать его входы и выходы к своим сигналам

- через port map?

можно ли так делать, а то у меня компилятор ругается, что выводы не подсоединены (cannot find map for port ...)

 

спасибо

Share this post


Link to post
Share on other sites

Iouri

так надо делать через port map, также незабуьте что весящих пинов не должно быть

Share this post


Link to post
Share on other sites

DLR

В архитектуре его объявляешь:

COMPONENT такойто

PORT(

входной : in STD_LOGIC;

выходной : out STD_LOGIC);

Далее объявляешь сигналы

Signal входной : STD_LOGIC;

Signal выходной : STD_LOGIC;

После begin

Чтонибудь(любое) : такойто PORT MAP(

входной => входной,

выходной => выходной);

Далее работаешь с сигналами как хочешь!!!

Share this post


Link to post
Share on other sites

des00
В архитектуре его объявляешь:

COMPONENT такойто

PORT(

входной : in STD_LOGIC;

выходной : out STD_LOGIC);

Далее объявляешь сигналы

Signal входной : STD_LOGIC;

Signal выходной : STD_LOGIC;

После begin

Чтонибудь(любое) : такойто PORT MAP(

входной => входной,

выходной => выходной);

Далее работаешь с сигналами как хочешь!!!

Хмм вобще то вопрос был не про архитектуру а про ентити, хотя мне не понятно зачем это нужно :)

Share this post


Link to post
Share on other sites

DLR

Извините, стормозил ;)

Согласен с Des00 зачем это надо?

Мне кажется что такое в принципе не возможно!

Share this post


Link to post
Share on other sites

evgforum

:smile3046:

В архитектуре его объявляешь:

COMPONENT такойто

PORT(

входной : in STD_LOGIC;

выходной : out STD_LOGIC);

Далее объявляешь сигналы

Signal входной : STD_LOGIC;

Signal выходной : STD_LOGIC;

После begin

Чтонибудь(любое) : такойто PORT MAP(

входной => входной,

выходной => выходной);

Далее работаешь с сигналами как хочешь!!!

 

Вот как я сделал (кусок из программы):

 

Почему то раньше не получалось, сделал как вы написали - вроде все проходит и синтезатор память добавляет, хотя саму работу памяти я еще не тестировал.

 

[ответ на следующее сообщение]

Нужно это для того чтобы в моей entity использовать внутреннюю sram память на кристалле (Actel APA075). Не хотелось писать еще один файл верхнего уровня, объединяющий мою entity и компонент SRAM. Хотя я уже попробовал их соединить в схематик, сделав файл схематик - уровнем top. Но как я только входы/выходы меняю, нужно обновлять symbol, рисовать связи - мне показалось это неудобным. Может я чего-то недопонимаю?

 

library IEEE;
use IEEE.STD_LOGIC_1164.all;


entity temp is port(
  sramout: out STD_LOGIC_VECTOR(7 downto 0))

end temp;

--}} End of automatically maintained section

architecture temp of temp is

 component sram8x256
   port(DO : out std_logic_vector (7 downto 0);
     DI : in std_logic_vector (7 downto 0);
     WRB : in std_logic;
     RDB : in std_logic;
     WADDR : in std_logic_vector (7 downto 0);
     RADDR : in std_logic_vector (7 downto 0));
   end component;

begin
 R_256_8: sram8x256
 
   port map(DO => DOs,
     DI => DIs,
     WRB => WRBs, 
     RDB => RDBs, 
     WADDR => WADDRs, 
     RADDR => RADDRs 
    ); 

 -- enter your statements here --
process(GlobalCLK,SVReset)
variable rambuf : std_logic_vector(15 downto 0);
variable counter0: integer range 0 to 7;
variable temp: std_logic_vector (7 downto 0);
begin
 if SVReset = '0' then
        DIs <= (others => '1');
        WRBs <= '1';
        RDBs <= '1';
        WADDRs <= (others => '1');
        RADDRs <= (others => '1');
  counter0 := 0;
  temp := DOs;
  DIs <= "01010101";
    elsif Rising_edge(GlobalCLK) then
 case counter0 is
     when 0 =>
    WRBs <= '0';
    WADDRs <= int_to_stN(counter0,7);
    RADDRs <= int_to_stN(counter0,7);
     when 1 =>
       DIs <= "10101010";
     when 2 =>
    WRBs <= '1';
     when 3 =>
    RDBs <= '0';
     when 4 =>
   sramout <= DOs;
     when 5 =>
    RDBs <= '1';
     when others =>
 end case;
 counter0 := counter0 + 1;
    end if;
end process;

end temp;

Share this post


Link to post
Share on other sites

des00

хмм, мне кажеться что вы не совсем понимате, принципы объединения компоненнтов :)

Если вам нужно использовать какие нибудь компоненнты в вашем объекте, то просто делкрируете их в секции описания сигналов архитектры, а потом вставляете.

И их может быть сколько угодно, и именно ваш файл и будет являться основным :)

Зачем огород то городить ?

 

А вопрос к вам, был потому как вы задали не правильный вопрос :)

вы спросили " ожно ли внутри своей рабочей entity описать компонент (component) и управлять им (входы и выходы) из этой же entity посредством сигналов, портов и проч.?"

а нужно было (в вашем случае) "ожно ли внутри АРХИТЕКТУРЫ своей рабочей entity описать компонент (component) и управлять им (входы и выходы) из этой же entity посредством сигналов, портов и проч.?".

 

:)

Share this post


Link to post
Share on other sites

DLR

Да, я всетаки оказался прав... ;)

Share this post


Link to post
Share on other sites

evgforum
хмм, мне кажеться что вы не совсем понимате, принципы объединения компоненнтов :)

 

до сегодняшнего дня совсем не понимал

 

Если вам нужно использовать какие нибудь компоненнты в вашем объекте, то просто делкрируете их в секции описания сигналов архитектры, а потом вставляете.

И их может быть сколько угодно, и именно ваш файл и будет являться основным :)

Зачем огород то городить ?

 

А вопрос к вам, был потому как вы задали не правильный вопрос :)

вы спросили " ожно ли внутри своей рабочей entity описать компонент (component) и управлять им (входы и выходы) из этой же entity посредством сигналов, портов и проч.?"

а нужно было (в вашем случае) "ожно ли внутри АРХИТЕКТУРЫ своей рабочей entity описать компонент (component) и управлять им (входы и выходы) из этой же entity посредством сигналов, портов и проч.?".

 

:)

 

все ясно, спасибо за разъяснения :rolleyes:

Share this post


Link to post
Share on other sites

Guest
This topic is now closed to further replies.