123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- `include "FRAM_Controller.sv"
-
- module spi(bus.spi_port b, fram_if.fram_port_top i);
- parameter ringbuffer_size = 256;
-
- logic [19:0] FRAM_Adr;
- logic [7:0] FRAM_DATA_OUT;
- logic [7:0] FRAM_DATA_IN;
- logic FRAM_RW;
- logic FRAM_RSTATUS;
- logic FRAM_hbn;
- logic FRAM_go;
- logic FRAM_busy;
-
- logic [7:0] clk_cntr;
-
- initial begin
- FRAM_Adr <= 20'h0;
- FRAM_DATA_IN <= 8'h0;
- FRAM_RW = 0;
- FRAM_RSTATUS = 0;
- FRAM_hbn = 0;
- FRAM_go = 0;
- clk_cntr = 0;
- end
-
- always @ (posedge b.timer) begin
- if(b.dip[0] == 0) begin //Reset
- FRAM_Adr <= 20'h0;
- FRAM_DATA_IN <= 8'h0;
- FRAM_RW = 0;
- FRAM_RSTATUS = 0;
- FRAM_hbn = 0;
- FRAM_go = 0;
- clk_cntr = 0;
- end
- else if(b.dip[1] == 1) begin //Read
- FRAM_Adr <= (FRAM_Adr - 1) % (ringbuffer_size - 1);
- FRAM_RW <= 1'h1; //Read
- FRAM_go <= 1'h1; //Go
- end
- else if(b.dip[1] == 0) begin //Write
- FRAM_Adr <= (FRAM_Adr + 1) % (ringbuffer_size - 1);
- FRAM_DATA_IN <= {6'h0, b.dip[4:3]};
- FRAM_RW <= 1'h0; //Write Operation
- FRAM_go <= 1'h1; //Go
- end
- end
-
- always @ (posedge b.oszi_clk) begin
- if(FRAM_go == 1)
- clk_cntr <= clk_cntr + 1;
-
- if(clk_cntr > 50 && FRAM_RW == 1'h1) begin
- b.spi_read <= FRAM_DATA_OUT[1:0];
- FRAM_go <= 1'h0;
- FRAM_RW <= 1'h0;
- clk_cntr <= 0;
- end
- else if(clk_cntr > 50 && FRAM_RW == 1'h0) begin
- FRAM_go <= 1'h0;
- clk_cntr <= 0;
- end
- end
-
-
- FRAM FRAM_ut(
- .i_clk(b.oszi_clk),
- .i_nreset(b.dip[0]),
- .i_adr(FRAM_Adr),
- .i_data(FRAM_DATA_IN),
- .o_data(FRAM_DATA_OUT),
- .i_rw(FRAM_RW),
- .i_status(FRAM_RSTATUS),
- .i_hbn(FRAM_hbn),
- .i_cready(FRAM_go),
- .o_busy(FRAM_busy),
- .o_SPI_Clk(i.sclk),
- .i_SPI_MISO(i.mosi),
- .o_SPI_MOSI(i.mosi),
- .o_SPI_CS_n(i.ss)
- );
-
- endmodule
|