打印
[FPGA]

分享自已编写的SPI_MAIN防真模型

[复制链接]
858|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yupc123|  楼主 | 2014-1-16 14:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
`timescale 100 ns/1 ps
module SPI_Main_tb(SCK,CS,MOSI,MISO);
parameter CODE_R=8'h0A;                //SPI读命令
parameter CODE_W=8'h05;                //SPI写命令
parameter SCK_DELAY=100;
input MOSI;
output SCK,CS,MISO;
reg reg_SCK;
reg reg_CS;
wire MOSI;
reg reg_MISO;
reg [7:0] reg_readdat;
integer int_rdat,int_wdat;
assign MISO=reg_MISO;
assign SCK=reg_SCK;
assign CS=reg_CS;

always #(SCK_DELAY) reg_SCK = ~reg_SCK;
initial
begin
        reg_SCK=0;
        reg_CS=1;
        reg_MISO=1;
        reg_readdat=0;
        int_rdat=0;
        int_wdat=0;
        #(SCK_DELAY*50);
        read_dat();
        read_dat1();
        read_dat();
        write_dat1();
        read_dat();
        write_dat();
        read_dat();
end
task write_dat;
begin
        senddat(CODE_W);
        senddat(0);
        senddat(1);
        senddat(2);
        senddat(3);
        senddat(4);
        senddat(5);
        senddat(6);
        @(negedge reg_SCK);
        reg_CS=1;
        #(SCK_DELAY*10);
end
endtask
task read_dat;
begin
        senddat((CODE_R));
        senddat(0);
        @(posedge reg_SCK);
        readdat();
        readdat();
        readdat();
        readdat();
        readdat();
        readdat();
        @(posedge reg_SCK);
        reg_CS=1;
        #(SCK_DELAY*10);
end
endtask
task write_dat1;
begin
        senddat((CODE_W+1));
        senddat(0);
        senddat(1);
        senddat(2);
        senddat(3);
        senddat(4);
        senddat(5);
        senddat(6);
        @(negedge reg_SCK);
        reg_CS=1;
        #(SCK_DELAY*10);
end
endtask
task read_dat1;
begin
        senddat(CODE_R+1);
        senddat(0);
        @(posedge reg_SCK);
        readdat();
        readdat();
        readdat();
        readdat();
        readdat();
        readdat();
        @(posedge reg_SCK);
        reg_CS=1;
        #(SCK_DELAY*10);
end
endtask
task senddat;
input[7:0] sdat;
integer i;
begin
        int_wdat=sdat;
        for(i=0;i<8;i=i+1)
        begin
                @(negedge reg_SCK) reg_MISO=sdat[7];
                reg_CS=0;               
                sdat=sdat<<1;
        end
end
endtask
task readdat;
integer i;
begin
        for(i=0;i<8;i=i+1)
        begin
                @(posedge reg_SCK) reg_readdat={reg_readdat[6:0],MOSI};
                reg_CS=0;
        end
        int_rdat=reg_readdat;
end
endtask
endmodule

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

1

帖子

0

粉丝