PDA

Просмотр полной версии : AHDL - брутально...



fan
30.07.2007, 15:28
Title "Мультиплексор который ни хе не пашет...";
Subdesign RAM_SEL_TEST2

(
nRD , nCS : input;
VIDEO_ACCESS : input;
--CPU_ACCESS : input;

nVRAM_RD , nVRAM_CS : output;
)

Variable

VA_BUF_OUT[1..0] : TRI; -- Буфер выбора VRAM и выбора адресов VRAM видео контроллером .
CPU_VRAM_SEL_BUF[1..0] : TRI; -- Буфер выбора VRAM и экрана процессором .

--------------------------------------------------------------------------------
Begin
--================================================== ============================

VA_BUF_OUT[].oe=VIDEO_ACCESS; -- (активный высокий) Активность ВК (чтение в регистры ВК).
VA_BUF_OUT[0].in=GND; nVRAM_CS=VA_BUF_OUT[0].out; -- Выбор VRAM видео контроллером (выходной пин).
VA_BUF_OUT[1].in=GND; nVRAM_RD=VA_BUF_OUT[1].out; -- Чтение из VRAM видео контроллером (выходной пин).

--================================================== ============================
CPU_VRAM_SEL_BUF[].oe=NOT(VIDEO_ACCESS); -- (активный высокий) Активность CPU .
CPU_VRAM_SEL_BUF[0].in = nCS ; nVRAM_CS = CPU_VRAM_SEL_BUF[0].out; -- Выбор VRAM .
CPU_VRAM_SEL_BUF[1].in = nRD ; nVRAM_RD = CPU_VRAM_SEL_BUF[1].out; -- Чтение VRAM .

end;
================================================== =======
С выходов всё время высокий уровень !!!!!
Если оставить один из буферов то всё ОК ! (на выходе низкий/высой/Z все как надо).

Тажа хрень записанная через условие фурычит как надо (на выходе низкий/высой).

Собсно вопрос - почему яйца в профиль не одни и теже ????? %(

molodcov_alex
30.07.2007, 17:11
У меня вообще не компилится... ;) (Мол низя подключать nVRAM_RD и nVRAM_CS к двум разным источникам)

А почему бы не пользовать lpm_mux?

Title "Мультиплексор который пашет...";
include "lpm_mux.inc";

Subdesign RAM_SEL_TEST2(
nRD , nCS : input;
VIDEO_ACCESS : input;
--CPU_ACCESS : input;

nVRAM_RD , nVRAM_CS : output;
)

Begin
(nVRAM_RD, nVRAM_CS)=lpm_mux(.data[][]=((GND,GND),(nRD,nCS)),.sel[]=VIDEO_ACCESS)
WITH (LPM_WIDTH=2, LPM_SIZE=2, LPM_WIDTHS=1);
end;

fan
30.07.2007, 17:59
У меня вообще не компилится... (Мол низя подключать nVRAM_RD и nVRAM_CS к двум разным источникам)
Возможно я чёто прибил убирая лишнии коментарии , ща перепостю и оригинал приаттачу . В архиве RAM_SEL_TEST2.tdf - это то что глючит и RAM_SEL_TEST3.tdf - то что фурычит как надо .
Собсно первый вариант для меня более предпочтителен , ибо не нужно кашу городить . Но в упор не въезжаю чего такая фигня происходит ...

А почему бы не пользовать lpm_mux?
Вах , я даже не знаю че это ваще такое %)
И как то уж совсем навёрнуто получается %\ Проще тогда через условие .

molodcov_alex
30.07.2007, 18:53
Вах , я даже не знаю че это ваще такое %)
lpm_mux - енто МЕГА:Dфункция мультиплексор.
Прототип:

FUNCTION lpm_mux (data[LPM_SIZE-1..0][LPM_WIDTH-1..0], sel[LPM_WIDTHS-1..0], clock, aclr)
WITH (LPM_WIDTH, LPM_SIZE, LPM_WIDTHS, LPM_PIPELINE)
RETURNS (result[LPM_WIDTH-1..0]);
data[][] - это входные данные
sel[] - сигналы выборки (выбирают одну из шин)
LPM_WIDTH - ширина шины
LPM_WIDTHS - ширина сигнала выборки
LPM_SIZE - =(2^LPM_WIDTHS) количество входных шин у мультиплексора

В данном случае:
на выходе nVRAM_RD и nVRAM_CS
LPM_WIDTH соответственно 2
LPM_WIDTHS равен 1 (ведь сигнал один - VIDEO_ACCESS)
LPM_SIZE=2 (2^1) - два "варианта"

на входе данных: GND и GND
или nRD и nWR соответсвенно
sel[]=VIDEO_ACCESS

P.S. Я тоже называю сигналы nRD, nWR и т.д... :D

fan
31.07.2007, 14:40
Понятно .

А файло из аттача то же не компилится ??? В какой проге компилишь (и какой версии)?

molodcov_alex
31.07.2007, 16:03
Не, не компилиться...
Компилю в MAX+plus II v10.2

fan
01.08.2007, 03:44
У меня квактус 4 . Похоже он слегка пришибленный ...

Вобщем сеньки за кооперейшен !