博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己写的还有问题的SD卡IP
阅读量:4480 次
发布时间:2019-06-08

本文共 5208 字,大约阅读时间需要 17 分钟。

module LDM_SDCARD

(
    //Avalon Clock
    input            csi_clk,
    input            csi_rst_n,
    //Avalon-MM
    input       avs_chipselect,
    input    [1:0]    avs_address,        //multiple of 4
//    input    [1:0]    avs_byteenable_n,    //1,2,4,8,16,54,128
    input            avs_write,
    input    [31:0]    avs_writedata,        //32bit cpu
    input            avs_read,
    output reg   [31:0]    avs_readdata,        //32bit cpu
    //Avalon Conduit
    output    reg        coe_sd_cs,
    output    reg        coe_sd_clk,
    input                coe_sd_miso,
    output    reg        coe_sd_mosi           
);

//------------------------------------------------------

always @(posedge csi_clk or negedge csi_rst_n)
begin
    if(!csi_rst_n)
        begin
          coe_sd_cs    =    1;
        end
    else if (avs_chipselect && avs_write && (avs_address == 2'b00))
        begin
          coe_sd_cs    =    avs_writedata[0];
        end
end
//------------------------------------------------------

reg[7:0]    avs_writedata_r;

reg[7:0]    avs_writestatus_r;
reg writedate_flag;
always @(posedge csi_clk or negedge csi_rst_n)
begin
    if(!csi_rst_n)
       begin avs_writedata_r = 7'd0;writedate_flag=1'b0;end
    else if (avs_chipselect && avs_write && (avs_address == 2'b01) && (write_flg ==1'b0))    //for steady state
        begin avs_writedata_r = avs_writedata[7:0];
              writedate_flag=1'b1;
        end
    else if( avs_writestatus_r==8'h40)
         writedate_flag=1'b0;
end
//------------------------------------------------------

//read

reg[7:0]    avs_readstatus_r;
reg[7:0]    avs_readdata_r;
reg readdate_flag;
reg readfinish;
always @(posedge csi_clk or negedge csi_rst_n)
begin
    if(!csi_rst_n)
        avs_readdata = 0;
    else if (avs_chipselect && avs_read )    //for steady state
         case(avs_address)
            2'b10:begin
                    avs_readdata=avs_readstatus_r ;
                    if(avs_readstatus_r==8'h00)begin readfinish=1'b0;readdate_flag=1'b1;end
                    else if(avs_readstatus_r==8'h80)readdate_flag=1'b0;
                   end
            2'b11:begin avs_readdata=avs_readdata_r; readfinish=1'b1;end
            default:avs_readdata=32'h0000;
        endcase
   else if(avs_readstatus_r==8'h80)readdate_flag=1'b0;    
end
//------------------------------------------------------
reg [4:0]cstate,nstate;
/*always @(posedge csi_clk or negedge csi_rst_n)
begin
   if(!csi_rst_n)cstate=5'd0;
   else cstate= nstate;
end*/
)
begin
  cstate=nstate;
end
//wire[4:0]cstate;
//assign cstate=nstate;
//------------------------------------------------------

reg write_flg;

//reg[2:0]count;
always @(posedge csi_clk or negedge csi_rst_n)
begin
    if(!csi_rst_n)
    begin
      write_flg =1'b0;//enable write to sd card flag
      coe_sd_clk=1'b1;
      coe_sd_mosi=1'b0;
      nstate = 5'd0;
      //count = 3'd0;
      avs_readstatus_r =8'h00;
      avs_writestatus_r=8'h00;
    end
   
     else if(writedate_flag )
     case(cstate)
      5'd0: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[7]; nstate = 5'd1; write_flg =1'b1;avs_writestatus_r=8'h00;end
      5'd1: begin coe_sd_clk=1'b1; nstate = 5'd2; end
      5'd2: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[6]; nstate = 5'd3; end
      5'd3: begin coe_sd_clk=1'b1; nstate = 5'd4; end
      5'd4: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[5]; nstate = 5'd5; end
      5'd5: begin coe_sd_clk=1'b1; nstate = 5'd6; end
      5'd6: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[4]; nstate = 5'd7; end
      5'd7: begin coe_sd_clk=1'b1; nstate = 5'd8; end
     
      5'd8: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[3]; nstate = 5'd9; end
      5'd9: begin coe_sd_clk=1'b1; nstate = 5'd10; end
      5'd10: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[2]; nstate = 5'd11; end
      5'd11: begin coe_sd_clk=1'b1; nstate= 5'd12; end
      5'd12: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[1]; nstate = 5'd13; end
      5'd13: begin coe_sd_clk=1'b1; nstate = 5'd14; end
      5'd14: begin coe_sd_clk=1'b0;coe_sd_mosi=avs_writedata_r[0]; nstate = 5'd15; end
      5'd15: begin coe_sd_clk=1'b1; nstate = 5'd16; write_flg =1'b0;end
      5'd16: begin  nstate = 5'd16; avs_writestatus_r=8'h40;end
      default: nstate = 5'd0;               
      endcase
     
      else if(readdate_flag)
     case(cstate)
      5'd0: begin coe_sd_clk=1'b0; nstate = 5'd1; avs_readstatus_r =8'h00;end
      5'd1: begin coe_sd_clk=1'b1; avs_readdata_r[7]=coe_sd_miso; nstate = 5'd2; end
      5'd2: begin coe_sd_clk=1'b0; nstate = 5'd3; end
      5'd3: begin coe_sd_clk=1'b1; avs_readdata_r[6]=coe_sd_miso; nstate = 5'd4; end
      5'd4: begin coe_sd_clk=1'b0; nstate = 5'd5; end
      5'd5: begin coe_sd_clk=1'b1; avs_readdata_r[5]=coe_sd_miso; nstate = 5'd6; end
      5'd6: begin coe_sd_clk=1'b0; nstate = 5'd7; end
      5'd7: begin coe_sd_clk=1'b1; avs_readdata_r[4]=coe_sd_miso; nstate = 5'd8; end
     
      5'd8: begin coe_sd_clk=1'b0; nstate = 5'd9; end
      5'd9: begin coe_sd_clk=1'b1; avs_readdata_r[3]=coe_sd_miso; nstate = 5'd10; end
      5'd10: begin coe_sd_clk=1'b0; nstate = 5'd11; end
      5'd11: begin coe_sd_clk=1'b1; avs_readdata_r[2]=coe_sd_miso; nstate= 5'd12; end
      5'd12: begin coe_sd_clk=1'b0; nstate = 5'd13; end
      5'd13: begin coe_sd_clk=1'b1; avs_readdata_r[1]=coe_sd_miso; nstate = 5'd14; end
      5'd14: begin coe_sd_clk=1'b0; nstate = 5'd15; end
      5'd15: begin coe_sd_clk=1'b1; avs_readdata_r[0]=coe_sd_miso; nstate = 5'd16; end
      5'd16: begin  nstate = 5'd16; avs_readstatus_r =8'h80;end 
      default: nstate = 5'd0;           
      endcase    
     
      else
       begin
        write_flg =1'b0;
        coe_sd_clk=1'b1;
        coe_sd_mosi=1'b0;
        nstate = 5'd0;
        avs_writestatus_r=8'h00;
        if(readfinish==1'b1)avs_readstatus_r =8'h00;
        //if(avs_readstatus_r==8'h80)count=count+1'b1;     //read finish delay N clk
        //if(count == 3'd5)begin count=3'd0; avs_readstatus_r =8'h00;end
       
        end
end
//------------------------------------------------------

endmodule

转载于:https://www.cnblogs.com/GL-BBL/archive/2012/08/25/2655565.html

你可能感兴趣的文章
Centos7 minimal 系列之rabbitmq安装(八)
查看>>
英语语法(2)----点破主谓宾系表三大句型
查看>>
html如何与cgi数据交换,HTML网页与CGI之间通信的 实例分析
查看>>
html如何调用flash插件,htmlflash播放器插件如何播放 网页播放器flash插件怎么解决...
查看>>
mysql数据在html上面显示不出来的,HTML表格不能正确显示MySQL数据
查看>>
数据包和html,数据包和数据报有何区别?
查看>>
jq 异步调用一个html,聊聊如何将jQuery的$.ajax()用于异步HTTP请求
查看>>
android 7.0宽度432,全球最小的4G手机,比手掌还小,安卓7.0
查看>>
android fragmentstatepageradapter框架,Android FragmentStatePagerAdapter
查看>>
html自适应meta标签,自适应布局meta标签中viewport、content、width、initial-scale、minimum-scale、maximum-scale总结...
查看>>
html怎么加入编辑器,HTML 编辑器
查看>>
python发挥程度_你为什么用 Python?
查看>>
file 选择的文件胖多有多大_「HTML5 进阶」FileAPI 文件操作实战,内附详细案例,建议收藏...
查看>>
玄惭 mysql_阿里云数据库专家玄惭的“武功”全记录之最佳实践、双十一特别篇...
查看>>
c mysql 时间段查询_mySql 时间段查询
查看>>
mysql sql乱码怎么解决_MYSQL数据库导入SQL文件出现乱码如何解决
查看>>
mysql的存储过程与事务_mysql的存储过程与事务入门
查看>>
java程序员闯关题网站_Java程序员每周必逛的十大学习网站
查看>>
python面试装饰器_Python测开面试题之装饰器
查看>>
flashcache mysql_flashcache的实现与分析
查看>>