`timescale 1ns / 1ps module ADC(clk, sram_data, addr, nwe, ncs, noe, reset, led, ADC_EOC, ADC_SCLK, ADC_SDIN, ADC_SDOUT, ADC_CS, ADC_CSTART, irq_pin, OD1, OD2, OD3); parameter B = (7); input clk, addr, nwe, ncs, noe, reset, ADC_EOC; inout [B:0] sram_data; output led, ADC_CS, ADC_CSTART, ADC_SCLK; output OD1, OD2, OD3; inout ADC_SDIN, ADC_SDOUT; input irq_pin; // Internal conection reg led; reg OD1, OD2, OD3; // synchronize signals reg sncs, snwe; reg [12:0] buffer_addr; reg [B:0] buffer_data; // bram interfaz signals reg we; reg w_st=0; reg [B:0] wrBus; wire [B:0] rdBus; // interfaz fpga signals wire [12:0] addr; reg [25:0] counter; // Test : LED blinking always @(posedge clk) begin if (~reset) counter <= {25{1'b0}}; else counter <= counter + 1; led <= counter[25]; OD1 <= counter[25]; OD2 <= counter[16]; OD3 <= counter[15]; end // interefaz signals assignments wire T = ~noe | ncs; assign sram_data = T?8'bZ:rdBus; // synchronize assignment always @(negedge clk) begin sncs <= ncs; snwe <= nwe; buffer_data <= sram_data; buffer_addr <= addr; end // write access cpu to bram always @(posedge clk) if(~reset) {w_st, we, wrBus} <= 0; else begin wrBus <= buffer_data; case (w_st) 0: begin we <= 0; if(sncs | snwe) w_st <= 1; end 1: begin if(~(sncs | snwe)) begin we <= 1; w_st <= 0; end else we <= 0; end endcase end // Peripherals control wire [3:0] csN; wire [7:0] rdBus0, rdBus1, rdBus2, rdBus3; assign csN = buffer_addr[12]? (buffer_addr[11]? 4'b1000: 4'b0100) : (buffer_addr[11]? 4'b0010: 4'b0001); assign rdBus = buffer_addr[12]? (buffer_addr[11]? rdBus3: rdBus2) : (buffer_addr[11]? rdBus1: rdBus0); // Peripheral instantiation ADC_peripheral P1( .clk(clk), .reset(~reset), .cs(csN[0]), .ADC_EOC(ADC_EOC), .ADC_CS(ADC_CS), .ADC_CSTART(ADC_CSTART), .ADC_SCLK(ADC_SCLK), .ADC_SDIN(ADC_SDIN), .ADC_SDOUT(ADC_SDOUT), .addr(buffer_addr[10:0]), .rdBus(rdBus0), .wrBus(wrBus), .we(we)); endmodule