[an error occurred while processing this directive]
помогите оптимизировать VHDL код
(«Телесистемы»: Конференция «Языки описания аппаратуры (VHDL и др.))

миниатюрный аудио-видеорекордер mAVR

Отправлено Bug 23 сентября 2003 г. 16:50

требуеться реализовать след.
когда ALE=0 и CS=0 то один из выходов становиться =1, остальные=0, т.е. дешифратор. но это состояние должно держаться до условия CS=1 не реагируя на переход CS в "1". А когда и ALE=1 и CS=1 тогда везде на выходах "1". т.к. у меня мало практики и опыта в VHDL я смог реализовал след образом. и в связи с этим вопрос к более опытным людям, где можно оптимизировать код ?

library IEEE;
use IEEE.STD_LOGIC_1164.all;

entity decoder is
port(
ADDR : in STD_LOGIC_VECTOR(2 downto 0);
ALE : in STD_LOGIC;
CS_PLD : in STD_LOGIC;
SOC_CS : out STD_LOGIC;
CLK_CS : out STD_LOGIC;
OE_CS : out STD_LOGIC;
DIV_MCLK_CS : out STD_LOGIC;
DIV_CS : out STD_LOGIC
);
end decoder;

architecture Decoder of Decoder is
signal tmpSOC_CS : std_logic;
signal tmpCLK_CS : std_logic;
signal tmpOE_CS : std_logic;
signal tmpDIV_MCLK_CS : std_logic;
signal tmpDIV_CS : std_logic;
begin

process(CS_PLD, ALE)
begin

if CS_PLD = '0' then
SOC_CS <= tmpSOC_CS;
CLK_CS <= tmpCLK_CS;
OE_CS <= tmpOE_CS;
DIV_MCLK_CS <= tmpDIV_MCLK_CS;
DIV_CS <= tmpDIV_CS;
if ALE = '0' then
case ADDR is
when "001" => tmpSOC_CS <= '0'; tmpCLK_CS <= '1';
tmpOE_CS <= '1';
tmpDIV_MCLK_CS <= '1';
tmpDIV_CS <= '1';

when "010" => tmpCLK_CS <= '0'; tmpSOC_CS <= '1';
tmpOE_CS <= '1';
tmpDIV_MCLK_CS <= '1';
tmpDIV_CS <= '1';

when "011" => tmpOE_CS <= '0'; tmpSOC_CS <= '1';
tmpCLK_CS <= '1';
tmpDIV_MCLK_CS <= '1';
tmpDIV_CS <= '1';

when "100" => tmpDIV_MCLK_CS <= '0'; tmpSOC_CS <= '1';
tmpCLK_CS <= '1';
tmpOE_CS <= '1';
tmpDIV_CS <= '1';

when "101" => tmpDIV_CS <= '0'; tmpSOC_CS <= '1';
tmpCLK_CS <= '1';
tmpOE_CS <= '1';
tmpDIV_MCLK_CS <= '1';
when others => tmpSOC_CS <= '1';
tmpCLK_CS <= '1';
tmpOE_CS <= '1';
tmpDIV_MCLK_CS <= '1';
tmpDIV_CS <= '1';
end case;
end if;
elsif (CS_PLD = '1' and ALE='1') then
SOC_CS <= '1';
CLK_CS <= '1';
OE_CS <= '1';
DIV_MCLK_CS <= '1';
DIV_CS <= '1';
end if;

end process;

end Decoder;

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru