Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Языки описания аппаратуры (VHDL и др.)

Пните в нужное русло - AHDL

Отправлено toweroff 29 октября 2007 г. 00:47


имеем:

проц х51, /RD, /WR, ALE, старшая часть адреса AM[7..0], шина AD[7..0], 24 входа данных

Нужно:

По сигналу /RD при AM[7]==1 сохранить данные по 24 входам, в дальнейшем считать их по определенным адресам, выставляя на шину AD сохраненные значения

Младшую часть адреса по стробу ALE я сохраняю в DFFE AL_[7..0]

В результате получаю примерно такую картину:

CONSTANT D7_ADDR = H"4030";
CONSTANT D5_ADDR = H"4031";
CONSTANT D1_ADDR = H"4032";

SUBDESIGN prob
(
AD[WIDTH-1..0] : BIDIR;
/WR : INPUT;
AM[WIDTH-1..0], /RD, ALE : INPUT;

AL[WIDTH-1..0] : OUTPUT;
D7_in[WIDTH-1..0] : INPUT;
D5_in[WIDTH-1..0] : INPUT;
D1_in[WIDTH-1..0] : INPUT;
)
VARIABLE
AL_[WIDTH-1..0] : DFFE;
D7[WIDTH-1..0] : DFFE;
D5[WIDTH-1..0] : DFFE;
D1[WIDTH-1..0] : DFFE;

AD_OUT[WIDTH-1..0] : NODE;

ALL[WIDTH-1..0] : NODE;

AD_EN : NODE;

BEGIN

DEFAULTS
AD_EN = GND;
END DEFAULTS;

--- Address latch ---
AL_[].D = AD[];
AL_[].clk = !ALE;
AL[] = AL_[].Q;

ALL[] = AL_[].Q;

--- Polling data ---
CASE (AM[],ALL[]) IS
WHEN (D7_ADDR) => AD_OUT[] = D7[].Q; AD_EN=VCC;
WHEN (D5_ADDR) => AD_OUT[] = D5[].Q; AD_EN=VCC;
WHEN (D1_ADDR) => AD_OUT[] = D1[].Q; AD_EN=VCC;
END CASE;

FOR i IN 0 to WIDTH-1 GENERATE
AD[i] = TRI(.IN=AD_OUT[i], .OE=(AD_EN AND !/RD));
END GENERATE;

---=== D7 ===---
D7[].D = D7_in[];
D7[].clk = /RD;
D7[].ENA = AM7;

---=== D5 ===---
D5[].D = D5_in[];
D5[].clk = /RD;
D5[].ENA = AM7;

---=== D1 ===---
D1[].D = D1_in[];
D1[].clk = /RD;
D1[].ENA = AM7;

Ну вот примерно так... перенеся /RD из условия CASE в функцию .OE примитива TRI, выиграл порядка 11ns (девайс - EPM3256AQC208-10), ондако все равно общее время прохождения сигнала:

Info: Longest tpd from source pin "AM[7]" to destination pin "AD[4]" is 22.900 ns
Info: 1: + IC(0.000 ns) + CELL(1.200 ns) = 1.200 ns; Loc. = PIN_55; Fanout = 135; PIN Node = 'AM[7]'
Info: 2: + IC(4.500 ns) + CELL(9.000 ns) = 14.700 ns; Loc. = LC195; Fanout = 8; COMB Node = '$00000~50'
Info: 3: + IC(3.200 ns) + CELL(5.000 ns) = 22.900 ns; Loc. = PIN_168; Fanout = 0; PIN Node = 'AD[4]'
Info: Total cell delay = 15.200 ns ( 66.38 % )
Info: Total interconnect delay = 7.700 ns ( 33.62 % )


Собственно, при ширине /WR и /RD в 150ns 23ns - это немного, но все же хотелось бы это дело уменьшить, если возможно. И вообще - может я изначально наворотил ереси страшной :)

Поможите кто чем может :)



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 13:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru