Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module pattern
- (
- input i, clk, rst_b,
- output reg o
- );
- localparam S0_ST = 3 'd0 ; //3 bits pt ca avem 6 stari, 2^3 = 8, S6,S7 raman nefolosite
- localparam S1_ST = 3 'd1 ;
- localparam S2_ST = 3 'd2 ;
- localparam S3_ST = 3 'd3 ;
- localparam S4_ST = 3 'd4 ;
- localparam S5_ST = 3 'd5 ;
- reg [ 2 : 0 ] st ; //3 bits tot pt ca 3 variabile (S0 = 000 sau ABC, unde A=0,B=0,C=0; A,B,C sunt variabilele
- reg [ 2 : 0 ] st_nxt ;
- always @ (*) //actualizezi starea urmatoare
- case ( st )
- S0_ST : st_nxt = i ? S1_ST : S0_ST;
- S1_ST : st_nxt = i ? S1_ST : S2_ST;
- S2_ST : st_nxt = i ? S3_ST : S0_ST;
- S3_ST : st_nxt = i ? S4_ST : S2_ST;
- S4_ST : st_nxt = i ? S1_ST : S5_ST;
- S5_ST : st_nxt = i ? S3_ST : S0_ST;
- endcase
- always @ (*) begin //actualizezi output-ul
- o = 0'd0;
- if(st == S5_ST)
- o = 0'd1;
- else
- o = 0'd0;
- end
- always @ ( posedge clk , negedge rst_b ) //actualizeaza starea
- if (! rst_b ) st <= S0_ST ; //reset active, st becomes first state
- else st <= st_nxt ;
- endmodule
- //Testbench now:
- module pattern_tb
- (
- output reg i, clk, rst_b,
- output o
- );
- pattern test
- (
- .i(i),
- .clk(clk),
- .rst_b(rst_b),
- .o(o)
- );
- initial begin
- i = 1'd1; //semnalul este pe caietul Ioanei
- #200 i = 1'd0;
- #100 i = 1'd1;
- #200 i = 1'd0;
- #200 i = 1'd1;
- #100 i = 1'd0;
- #100 i = 1'd1;
- #200 i = 1'd0;
- end
- initial begin
- clk = 1'd0;
- repeat(23) #50 clk = ~clk; //perioada este 100
- //repetam de 23 de ori pt ca avem 11 perioade ale ceasului, dar avem 50 frecventa pt fiecare clk, deci 22 de ori + 1 pt ca incepi de pe 0 si termini pe 0
- //daca pui doar 22, nu ajunge la ultimul 0 unde se schimba iar output-ul
- end
- initial begin
- rst_b = 1'd0;
- #5 rst_b = 1'd1;
- end
- endmodule
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement