This shows you the differences between two versions of the page.
|
soc:laboratoare:04:dfa_skel [2024/02/29 14:37] 127.0.0.1 external edit |
soc:laboratoare:04:dfa_skel [2026/03/22 16:41] (current) robert_fabian.tudor |
||
|---|---|---|---|
| Line 5: | Line 5: | ||
| // Ieșiri | // Ieșiri | ||
| // ------------------------------------------------------------ | // ------------------------------------------------------------ | ||
| - | output wire Output1 , | + | output wire o_w_out , |
| - | output wire Output2 , | + | |
| - | output reg [2:0] Status | + | |
| // ------------------------------------------------------------ | // ------------------------------------------------------------ | ||
| // Intrări | // Intrări | ||
| // ------------------------------------------------------------ | // ------------------------------------------------------------ | ||
| - | input wire Clock , | + | input wire i_w_clk , |
| - | input wire Reset , | + | input wire i_w_reset , |
| - | input wire A , | + | input wire i_w_in , |
| - | input wire B , | + | |
| // ------------------------------------------------------------ | // ------------------------------------------------------------ | ||
| ); | ); | ||
| Line 21: | Line 18: | ||
| // Codificarea stărilor | // Codificarea stărilor | ||
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| - | localparam STATE_Initial = 3’d0 , | + | localparam STATE_Initial = 3'd0 , |
| - | STATE_1 = 3’d1 , | + | STATE_1 = 3'd1 , |
| - | STATE_2 = 3’d2 , | + | STATE_2 = 3'd2 , |
| - | STATE_3 = 3’d3 , | + | STATE_3 = 3'd3 , |
| - | STATE_4 = 3’d4 , | + | STATE_4 = 3'd4 , |
| - | STATE_5_PlaceHolder = 3’d5 , | + | STATE_5_PlaceHolder = 3'd5 , |
| - | STATE_6_PlaceHolder = 3’d6 , | + | STATE_6_PlaceHolder = 3'd6 , |
| - | STATE_7_PlaceHolder = 3’d7; | + | STATE_7_PlaceHolder = 3'd7 ; |
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| Line 35: | Line 32: | ||
| // Regiștri pentru memorarea stărilor | // Regiștri pentru memorarea stărilor | ||
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| - | reg [2:0] CurrentState ; | + | reg [2:0] l_r_currentState ; |
| - | reg [2:0] NextState ; | + | reg [2:0] l_r_nextState ; |
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| Line 42: | Line 39: | ||
| // Ieșiri | // Ieșiri | ||
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| - | // ieșiri pe 1 bit | + | // ieșire pe 1 bit |
| - | assign Output1 = ( CurrentState == STATE_1 ) | ( CurrentState == STATE_2 ); | + | assign o_w_out = ( l_r_currentState == STATE_4 ); |
| - | assign Output2 = ( CurrentState == STATE_2 ); | + | |
| - | // ieșiri pe mai mulți biți (aici doar Status) | ||
| - | always@ ( * ) begin | ||
| - | Status = 3’b000 ; | ||
| - | case ( CurrentState ) | ||
| - | STATE_2 : begin | ||
| - | Status = 3’b010 ; | ||
| - | end | ||
| - | STATE_3 : begin | ||
| - | Status = 3’b011 ; | ||
| - | end | ||
| - | endcase | ||
| - | end | ||
| - | // -------------------------------------------------------------------- | ||
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| // Tranziție sincrona: bloc always@(posedge Clock) | // Tranziție sincrona: bloc always@(posedge Clock) | ||
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| - | always@ ( posedge Clock ) begin | + | always@ ( posedge i_w_clk ) begin |
| - | if ( Reset ) begin | + | if ( i_w_reset ) begin |
| - | CurrentState <= STATE_Initial ; | + | l_r_currentState <= STATE_Initial ; |
| else begin | else begin | ||
| - | CurrentState <= NextState ; | + | l_r_currentState <= l_r_nextState ; |
| end | end | ||
| end | end | ||
| Line 76: | Line 59: | ||
| // Tranziție condiționată: bloc always@ ( * ) | // Tranziție condiționată: bloc always@ ( * ) | ||
| // -------------------------------------------------------------------- | // -------------------------------------------------------------------- | ||
| - | always@ ( * ) begin | + | always@ ( * ) begin |
| - | NextState = CurrentState ; | + | l_r_nextState = l_r_currentState ; |
| - | + | ||
| - | case ( CurrentState ) begin | + | case ( l_r_currentState ) |
| STATE_Initial : begin | STATE_Initial : begin | ||
| - | NextState = STATE_1 ; | + | l_r_nextState = STATE_1 ; |
| end | end | ||
| STATE_1 : begin | STATE_1 : begin | ||
| - | if (A & B) begin | + | if (!i_w_in) |
| - | NextState = STATE_2 ; | + | l_r_nextState = STATE_2 ; |
| - | end | + | |
| end | end | ||
| STATE_2 : begin | STATE_2 : begin | ||
| - | if (A) begin | + | if (i_w_in) |
| - | NextState = STATE_3 ; | + | l_r_nextState = STATE_3 ; |
| - | end | + | |
| end | end | ||
| STATE_3 : begin | STATE_3 : begin | ||
| - | if (!A & B) begin | + | if (i_w_in) |
| - | NextState = STATE_Initial ; | + | l_r_nextState = STATE_4 ; |
| - | end | + | else |
| - | else begin | + | l_r_nextState = STATE_1 ; |
| - | if (A & !B) begin | + | |
| - | NextState = STATE_4 ; | + | |
| - | end | + | |
| - | end | + | |
| end | end | ||
| STATE_4 : begin | STATE_4 : begin | ||
| - | // ---------------------------------------------------------------------------- | + | if (i_w_in) |
| - | //In mod normal ar trebui ca aici sa existe macar o tranzitie inapoi in STATE_4 | + | l_r_nextState = STATE_1 ; |
| - | //sau in STATE_INITIAL | + | else |
| - | //dar am lasat gol pentru a reflecta diagrama pe care o modelam | + | l_r_nextState = STATE_2 ; |
| - | //!!!BAD EXAMPLE!!! Asigurati-va ca exista tranzitii din fiecare stare | + | |
| - | // ---------------------------------------------------------------------------- | + | |
| end | end | ||
| - | //Stări pentru tratarea erorilor | + | // Stări pentru tratarea erorilor |
| - | //Dacă automatul ajunge în aceste stări se va reseta. | + | // Dacă automatul ajunge în aceste stări se va reseta. |
| STATE_5_PlaceHolder : begin | STATE_5_PlaceHolder : begin | ||
| - | NextState = STATE_Initial ; | + | l_r_nextState = STATE_Initial ; |
| end | end | ||
| STATE_6_PlaceHolder : begin | STATE_6_PlaceHolder : begin | ||
| - | NextState = STATE_Initial ; | + | l_r_nextState = STATE_Initial ; |
| end | end | ||
| STATE_7_PlaceHolder : begin | STATE_7_PlaceHolder : begin | ||
| - | NextState = STATE_Initial ; | + | l_r_nextState = STATE_Initial ; |
| end | end | ||
| endcase | endcase | ||