FSM w Verilog problem ...

S

sammm

Guest
Witam,

Jestem nowy w dziedzinie programowania HDL, co próbuję zrobić jest stworzenie skończonej maszyny stwierdzić, że tylko w trzech etapach:
St0: stan początkowy
ST1: pobyt w tym etapie do 32 razy
ST3: wykończenie st0 następnie powrót do

Wiem, że bardzo proste, ale z jakiegoś powodu, nie mogę zrobić to dobrze, o to kod, który napisałem:

Kod:moduł FM (liczba, CLK, reset, gotowy);Wyjście [4:0] licznik;

gotowy produkcji;

CLK wejście;

reset wejścia;reg gotowy;

reg [4:0] licznik;st0 parametr = 0, ST1 = 1, ST2 = 2;

reg [1:0 CurrentState] NextState;zawsze @ (CurrentState)

rozpocząć

przypadku (CurrentState)

St0: begin

count = 0;

gotowy = 0;

NextState = ST1;

koniec

ST1: begin

if (liczba <32)

rozpocząć

liczba = liczba 1;

NextState = ST1;

koniec

więcej

NextState = ST2;

koniec

ST2: begin

gotowe = 1;

NextState = st0;

koniec

domyślnie: rozpocząć

gotowy = 0;

NextState = st0;

koniec

endcase

konieczawsze @ (CLK posedge lub posedge reset)

rozpocząć

if (reset)

CurrentState = st0;

więcej

CurrentState = NextState;

koniecendmodule

 
Swój licznik nigdy nie = 32, ponieważ posiada tylko 5 bitów.

Ponadto, mają Państwo uwagi (liczba = liczba 1) w unclocked bloku.

 
Ok ...potem musiałem wykonać następujące czynności:
1 - wzrost liczby bitów #
2 - przeniesienie count = count 1 oświadczenie do sekcji zegar

ale co to jest prawidłowy sposób zrobić kroku 2, starałem się po prostu przenieść go do taktowany punkt, ale dostaję wiele błędów ...

Będę wdzięczni, jeśli ktoś może mnie prowadzić na właściwe dlaczego robi to, być może dokument lub np. ...Dzięki za pomoc tkbits
 
Może byłam zbyt surowa.Nie wiem, Verilog, że dobrze.

Możesz być w stanie poruszać zadania liczyć wstecz, jak blok kodu nie jest wrażliwy na zmiany liczyć.Jeśli to działa, stoję poprawione.

 
Wystarczy popatrzeć na to ..mogą pomóc

Kod:moduł FM (liczba, CLK, reset, gotowy);Wyjście [5:0] licznik;

gotowy produkcji;

CLK wejście;

reset wejścia;reg gotowy;

reg [5:0] licznik;st0 parametr = 0, ST1 = 1, ST2 = 2;

reg [1:0 CurrentState] NextState;zawsze @ (CurrentState, wizytówki)

rozpocząć

przypadku (CurrentState)

St0: begin

gotowy = 0;

NextState = ST1;

koniec

ST1: begin

if (liczba <6'd31)

rozpocząć

NextState = ST1;

koniec

więcej

NextState = ST2;

koniec

ST2: begin

gotowe = 1;

NextState = st0;

koniec

domyślnie: rozpocząć

gotowy = 0;

NextState = st0;

koniec

endcase

konieczawsze @ (CLK posedge lub posedge reset)

rozpocząć

if (reset)

CurrentState <= st0;

więcej

CurrentState <= NextState;

konieczawsze @ (posedge CLK)

rozpocząć

if (CurrentState == st0)

liczba <= 0;

else if (CurrentState == ST1)

liczba <= 1'b1 liczba;

koniecendmodule

 
Dzięki ....wszystko działa dobrze
Myślę, że miałem wiele odczytów, aby zrobić w tej dziedzinie ...
Dziękuję bardzoDodano po 59 minutach:Ok ...Mam nadzieję, że możesz dać mi wskazówkę, również na następujących
I zmodyfikowała projekt do implemeny xtea algorytm szyfrowania oparty na 32 rund,

Kod xtea w c jest bardzo mała
Kod:usigned długo DELTA = 0x9E3779B9;

/ / Zwykły tekst jest 64 bit, y posiada fisrt 32 bit z niego, z drugiej posiada 32 bity

for (int i = 0; i <32; i )

(

y = (z <<4 ^ z>> 5) z k ^ suma kwoty [i 3];

suma = DELTA;

z = (y <<4 ^ y>> 5) y k ^ sumę [suma> 11 & 3];

)
 
z <<4 Myślę, że to działa dobrze z symulacji, ale nie może być synthesisable.

Z innym kodem, proponujemy przesunięcie wszystkich obliczeń (x, y, z, itp.) do kolejnych bloków.

 
sammm Witam,
Myślę, że należy zrozumieć podstawowej zasady logiki projektowania HDL przed kodowania, inaczej będziesz odpadów mcuh czasu unsyntheisable kodu.
Swój istotny błąd nie jest jasno i kombinowanych kolejny blok logiki.
"Always @ (CurrentState ..." należy conbinational bloku. Ale twój kod ma następującą linię:
Cytat:

y = y (z <<4 ^ z>> 5) z ^ suma kwoty klucz [i 3];

suma = suma DELTA;

z = z (y <<4 ^ y>> 5) y ^ suma klawisz [suma> 11 & 3];
 
it_boy napisał:

z <<4 Myślę, że to działa dobrze z symulacji, ale nie może być synthesisable.
 
.

Dzięki za vale
dokumentu.
Teraz rozumiem, że jest wiele błędów w kodzie, będę przerobić go ponownie, dzięki za pomoc, i mam tu na myśli korzystania ciągły zadania w zakresie funkcji i korzystanie z nich z właściwego projektu FM.

 

Welcome to EDABoard.com

Sponsor

Back
Top