Как ТАБЛИЦА работает в AHDL? - PullRequest
0 голосов
/ 28 октября 2009

У меня есть реализация блока управления (UC) в AHDL, и я должен имитировать его и посмотреть, работает ли он так, как определено на соответствующей диаграмме ASM. Я использовал MAX + plus II , чтобы смоделировать его, и он не работает, как я ожидал, но я не могу сказать, что не так, потому что я не знаком с AHDL, не говоря уже о TABLE часть.

Вот мой блок управления:

SUBDESIGN EXP1_UC
(
CLKUC: INPUT;
RES: INPUT;
N1,N2,M1,M2: INPUT;<br>
CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL: OUTPUT;
)
VARIABLE
UC: MACHINE OF BITS (CLR1, CLR2, CLR3, EN1, EN2, EN3, SEL)
WITH STATES
(
s0 = B"1110000",
s1= B"0001000",
s2= B"0000100",
s3= B"0000000",
s4= B"0000010",
s5= B"0000001",
s6= B"0000011"
);
BEGIN
UC.CLK = CLKUC;
UC.RESET = RES;
TABLE
UC, N1,N2,M1,M2 => UC;
s0, 0, 0, X, X => s0;
s0, 1, X, X, X => s1;
s0, X, 1, X, X => s2;
s1, X, X, X, X => s3;
s2, X, X, X, X => s3;
s3, 0, 0, 0, 0 => s3;
s3, 1, X, X, X => s1;
s3, X, 1, X, X => s2;
s3, X, X, 1, X => s4;
s3, X, X, X, 1 => s5;
s4, X, X, X, X => s3;
s5, X, X, X, X => s6;
s6, X, X, X, X => s3;
END TABLE;
END;

В симуляции есть 2 ситуации, которые я не понимаю:

1) Когда текущее состояние S3 и входы M1 = 1 и M2 = 1, следующее состояние S6. Я не понимаю этого, потому что, как я вижу, невозможно перейти на S6, не пройдя сначала S5.

2) Когда текущее состояние S0 и входы N1 = 1 и N2 = 1, следующее состояние определяется в симуляции как «12». Ну нет такого государства ...

Кто-нибудь может мне помочь? Спасибо.

ОБНОВЛЕНИЕ:

1) Я должен использовать ADHL и MAX + plus II, хотя это едва ли лучшая комбинация инструментов, потому что это документы для колледжа, и я не писал код (как я уже сказал, я просто должен чтобы смоделировать это, я не могу это изменить).

1 Ответ

1 голос
/ 28 октября 2009

Во-первых: вам действительно нужно использовать AHDL? - это не было должным образом поддержанной частью Альтера-земли в течение многих лет. И MAX Plus II - это очень старый программный продукт. Я бы посоветовал взять Quartus и изучить VHDL (или Verilog, если нужно;). Извините, если это звучит грубо!

Но на самом деле ваша проблема звучит как традиционная логическая проблема ... правильно ли синхронизированы входы вашего конечного автомата? Если нет, вы можете получить всевозможные странные эффекты, так как они изменяются близко к фронту часов, а затем сигналы попадают в часть конечного автомата на одной стороне часов и в другие части на «другой стороне» часов т.е. не видел до следующего цикла). Это ужасно запутает! Также убедитесь, что ваш сигнал сброса также синхронизирован с сигналом clk.

Быстрый взлом - вставьте два шлепка в цепочку на каждый из входов. Затем прочитайте о синхронизации асинхронных входов ...

...