`define ROM_SIZE 6'd15 module SPI_Lut (i_clk,i_res_L,i_rdy,o_data,o_valid ); input i_clk,i_res_L,i_rdy; output reg [15:0] o_data; output reg o_valid; reg [2:0] r_fasi; reg [7:0] r_addr; reg [7:0] ROM[`ROM_SIZE:0]; // contatore delle fasi always @(posedge i_clk or negedge i_res_L) begin if (!i_res_L) r_fasi<=3'b000; else if (!i_rdy) r_fasi<=3'b000; else if ((i_rdy)&(r_fasi < 3'b111)) r_fasi <= r_fasi + 3'b001; end // generazione segnale "o_valid" always @(posedge i_clk or negedge i_res_L) begin if (!i_res_L) o_valid<=0; else if ((r_fasi==3'b100)) o_valid<=1; else o_valid<=0; end //// generazione segnale "o_CS_L" //always @(posedge i_clk or negedge i_res_L) begin // if (!i_res_L) // o_CS_L<=0; // else if (r_addr == `ROM_SIZE) // o_CS_L <= 1'b1; //end // incremento dell'indirizzo always @(posedge i_clk or negedge i_res_L) begin if (!i_res_L) r_addr = 0; else if (r_fasi==3'b001) r_addr=r_addr+1; else if (r_addr > `ROM_SIZE) r_addr = 0; end //dato in uscita always @(posedge i_clk) begin ROM[0]= 8'h00; // dummy ROM[1]= 8'h3C; // Digit 1 ROM[2]= 8'h42; // Digit 2 ROM[3]= 8'hA5; // Digit 3 ROM[4]= 8'h81; // Digit 4 ROM[5]= 8'hA5; // Digit 5 ROM[6]= 8'h99; // Digit 6 ROM[7]= 8'h42; // Digit 7 ROM[8]= 8'h3c; // Digit 8 ROM[9]= 8'h00; // Decode 9 ROM[10]=8'h03; // Intensity 10 ROM[11]=8'h07; // Scan 11 ROM[12]=8'h01; // Shutdown/Normal 12 ROM[13]=8'h01; // Dummy ROM[14]=8'h01; // Dummy ROM[15]=8'h00; // Test/Normal o_data={r_addr[7:0],ROM[r_addr]}; end endmodule