data/full_repos/permissive/140358757/snoop_completo/Emissor.v
data/verilator_xmls/f963fba2-5cb7-4696-8954-f642ca44934e.xml
module emissor(alternar,estado,operacao,acerto,Clk,estado_saida);
	input alternar,operacao,acerto;
	input [1:0]estado;
	input Clk;
	output reg [1:0]estado_saida;
	
	parameter  exclusive  = 2'b10;
	parameter  shared    = 2'b01;
	parameter  invalid	= 2'b00;
	
	parameter  read		= 1'b0;
	parameter  write		= 1'b1;
	
	parameter  readMiss	 = 2'b01;
	parameter  writeMiss	 = 2'b10;
	parameter  invalidate = 2'b11;
	
	initial estado_saida = invalid;
	
	always @(negedge Clk) begin
		   if(alternar == 0) begin
			case(estado)
				exclusive: begin
					if(acerto == 1) begin

						estado_saida = exclusive;
					end
					else if(operacao == read) begin

						estado_saida = shared;
					end
					else begin

						estado_saida = exclusive;
					end
				end
				shared: begin
					if(operacao == read && acerto == 1) begin

						estado_saida = shared;
					end
					else if(operacao == read && acerto == 0 ) begin

						estado_saida = shared;
					end
					else if(operacao == write && acerto == 1) begin

						estado_saida = exclusive;
					end
					else if(operacao == write && acerto == 0) begin

						estado_saida = exclusive;
					end
				end
				invalid: begin
					if(operacao == read ) begin
						estado_saida = shared;
					end
					else if(operacao == write) begin
						estado_saida = exclusive;
					end
				end
			endcase
		end
	end
endmodule
module emissor(alternar,estado,operacao,acerto,Clk,estado_saida);

	input alternar,operacao,acerto;
	input [1:0]estado;
	input Clk;
	output reg [1:0]estado_saida;
	
	parameter  exclusive  = 2'b10;
	parameter  shared    = 2'b01;
	parameter  invalid	= 2'b00;
	
	parameter  read		= 1'b0;
	parameter  write		= 1'b1;
	
	parameter  readMiss	 = 2'b01;
	parameter  writeMiss	 = 2'b10;
	parameter  invalidate = 2'b11;
	
	initial estado_saida = invalid;
	
	always @(negedge Clk) begin
		   if(alternar == 0) begin
			case(estado)
				exclusive: begin
					if(acerto == 1) begin

						estado_saida = exclusive;
					end
					else if(operacao == read) begin

						estado_saida = shared;
					end
					else begin

						estado_saida = exclusive;
					end
				end
				shared: begin
					if(operacao == read && acerto == 1) begin

						estado_saida = shared;
					end
					else if(operacao == read && acerto == 0 ) begin

						estado_saida = shared;
					end
					else if(operacao == write && acerto == 1) begin

						estado_saida = exclusive;
					end
					else if(operacao == write && acerto == 0) begin

						estado_saida = exclusive;
					end
				end
				invalid: begin
					if(operacao == read ) begin
						estado_saida = shared;
					end
					else if(operacao == write) begin
						estado_saida = exclusive;
					end
				end
			endcase
		end
	end
endmodule