亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sd_controller.v

?? 基于FPGA的SD控制器實現(xiàn).目前實現(xiàn)讀操作功能,可作參考.
?? V
字號:
//Written by Vladimir Boykov//Last modification August, 2005module sd_controller (sys_clk, sd_clk, reset, cs, sd_cmd, address, sd_data, data_input, data_output, write_to_buffer,                      write, read, int_reg, clear);parameter CMD0 = 6'd0;    //Reset all cards to Idle stateparameter CMD2 = 6'd2;    //Ask CID numberparameter CMD3 = 6'd3;    //Ask to publish a new relative address RCAparameter CMD17 = 6'd17;  //Read single blockparameter CMD7 = 6'd7;    //Select/Deselect SD Cardparameter CMD13 = 6'd13;  //Send status registerparameter CMD55 = 6'd55;  //Application specific commandparameter ACMD6 = 6'd6;   //Set data line widthparameter ACMD41 = 6'd41; //Asks the accessed card to send its operating condition register (OCR) content in the response on the CMD line.                      input sys_clk;input sd_clk;input reset;input cs;inout sd_cmd;input [2:0] address;inout [3:0] sd_data;input [31:0] data_input;output [31:0] data_output;output write_to_buffer;input write;input read;output [31:0] int_reg;output clear;reg [31:0] control_reg, status_reg, serial_reg;reg [15:0] RCA;              //New published RCA of the cardreg [31:0] blocknum;         //Block number for readingwire status_req, control_req, serial_req;wire block_rdy;reg [4:0] cmd;reg [7:0] count;reg [3:0] command_count;reg rw;reg mode;reg write_to_fifo;reg clear_fifo;reg [7:0] count_resp;reg resp_start;reg ocr_rdy;reg [6:0] data_count;reg [4:0] bit_count;reg data_start;reg [31:0] word;reg block_rdy_reg;wire [47:0] command;wire [6:0] crc7;wire reset_cmd, stop_cmd;assign data_output = {word[7:0], word[15:8], word[23:16], word[31:24]};assign write_to_buffer = write_to_fifo;assign clear = clear_fifo;assign sd_data = 4'bzzzz;assign status_req =   ((address==3'b010) && cs);assign control_req =  ((address==3'b011) && cs);assign serial_req =   ((address==3'b100) && cs);assign block_rdy = (data_start && (data_count < 7'd1))? 1'b1 : 1'b0;assign int_reg = (status_req && read)? status_reg :                  ((serial_req && read)? serial_reg : 32'd0);always @ (posedge sys_clk or posedge reset) begin   if (reset) begin      block_rdy_reg <= 1'b0;   end else begin      if (block_rdy) begin         block_rdy_reg <= 1'b1;      end else if (control_reg) begin         block_rdy_reg <= 1'b0;      end   endend//CONTROL REGISTERalways @ (posedge sys_clk or posedge reset) begin   if (reset) begin      control_reg <= 32'd0;   end else begin      if (control_req && write && !data_start) control_reg <= data_input;      else if (block_rdy) control_reg <= 32'd0;   endendassign sd_cmd = (rw)? command[count] : 1'bz;assign command =  (command_count==5'd0)?  {2'b01, CMD0, 32'h0, crc7, 1'b1} :                 ((command_count==5'd1)?  {2'b01, CMD55, RCA, 16'h0, crc7, 1'b1} :                 ((command_count==5'd2)?  {2'b01, ACMD41, 32'h00FF8000, crc7, 1'b1} :                  ((command_count==5'd3)?  {2'b01, CMD2, 32'h0, crc7, 1'b1} :                  ((command_count==5'd4)?  {2'b01, CMD3, 32'h0, crc7, 1'b1} :                  ((command_count==5'd5)?  {2'b01, CMD7, RCA, 16'h0, crc7, 1'b1}  :                  ((command_count==5'd6)?  {2'b01, CMD13, RCA, 16'h0, crc7, 1'b1} :                  ((command_count==5'd7)?  {2'b01, CMD17, blocknum, crc7, 1'b1}   :                  ((command_count==5'd9)?  {2'b01, ACMD6, 30'h0, mode, 1'b0, crc7, 1'b1} :                  48'hz))))))));                                  //SD FSM MODELalways @ (posedge sd_clk or posedge reset) begin   if (reset) begin      cmd <= 5'd0;      count <= 8'd90;      mode <= 1'b0;      clear_fifo <= 1'b0;      rw <= 1'b0;      command_count <= 4'd0;      blocknum <= 32'd0;   end else begin      case (cmd)          //Waiting for 80 clocks cycle before work with SD          5'd0: begin             if (count) count <= count - 8'd1;             else cmd <= 5'd1;          end                //Prepearing to sending the command          5'd1: begin             count <= 8'd47;              rw <= 1'b1;             cmd <= 5'd2;          end          //Sending the command          5'd2: begin             if (count) count <= count - 8'd1;             else begin                rw <= 1'b0;                if (command_count) begin                   //Waiting for response                   cmd <= 5'd3;                end else begin                   //Send next command                   command_count <= command_count + 4'd1;                   count <= 8'd6;                   cmd <= 5'd0;                end             end          end          5'd3: begin             if (!count_resp) begin                if (command_count!=4'd2) begin                   if (command_count!=4'd6) begin                      command_count <= command_count + 4'd1;                      count <= 8'd31;                      cmd <= 5'd0;                   end else begin                      cmd <= 5'd31;                   end                end else begin                   if (ocr_rdy) begin                      command_count <= command_count + 4'd1;                      count <= 8'd31;                      cmd <= 5'd0;                   end else begin                      command_count <= 4'd1;                      count <= 8'd31;                      cmd <= 5'd0;                   end                 end             end          end          //Reading some block          5'd4: begin             count <= 8'd47;              clear_fifo <= 1'b0;             rw <= 1'b1;             cmd <= 5'd5;          end          5'd5: begin             if (count) count <= count - 8'd1;             else begin                rw <= 1'b0;                cmd <= 5'd6;             end          end          5'd6: begin             if (block_rdy) begin                cmd <= 5'd31;             end          end          //Getting a command from CPU          5'd31: begin             if ((control_reg[3:0]==4'b0001) && (status_reg==32'h900)) begin                 blocknum[31:9] <= control_reg[26:4];                blocknum[8:0] <= 9'd0;                command_count <= 5'd7;                clear_fifo <= 1'b1;                cmd <= 5'd4;             end else cmd <= 5'd31;          end          default: cmd <= 5'd0;      endcase   endend//Getting a response from SDalways @ (negedge sd_clk or negedge (!reset)) begin    if (reset) begin      count_resp <= 46;      resp_start <= 1'b0;      status_reg <= 0;      serial_reg <= 0;      RCA <= 16'd0;      ocr_rdy <= 1'b0;   end else begin      if (!rw) begin         if (!sd_cmd && !resp_start) begin            resp_start <= 1'b1;               end else if (resp_start) begin            if (count_resp) begin               count_resp <= count_resp - 8'd1;               //R1               if ((command_count==4'd1) || (command_count>4'd4)) begin                  if ((count_resp>7) && (count_resp<40)) begin                     status_reg[31:1] <= status_reg[30:0];                     status_reg[0] <= sd_cmd;                  end               //R3               end else if (command_count==4'd2) begin                  if ((count_resp==39) && sd_cmd)begin                     ocr_rdy <=1'b1;                       end               //R2               end else if (command_count==4'd3) begin                  if ((count_resp>23) && (count_resp<56)) begin                     serial_reg[31:1] <= serial_reg[30:0];                     serial_reg[0] <= sd_cmd;                  end               //R6               end else if (command_count==4'd4) begin                  if ((count_resp>23) && (count_resp<40)) begin                     RCA[15:1] <= RCA[14:0];                     RCA[0] <= sd_cmd;                  end               end            end else begin               resp_start <= 1'b0;            end         end      end else begin         if (command_count==4'd3) begin            count_resp <= 8'd134;         end else begin            count_resp <= 8'd46;         end      end   endend//Getting data blockalways @ (negedge sd_clk or negedge (!reset)) begin   if (reset) begin      data_count <= 7'd127;         bit_count  <= 5'd31;      data_start <= 1'b0;      write_to_fifo <= 1'b0;      word <= 32'd0;   end else begin      if (!sd_data[0] && !data_start && (cmd!=5'd31)) begin         data_start <= 1'b1;         write_to_fifo <= 1'b0;      end else if ((data_count || bit_count) && data_start) begin         if (bit_count) begin            write_to_fifo <= 1'b0;            bit_count <= bit_count - 5'd1;            word[31:1] <= word[30:0];            word[0] <= sd_data[0];         end else begin            word[31:1] <= word[30:0];            word[0] <= sd_data[0];            write_to_fifo <= 1'b1;            bit_count <= 5'd31;            data_count <= data_count - 7'd1;         end      end else if (data_start) begin         word[31:1] <= word[30:0];         word[0] <= sd_data[0];         write_to_fifo <= 1'b1;         data_count <= 7'd127;         bit_count <= 5'd31;         data_start <= 1'b0;      end else begin         write_to_fifo <= 1'b0;      end   endendassign reset_cmd = ((cmd==5'd1) || (cmd==5'd4))? 1'b1 : 1'b0;assign stop_cmd =  (count<8'd8)? 1'b1 : 1'b0;//Checksum for command tokencrc_unit_7  CRC_7 (                   .sd_clk(sd_clk),                    .reset(reset_cmd),                    .data_in(command[count]),                    .stop(stop_cmd),                    .crc(crc7)                  );endmodule

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本道精品一区二区三区| 国产三级精品在线| 精品美女被调教视频大全网站| 欧美国产精品久久| 午夜精品一区在线观看| 成人综合在线视频| 欧美一区二区视频在线观看2022| 国产精品超碰97尤物18| 久久精品国产精品亚洲精品| 色综合激情五月| 国产精品情趣视频| 国产一区二区福利视频| 欧美高清激情brazzers| 亚洲精品视频在线看| 国产成人精品综合在线观看 | 欧美色网站导航| 国产午夜三级一区二区三| 亚洲成人www| 欧美一三区三区四区免费在线看| 国产精品国产三级国产a| 久草这里只有精品视频| 日韩午夜精品电影| 亚洲图片欧美色图| 日本精品视频一区二区| 国产精品国产成人国产三级| 国产呦精品一区二区三区网站 | 成人免费观看av| 久久综合色鬼综合色| 美女视频一区二区三区| 欧美日韩精品三区| 亚洲自拍偷拍av| 在线亚洲免费视频| 亚洲一区二区三区自拍| 欧美网站大全在线观看| 一区二区三区四区国产精品| 91亚洲大成网污www| 亚洲免费观看高清完整版在线观看 | 男女性色大片免费观看一区二区| 欧洲一区二区av| 亚洲成av人**亚洲成av**| 欧美在线色视频| 亚洲成av人片一区二区三区| 欧美色国产精品| 视频在线观看一区| 日韩一区二区三区电影在线观看| 青娱乐精品视频| 久久综合99re88久久爱| 高清日韩电视剧大全免费| 国产精品精品国产色婷婷| 91网站在线观看视频| 一区二区三区欧美激情| 4438成人网| 极品销魂美女一区二区三区| 久久久www免费人成精品| 国产不卡免费视频| 日韩伦理电影网| 欧美日韩国产不卡| 黄色资源网久久资源365| 欧美高清在线视频| 欧美在线|欧美| 久久爱另类一区二区小说| 国产片一区二区| 在线日韩av片| 久久不见久久见免费视频7 | 精品国产乱码久久| 国产成人免费视频精品含羞草妖精| 国产精品人成在线观看免费 | 国产电影精品久久禁18| 国产精品黄色在线观看| 欧美日韩一区二区三区四区| 国内成人自拍视频| 亚洲精品国产精华液| 日韩一区二区在线看片| 丁香婷婷综合色啪| 香港成人在线视频| 中文一区二区在线观看| 91精品国产综合久久精品性色| 国产黑丝在线一区二区三区| 亚洲大片一区二区三区| 亚洲夂夂婷婷色拍ww47| 精品国内片67194| 一本一道久久a久久精品| 久久99国内精品| 亚洲精品免费播放| 国产午夜亚洲精品羞羞网站| 欧美精品精品一区| 99精品久久只有精品| 另类人妖一区二区av| 亚洲一区二区免费视频| 国产精品入口麻豆原神| 亚洲精品在线电影| 欧美日韩一区 二区 三区 久久精品| 国产经典欧美精品| 免费看精品久久片| 亚洲一区在线观看免费观看电影高清| 久久久久97国产精华液好用吗| 欧美日韩国产色站一区二区三区| 成人午夜在线播放| 国产剧情av麻豆香蕉精品| 日韩精品一区第一页| 亚洲欧美精品午睡沙发| 中文字幕精品一区二区精品绿巨人| 欧美一级日韩免费不卡| 欧美日韩在线播放| 91欧美激情一区二区三区成人| 国产成人午夜99999| 国产做a爰片久久毛片| 久久国产夜色精品鲁鲁99| 日产国产欧美视频一区精品| 亚洲自拍欧美精品| 亚洲黄色av一区| 亚洲精品成人天堂一二三| 中文字幕在线免费不卡| 中文字幕一区二区三区四区| 国产精品美女一区二区| 日本一区二区三区在线不卡| 国产亚洲欧美日韩在线一区| 久久中文娱乐网| 国产偷国产偷亚洲高清人白洁| 欧美精品一区二区三区四区| 欧美tickling挠脚心丨vk| 日韩欧美在线不卡| 精品久久国产字幕高潮| 26uuu久久天堂性欧美| 久久综合色天天久久综合图片| 久久久国产午夜精品| 国产精品毛片久久久久久| 国产精品久久久久久亚洲伦| 亚洲欧美日韩国产综合| 亚洲一区二区不卡免费| 亚洲小说欧美激情另类| 日本在线观看不卡视频| 韩国av一区二区三区| 国产福利精品导航| thepron国产精品| 欧美唯美清纯偷拍| 日韩美一区二区三区| 欧美国产精品中文字幕| 一区二区三区精品在线| 天堂va蜜桃一区二区三区漫画版| 免费成人av资源网| 在线观看日韩高清av| 欧美精品一二三四| 精品久久国产老人久久综合| 亚洲国产精品黑人久久久| 亚洲美腿欧美偷拍| 天堂精品中文字幕在线| 国产传媒一区在线| 一本色道久久综合亚洲91| 欧美色男人天堂| 久久蜜臀精品av| 亚洲影视在线播放| 国产在线精品国自产拍免费| 色久优优欧美色久优优| 欧美一级专区免费大片| 国产精品久99| 麻豆91在线观看| 本田岬高潮一区二区三区| 欧美精品xxxxbbbb| 国产日产欧产精品推荐色| 亚洲成人tv网| 成人h精品动漫一区二区三区| 欧美日韩二区三区| 中文字幕精品综合| 美腿丝袜亚洲综合| 色伊人久久综合中文字幕| 欧美精品一区二区久久久| 一区二区在线观看视频| 国产精品自拍一区| 欧美日韩精品免费观看视频| 国产精品天干天干在观线| 免费高清成人在线| 色婷婷狠狠综合| 国产欧美精品国产国产专区| 日韩av电影免费观看高清完整版| 99久久精品费精品国产一区二区| 日韩欧美国产一区二区在线播放| 亚洲精品ww久久久久久p站| 国产成人综合自拍| 538prom精品视频线放| 国产乱子轮精品视频| 欧美日韩一二三| 亚洲欧美色图小说| 国产91对白在线观看九色| 日韩欧美黄色影院| 天天综合天天做天天综合| 91毛片在线观看| 国产精品国产三级国产三级人妇| 国产最新精品精品你懂的| 日韩欧美二区三区| 偷拍亚洲欧洲综合| 欧美日韩一区久久| 亚洲第一搞黄网站| 色成人在线视频| 亚洲天堂精品视频| av男人天堂一区| 亚洲视频免费观看| 一本大道久久a久久精二百| 亚洲男帅同性gay1069| 91免费观看视频在线|