OpenCores
URL https://opencores.org/ocsvn/spi2ram/spi2ram/trunk

Subversion Repositories spi2ram

[/] [spi2ram/] [trunk/] [spiflashtb.v] - Rev 4

Go to most recent revision | Compare with Previous | Blame | View Log

module top_module ();
	reg clk=0;
 
    reg spi_sck,spi_cs,spi_mosi,spi_clk ;
 
    wire spi_miso; 
    wire[16:0] nvram_addr;
    wire nvram_en;
    wire nvram_g;									
    wire nvram_w;
 
    reg sys_clk;
    reg sys_rstn;
 
    parameter		clockperiod = 10;	
    parameter		clockperiod1 = 8;		
 
 
 
    initial 
    begin
        sys_rstn = 0;
        sys_clk = 0;
        #15
        sys_rstn = 1;
    end
 
    initial
    begin
        spi_sck = 1'b0;
        //repeat(1000) spi_sck = #(clockperiod/2)~spi_sck;
    end
 
 
 
	initial `probe_start;   // Start the timing diagram
 
	// A testbench
 
	initial begin
     #80;
	 spi_cs = 1'b0; 	
	 #20;spi_cs = 1'b1; 
        #20;  
        spi_cs = 1'b0; 	  
	  #20; 
        spi_cs = 1'b1; 
        #20;  
        spi_cs = 1'b0; 
        datasend(8'h02);
        datasend(8'h10);
        datasend(8'h33);
        datasend(8'haa);
        datasend(8'haa);
        datasend(8'haa);
	 spi_cs = 1'b1; 
	 #20; 
	 spi_cs = 1'b0; 
	 #20; 
	 spi_cs = 1'b1; 
 
	 $finish;            // Quit the simulation
	end
 
 
 
    task datasend(input [7:0] senddata);
        begin 
            #5; 
        spi_sck = 1'b0;
        spi_mosi = senddata[7];
        #5; 
            spi_sck = 1'b1;
        #5;  
            spi_sck = 1'b0;
            spi_mosi = senddata[6];
        #5;  
            spi_sck = 1'b1;
        #5;   
            spi_sck = 1'b0;
            spi_mosi = senddata[5];
        #5;
        spi_sck = 1'b1;
        #5;        
        spi_sck = 1'b0;
            spi_mosi = senddata[4];
        #5;
        spi_sck = 1'b1;
        #5;       
        spi_sck = 1'b0;
            spi_mosi = senddata[3];
        #5;
        spi_sck = 1'b1;
        #5;       
        spi_sck = 1'b0;
            spi_mosi = senddata[2];
        #5;
        spi_sck = 1'b1;
        #5;       
        spi_sck = 1'b0;
            spi_mosi = senddata[1];
        #5;
        spi_sck = 1'b1;
        #5;       
        spi_sck = 1'b0;
            spi_mosi = senddata[0];
        #5;
        spi_sck = 1'b1;
        #5;
        spi_sck = 1'b0; 
        #5;
 
        end
    endtask
    spi_slave_nvram spi_slave_nvram_sim	( 
    .sys_rstn(sys_rstn),
    .spi_sck(spi_sck),
    .spi_cs(spi_cs),
    .spi_mosi(spi_mosi),
    .spi_miso(spi_miso)
 
    );	
 
 
    `probe(spi_sck);        // Probe signal "clk"
    `probe(spi_mosi);        // Probe signal "clk" 
	`probe(sys_rstn);        // Probe signal "clk"
	`probe(spi_cs);        // Probe signal "clk"
    `probe(spi_miso);        // Probe signal "clk" 
 
endmodule
 
module spi_slave_nvram
(
input sys_clk,
input sys_rstn,
//spi interface
input spi_sck,
input spi_cs,
input spi_mosi,
output  spi_miso, 
//nvram interface 
    output reg   [7:0] nvram_dq ,
    output reg   [7:0] nvram_dq1, 
    output reg   [7:0] nvram_dq2 
 
);
 
    reg [7:0] rINBUF;
    reg [7:0] rOUTBUF;
    assign spi_miso = rOUTBUF[7];
    reg rCStart[1:0]; 
    reg [5:0] rCnt;
    wire sCnt8;
    assign sCnt8 = (~|(rCnt[2:0])) & (|rCnt[5:3]);
 
    reg rFlagData;
 
 
    always@(posedge spi_sck or posedge spi_cs )begin
        if(spi_cs)begin
            rINBUF <= 'b0;
            rCnt <= 'b0;
        end
        else
        begin 
               rINBUF <= {rINBUF[6:0], spi_mosi}; 
               rCnt <= rCnt + 1'b1;   
        end
    end
 
    reg [7:0] rCmd;
    always@( negedge spi_sck) begin
        if(sCnt8)begin
            case( rCnt[4:3])  
                2'b00: begin nvram_dq <= rINBUF;  rOUTBUF <= 8'hf1; end
                2'b01: begin nvram_dq1 <= rINBUF; rOUTBUF <= 8'haa; end
                2'b10: begin nvram_dq2 <= rINBUF; rOUTBUF <= 8'h80; end
                2'b11: begin nvram_dq <= rINBUF;  rOUTBUF <= 8'h22; end
            endcase
 
        end
        else begin
            rOUTBUF <= {rOUTBUF[6:0],1'b0}; 
        end 
    end
 
    `probe(rCnt);
 
    `probe(spi_sck);
    `probe(rINBUF);
    `probe(rOUTBUF);
    `probe(sCnt8);
    `probe(nvram_dq);
    `probe(nvram_dq1);
    `probe(nvram_dq2);
 
 
endmodule

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.