ФЩМ в Verilog проблем ...

S

sammm

Guest
Здрасти,

Аз съм нов за района на HDL програмиране, което аз съм се опитвам да направя е да се създаде ограничен държавна машина, че имат само три етапа:
ST0: първоначалното състояние
ST1: престой в този етап за 32 пъти
ST3: Завърши след това се върнете към ST0

Знам, че си много прост, но по някаква причина, не мога да го направя така, тук е кодът, че съм написал:

Код:модул FSM (брой, CLK, нулиране, готови);продукция [4:0] брой;

готова продукция;

вход CLK;

вход Reset;обл готови;

обл [4:0] брой;параметър ST0 = 0, ST1 = 1, st2 = 2;

обл [1:0] CurrentState, NextState;Винаги @ (CurrentState)

започвам

случай (CurrentState)

ST0: започва

Count = 0;

готови = 0;

NextState = ST1;

приключвам

ST1: започва

IF (брой <32)

започвам

брой = брой 1;

NextState = ST1;

приключвам

в противен случай

NextState = st2;

приключвам

St2: започва

готови = 1;

NextState = ST0;

приключвам

по подразбиране: започва

готови = 0;

NextState = ST0;

приключвам

endcase

приключвамВинаги @ (posedge CLK или проучване posedge)

започвам

ако (Reset)

CurrentState = ST0;

в противен случай

CurrentState = NextState;

приключвамendmodule

 
Вашият брояч никога няма = 32, тъй като само притежава 5 бита.

Също така, имате обратна връзка (Count = брой 1) в unclocked блок.

 
Добре ...след това аз трябваше да направя следното:
1 - увеличаване на броя на битовете #
2 - да се преместят на брой = брой 1 изявление на часовника раздел

но това е правилният начин да се направи стъпка 2, аз се опитах просто да го преместите в раздел часовник, но аз съм се много грешки ...

Аз ще благодарен, ако някой може да ме упъти на правилното защо да го направите, може би от документ, или например ...Благодаря за вашата помощ tkbits
 
Аз може би са били прекалено строги.Аз не знам Verilog, че добре.

Може да имате възможност да се движат на работа брой обратно, тъй като кодът блок не е чувствителен към промените в броя.Ако това работи, аз съм коригирани.

 
Да погледнем в това ..може да ви помогне

Код:модул FSM (брой, CLK, нулиране, готови);продукция [5:0] брой;

готова продукция;

вход CLK;

вход Reset;обл готови;

обл [5:0] брой;параметър ST0 = 0, ST1 = 1, st2 = 2;

обл [1:0] CurrentState, NextState;Винаги @ (CurrentState, броене)

започвам

случай (CurrentState)

ST0: започва

готови = 0;

NextState = ST1;

приключвам

ST1: започва

IF (брой <6'd31)

започвам

NextState = ST1;

приключвам

в противен случай

NextState = st2;

приключвам

St2: започва

готови = 1;

NextState = ST0;

приключвам

по подразбиране: започва

готови = 0;

NextState = ST0;

приключвам

endcase

приключвамВинаги @ (posedge CLK или проучване posedge)

започвам

ако (Reset)

CurrentState <= ST0;

в противен случай

CurrentState <= NextState;

приключвамВинаги @ (posedge CLK)

започвам

IF (CurrentState == ST0)

брой <= 0;

иначе, ако (CurrentState == ST1)

брой <= брой 1'b1;

приключвамendmodule

 
Благодаря ....тя работи добре
Мисля, че имах много на показанията да се направи в тази област ...
Много благодаряAdded след 59 минути:Добре ...Надявам се, че можете да ми дадете намек на следните също
Аз промяна на дизайна на implemeny алгоритъм xtea криптиране на базата на 32 кръга,

на xtea код е в много малки
Код:usigned дълго ДЕЛТА = 0x9E3779B9;

/ / Обикновен текст е 64 битов, Y притежава fisrt 32 късче от нея, Z е на второ 32 бита

за (INT I = 0; I <32; I )

(

Y = (Z <<4 ^ Z>> 5) Z ^ сума K [сума & 3];

сума = Делта ";

Z = (Y <<4 ^ Y>> 5) Y ^ сума K [сума>> 11 & 3];

)
 
Z <<4 Мисля, че работи добре с симулация, но не може да бъде synthesisable.

С друг код, предлагам ви да пренасочат всичките си изчисление (X, Y, Z, и т.н.) за пореден блок.

 
Здравейте sammm,
Мисля, че трябва да разберем основното правило на логиката HDL дизайн преди кодиране, в противен случай ще отпадъци mcuh време на unsyntheisable код.
Вашият съществени грешки не е ясно и последователно комбинаторни блок логика.
В "винаги @ (CurrentState ..." трябва да бъде conbinational блок. Но кода си има следния ред:
Цитат:

Y = Y (Z <<4 ^ Z>> 5) Z ^ сума ключ [сума & 3];

Сумата = сума DELTA;

Z = Z (Y <<4 ^ Y>> 5) Y ^ сума ключ [сума>> 11 & 3];
 
it_boy написа:

Z <<4 Мисля, че работи добре с симулация, но не може да бъде synthesisable.
 
.

Благодаря за документа долина.

Разбирам, че сега има доста грешки в кода ми, аз ще го пренапише отново, благодаря за помощта ти, и аз мисля да се използва continuos задачи за функциите, както и да ги използвате с правилното FSM дизайн.

 

Welcome to EDABoard.com

Sponsor

Back
Top