`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
//
// Megkapja a clk_d-t, a bill_kod-ot, és kiadja a folyamat jelet, amit
// a kitoltes_to_pwm kap meg, és ebből dönti el, hogy a bill-ről vezérelünk,
// vagy memória művelet fut...
//
//	folyamat == 1, ha a bill-ről irányítunk, ez az alapértelmezett
// ----törölve ---folyamat == 2, ha az előre letárolt program fut //backspace indít//állít
// folyamat == 3, tárolás eng./tiltás
// folyamat == 4, memóriából kiolvasás
// folyamat == 5, memóriába tárolt kód törlés
// folyamat == 6, ha rst volt vagy még nem nyomtunk space-t, tehát az irányítás nincs engedélyezve
//
// visszakapja a kitoltes_to_pwm-től a status-t, és ha 0, csak akkor engedélyezzük a tárolt programot futtatni,
// illetve ha végigért a tárolt program futása, akkor engedélyezzük a bill-ről való irányítást
//
// ugyanez a menet közben tárolt programnál is
//////////////////////////////////////////////////////////////////////////////////
module folyamat_valaszto(
	input clk, rst,
	input clk_d,
	input [7:0] bill_kod,
	input [1:0] start_stop,
//	input clk_status_tp,
//	input [5:0] status_tp, //tárolt program státusza
//	
	input wire torles_vege, //véget ért a törlés, megint irányíthatunk a billről
	
	input wire kiolv_vege, //vége a kiolvasásnak
	
	output reg [2:0] folyamat = 3'd1 //alapértelmezésben a bill-ről irányítunk  -- 4 2 1
    );
	
	
reg mehet_billrol = 0;
reg d = 0;

	always @(posedge clk)
	begin
		if( (clk_d == 1) && (mehet_billrol == 0) && (d == 0))
		begin
			mehet_billrol <= 1;
			d <= 1;
		end
		else if( (clk_d == 1) && (mehet_billrol == 1) )
			mehet_billrol <= 0;
		else if(clk_d == 0)
		begin
			mehet_billrol <= 0;
			d <= 0;
		end
	end	
	
	
	always @(posedge clk)
	begin
		if(rst)
			folyamat <= 3'd1;

		else if(clk_d && (bill_kod == 8'h01) && (folyamat == 3'd1)) //F9 - tárolás indítása
			folyamat <= 3'd3;
		else if(clk_d && (bill_kod == 8'h09) && (folyamat == 3'd3)) //F10 - tárolunk éppen, és be akarjuk fejezni
			folyamat <= 3'd1;
		
		else if(clk_d && (bill_kod == 8'h78) && (folyamat == 3'd1 || folyamat == 3'd3) && (kiolv_vege==0)) //F11 - kiolvasás
			folyamat <= 3'd4;
		else if( (folyamat == 3'd4) && kiolv_vege )
			folyamat <= 3'd1;
		
		else if(clk_d && (bill_kod == 8'h07) && (folyamat == 3'd1 || folyamat == 3'd3) && (torles_vege == 0)) //F12 - törlés, törölni lehet akkor, amikor a bill-ről irányítunk, 
			folyamat <= 3'd5; //vagy ha éppen tárolunk, akkor is törölhetünk
		else if( (folyamat == 3'd5) && torles_vege) //törlünk és vége a törlésnek
			folyamat <= 3'd1;
		
		else if(start_stop == 2'd0 || start_stop == 2'd3)
			folyamat <= 3'd6;
		else if(folyamat == 3'd6 && start_stop == 2'd1)
			folyamat <= 3'd1;
	end
	

endmodule
