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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spi_top.v

?? SPI協議的Verilog編程
?? V
字號:
//////////////////////////////////////////////////////////////////////////                                                              ////////  spi_top.v                                                   ////////                                                              ////////  This file is part of the SPI IP core project                ////////  http://www.opencores.org/projects/spi/                      ////////                                                              ////////  Author(s):                                                  ////////      - Simon Srot (simons@opencores.org)                     ////////                                                              ////////  All additional information is avaliable in the Readme.txt   ////////  file.                                                       ////////                                                              //////////////////////////////////////////////////////////////////////////////                                                              //////// Copyright (C) 2002 Authors                                   ////////                                                              //////// This source file may be used and distributed without         //////// restriction provided that this copyright statement is not    //////// removed from the file and that any derivative work contains  //////// the original copyright notice and the associated disclaimer. ////////                                                              //////// This source file is free software; you can redistribute it   //////// and/or modify it under the terms of the GNU Lesser General   //////// Public License as published by the Free Software Foundation; //////// either version 2.1 of the License, or (at your option) any   //////// later version.                                               ////////                                                              //////// This source is distributed in the hope that it will be       //////// useful, but WITHOUT ANY WARRANTY; without even the implied   //////// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      //////// PURPOSE.  See the GNU Lesser General Public License for more //////// details.                                                     ////////                                                              //////// You should have received a copy of the GNU Lesser General    //////// Public License along with this source; if not, download it   //////// from http://www.opencores.org/lgpl.shtml                     ////////                                                              //////////////////////////////////////////////////////////////////////////`include "spi_defines.v"`include "timescale.v"module spi_top(  // Wishbone signals  wb_clk_i, wb_rst_i, wb_adr_i, wb_dat_i, wb_dat_o, wb_sel_i,  wb_we_i, wb_stb_i, wb_cyc_i, wb_ack_o, wb_err_o, wb_int_o,  // SPI signals  ss_pad_o, sclk_pad_o, mosi_pad_o, miso_pad_i);  parameter Tp = 1;  // Wishbone signals  input                            wb_clk_i;         // master clock input  input                            wb_rst_i;         // synchronous active high reset  input                      [4:0] wb_adr_i;         // lower address bits  input                   [32-1:0] wb_dat_i;         // databus input  output                  [32-1:0] wb_dat_o;         // databus output  input                      [3:0] wb_sel_i;         // byte select inputs  input                            wb_we_i;          // write enable input  input                            wb_stb_i;         // stobe/core select signal  input                            wb_cyc_i;         // valid bus cycle input  output                           wb_ack_o;         // bus cycle acknowledge output  output                           wb_err_o;         // termination w/ error  output                           wb_int_o;         // interrupt request signal output                                                       // SPI signals                                       output          [`SPI_SS_NB-1:0] ss_pad_o;         // slave select  output                           sclk_pad_o;       // serial clock  output                           mosi_pad_o;       // master out slave in  input                            miso_pad_i;       // master in slave out                                                       reg                     [32-1:0] wb_dat_o;  reg                              wb_ack_o;  reg                              wb_int_o;                                                 // Internal signals  reg       [`SPI_DIVIDER_LEN-1:0] divider;          // Divider register  reg       [`SPI_CTRL_BIT_NB-1:0] ctrl;             // Control and status register  reg             [`SPI_SS_NB-1:0] ss;               // Slave select register  reg                     [32-1:0] wb_dat;           // wb data out  wire         [`SPI_MAX_CHAR-1:0] rx;               // Rx register  wire                             rx_negedge;       // miso is sampled on negative edge  wire                             tx_negedge;       // mosi is driven on negative edge  wire    [`SPI_CHAR_LEN_BITS-1:0] char_len;         // char len  wire                             go;               // go  wire                             lsb;              // lsb first on line  wire                             ie;               // interrupt enable  wire                             ass;              // automatic slave select  wire                             spi_divider_sel;  // divider register select  wire                             spi_ctrl_sel;     // ctrl register select  wire                       [3:0] spi_tx_sel;       // tx_l register select  wire                             spi_ss_sel;       // ss register select  wire                             tip;              // transfer in progress  wire                             pos_edge;         // recognize posedge of sclk  wire                             neg_edge;         // recognize negedge of sclk  wire                             last_bit;         // marks last character bit    // Address decoder  assign spi_divider_sel = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_DEVIDE);  assign spi_ctrl_sel    = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_CTRL);  assign spi_tx_sel[0]   = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_TX_0);  assign spi_tx_sel[1]   = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_TX_1);  assign spi_tx_sel[2]   = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_TX_2);  assign spi_tx_sel[3]   = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_TX_3);  assign spi_ss_sel      = wb_cyc_i & wb_stb_i & (wb_adr_i[`SPI_OFS_BITS] == `SPI_SS);    // Read from registers  always @(wb_adr_i or rx or ctrl or divider or ss)  begin    case (wb_adr_i[`SPI_OFS_BITS])`ifdef SPI_MAX_CHAR_128      `SPI_RX_0:    wb_dat = rx[31:0];      `SPI_RX_1:    wb_dat = rx[63:32];      `SPI_RX_2:    wb_dat = rx[95:64];      `SPI_RX_3:    wb_dat = {{128-`SPI_MAX_CHAR{1'b0}}, rx[`SPI_MAX_CHAR-1:96]};`else`ifdef SPI_MAX_CHAR_64      `SPI_RX_0:    wb_dat = rx[31:0];      `SPI_RX_1:    wb_dat = {{64-`SPI_MAX_CHAR{1'b0}}, rx[`SPI_MAX_CHAR-1:32]};      `SPI_RX_2:    wb_dat = 32'b0;      `SPI_RX_3:    wb_dat = 32'b0;`else      `SPI_RX_0:    wb_dat = {{32-`SPI_MAX_CHAR{1'b0}}, rx[`SPI_MAX_CHAR-1:0]};      `SPI_RX_1:    wb_dat = 32'b0;      `SPI_RX_2:    wb_dat = 32'b0;      `SPI_RX_3:    wb_dat = 32'b0;`endif`endif      `SPI_CTRL:    wb_dat = {{32-`SPI_CTRL_BIT_NB{1'b0}}, ctrl};      `SPI_DEVIDE:  wb_dat = {{32-`SPI_DIVIDER_LEN{1'b0}}, divider};      `SPI_SS:      wb_dat = {{32-`SPI_SS_NB{1'b0}}, ss};      default:      wb_dat = 32'bx;    endcase  end    // Wb data out  always @(posedge wb_clk_i or posedge wb_rst_i)  begin    if (wb_rst_i)      wb_dat_o <= #Tp 32'b0;    else      wb_dat_o <= #Tp wb_dat;  end    // Wb acknowledge  always @(posedge wb_clk_i or posedge wb_rst_i)  begin    if (wb_rst_i)      wb_ack_o <= #Tp 1'b0;    else      wb_ack_o <= #Tp wb_cyc_i & wb_stb_i & ~wb_ack_o;  end    // Wb error  assign wb_err_o = 1'b0;    // Interrupt  always @(posedge wb_clk_i or posedge wb_rst_i)  begin    if (wb_rst_i)      wb_int_o <= #Tp 1'b0;    else if (ie && tip && last_bit && pos_edge)      wb_int_o <= #Tp 1'b1;    else if (wb_ack_o)      wb_int_o <= #Tp 1'b0;  end    // Divider register  always @(posedge wb_clk_i or posedge wb_rst_i)  begin    if (wb_rst_i)        divider <= #Tp {`SPI_DIVIDER_LEN{1'b0}};    else if (spi_divider_sel && wb_we_i && !tip)      begin      `ifdef SPI_DIVIDER_LEN_8        if (wb_sel_i[0])          divider <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:0];      `endif      `ifdef SPI_DIVIDER_LEN_16        if (wb_sel_i[0])          divider[7:0] <= #Tp wb_dat_i[7:0];        if (wb_sel_i[1])          divider[`SPI_DIVIDER_LEN-1:8] <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:8];      `endif      `ifdef SPI_DIVIDER_LEN_24        if (wb_sel_i[0])          divider[7:0] <= #Tp wb_dat_i[7:0];        if (wb_sel_i[1])          divider[15:8] <= #Tp wb_dat_i[15:8];        if (wb_sel_i[2])          divider[`SPI_DIVIDER_LEN-1:16] <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:16];      `endif      `ifdef SPI_DIVIDER_LEN_32        if (wb_sel_i[0])          divider[7:0] <= #Tp wb_dat_i[7:0];        if (wb_sel_i[1])          divider[15:8] <= #Tp wb_dat_i[15:8];        if (wb_sel_i[2])          divider[23:16] <= #Tp wb_dat_i[23:16];        if (wb_sel_i[3])          divider[`SPI_DIVIDER_LEN-1:24] <= #Tp wb_dat_i[`SPI_DIVIDER_LEN-1:24];      `endif      end  end    // Ctrl register  always @(posedge wb_clk_i or posedge wb_rst_i)  begin    if (wb_rst_i)      ctrl <= #Tp {`SPI_CTRL_BIT_NB{1'b0}};    else if(spi_ctrl_sel && wb_we_i && !tip)      begin        if (wb_sel_i[0])          ctrl[7:0] <= #Tp wb_dat_i[7:0] | {7'b0, ctrl[0]};        if (wb_sel_i[1])          ctrl[`SPI_CTRL_BIT_NB-1:8] <= #Tp wb_dat_i[`SPI_CTRL_BIT_NB-1:8];      end    else if(tip && last_bit && pos_edge)      ctrl[`SPI_CTRL_GO] <= #Tp 1'b0;  end    assign rx_negedge = ctrl[`SPI_CTRL_RX_NEGEDGE];  assign tx_negedge = ctrl[`SPI_CTRL_TX_NEGEDGE];  assign go         = ctrl[`SPI_CTRL_GO];  assign char_len   = ctrl[`SPI_CTRL_CHAR_LEN];  assign lsb        = ctrl[`SPI_CTRL_LSB];  assign ie         = ctrl[`SPI_CTRL_IE];  assign ass        = ctrl[`SPI_CTRL_ASS];    // Slave select register  always @(posedge wb_clk_i or posedge wb_rst_i)  begin    if (wb_rst_i)      ss <= #Tp {`SPI_SS_NB{1'b0}};    else if(spi_ss_sel && wb_we_i && !tip)      begin      `ifdef SPI_SS_NB_8        if (wb_sel_i[0])          ss <= #Tp wb_dat_i[`SPI_SS_NB-1:0];      `endif      `ifdef SPI_SS_NB_16        if (wb_sel_i[0])          ss[7:0] <= #Tp wb_dat_i[7:0];        if (wb_sel_i[1])          ss[`SPI_SS_NB-1:8] <= #Tp wb_dat_i[`SPI_SS_NB-1:8];      `endif      `ifdef SPI_SS_NB_24        if (wb_sel_i[0])          ss[7:0] <= #Tp wb_dat_i[7:0];        if (wb_sel_i[1])          ss[15:8] <= #Tp wb_dat_i[15:8];        if (wb_sel_i[2])          ss[`SPI_SS_NB-1:16] <= #Tp wb_dat_i[`SPI_SS_NB-1:16];      `endif      `ifdef SPI_SS_NB_32        if (wb_sel_i[0])          ss[7:0] <= #Tp wb_dat_i[7:0];        if (wb_sel_i[1])          ss[15:8] <= #Tp wb_dat_i[15:8];        if (wb_sel_i[2])          ss[23:16] <= #Tp wb_dat_i[23:16];        if (wb_sel_i[3])          ss[`SPI_SS_NB-1:24] <= #Tp wb_dat_i[`SPI_SS_NB-1:24];      `endif      end  end    assign ss_pad_o = ~((ss & {`SPI_SS_NB{tip & ass}}) | (ss & {`SPI_SS_NB{!ass}}));    spi_clgen clgen (.clk_in(wb_clk_i), .rst(wb_rst_i), .go(go), .enable(tip), .last_clk(last_bit),                   .divider(divider), .clk_out(sclk_pad_o), .pos_edge(pos_edge),                    .neg_edge(neg_edge));    spi_shift shift (.clk(wb_clk_i), .rst(wb_rst_i), .len(char_len[`SPI_CHAR_LEN_BITS-1:0]),                   .latch(spi_tx_sel[3:0] & {4{wb_we_i}}), .byte_sel(wb_sel_i), .lsb(lsb),                    .go(go), .pos_edge(pos_edge), .neg_edge(neg_edge),                    .rx_negedge(rx_negedge), .tx_negedge(tx_negedge),                   .tip(tip), .last(last_bit),                    .p_in(wb_dat_i), .p_out(rx),                    .s_clk(sclk_pad_o), .s_in(miso_pad_i), .s_out(mosi_pad_o));endmodule  

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三区精华液| 欧美变态凌虐bdsm| 五月综合激情婷婷六月色窝| 欧美日韩不卡一区二区| 狠狠色狠狠色综合系列| 亚洲丝袜美腿综合| 日韩视频在线永久播放| 成人亚洲精品久久久久软件| 国产精品久久久久久妇女6080 | 亚洲自拍偷拍图区| 日韩欧美123| 91麻豆精品在线观看| 国内国产精品久久| 日日夜夜免费精品| 亚洲精品视频在线观看免费| 26uuu成人网一区二区三区| 日本乱人伦aⅴ精品| 成人免费观看男女羞羞视频| 久久99精品久久久久久| 欧美日韩精品二区第二页| 亚洲午夜免费福利视频| 日韩欧美中文一区| 国产最新精品精品你懂的| 中文字幕精品三区| 欧美日韩综合在线免费观看| 日韩中文字幕区一区有砖一区| 欧美一级欧美三级| 成人sese在线| 日韩av成人高清| 中文字幕不卡三区| 欧美日韩国产另类一区| 喷白浆一区二区| 亚洲欧美电影一区二区| 日韩久久免费av| 欧美日韩中文另类| 成人激情av网| 亚洲人123区| 久久久精品黄色| xfplay精品久久| 777精品伊人久久久久大香线蕉| 精品视频一区二区三区免费| 欧美亚洲另类激情小说| 久久精品欧美日韩| 日本成人在线看| 国产精品情趣视频| 久久婷婷色综合| 日韩手机在线导航| 欧美另类z0zxhd电影| fc2成人免费人成在线观看播放 | 国产一区日韩二区欧美三区| 亚洲免费伊人电影| 中文字幕日韩精品一区| 亚洲国产精品t66y| 中文字幕不卡一区| 国产欧美日韩在线看| 欧美国产日韩亚洲一区| 国产偷国产偷精品高清尤物 | 91国偷自产一区二区开放时间| 久久国产尿小便嘘嘘尿| 麻豆精品在线观看| 国产中文字幕精品| 国产69精品久久久久777| 国产精品18久久久久久vr| 国产激情精品久久久第一区二区| 国产精品99久久久久久宅男| 成人综合婷婷国产精品久久免费| 国产a级毛片一区| 99精品国产99久久久久久白柏| 国产精品12区| 欧美在线影院一区二区| 欧美日本视频在线| 久久久国际精品| 亚洲视频狠狠干| 亚洲精品你懂的| 日韩精品午夜视频| 白白色亚洲国产精品| 日韩视频在线一区二区| 亚洲激情av在线| 成人性视频网站| 精品国产伦理网| 天堂成人国产精品一区| 99在线精品视频| 国产午夜精品一区二区三区嫩草| 日一区二区三区| 在线看国产日韩| 一区二区三区中文在线| 国产传媒欧美日韩成人| ww亚洲ww在线观看国产| 蜜臀久久久久久久| 欧美日韩一区二区三区视频| 亚洲美女区一区| 95精品视频在线| 综合久久久久综合| 99精品视频一区| 亚洲黄色录像片| 欧美自拍偷拍一区| 三级精品在线观看| 欧美一二三四在线| 国产主播一区二区| 国产亚洲精品aa| 成人免费视频视频| 亚洲三级视频在线观看| 91激情在线视频| 日韩av一区二区三区| 精品国偷自产国产一区| 成人免费视频播放| 亚洲黄色在线视频| 91精品国产综合久久久久久| 蜜臀久久99精品久久久久宅男| 精品免费日韩av| 成人av电影在线| 日韩电影在线免费| 久久精品欧美日韩| 欧美伊人精品成人久久综合97| 捆绑调教美女网站视频一区| 中文字幕国产精品一区二区| 欧洲色大大久久| 国产精品一区二区三区网站| 亚洲精品免费看| 日韩久久久精品| 欧美午夜精品免费| 粉嫩嫩av羞羞动漫久久久| 亚洲成人动漫一区| 国产精品久久久久一区二区三区 | 欧美日韩国产综合久久| 国产一区二区三区免费观看| 亚洲福中文字幕伊人影院| 欧美国产精品专区| 日韩欧美在线综合网| 欧美日韩精品福利| 色综合天天性综合| 成人h版在线观看| 国产成人av一区二区三区在线 | 国产女主播一区| 日韩精品一区二区在线| 91精品国产综合久久婷婷香蕉| 不卡欧美aaaaa| 91麻豆精品国产| 一区二区高清在线| 亚洲视频网在线直播| 亚洲欧美日韩电影| 综合色中文字幕| 一区二区不卡在线视频 午夜欧美不卡在| 国产精品美女视频| 亚洲四区在线观看| 久久综合狠狠综合| 久久久www成人免费毛片麻豆| 日韩免费高清视频| 欧美人妇做爰xxxⅹ性高电影| 精品免费国产一区二区三区四区| aaa欧美大片| 国内偷窥港台综合视频在线播放| 亚欧色一区w666天堂| 中文字幕日韩一区二区| 久久久高清一区二区三区| 欧美剧情片在线观看| 欧美日韩国产123区| 91麻豆精品国产91久久久久久久久 | 91在线无精精品入口| 91搞黄在线观看| 欧美麻豆精品久久久久久| 国产毛片精品一区| 视频一区视频二区中文| 自拍偷拍欧美激情| 中文字幕制服丝袜成人av| 国产精品久久久久久久久动漫| 日韩精品高清不卡| 免费看欧美美女黄的网站| 午夜精品爽啪视频| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲成人激情av| 全部av―极品视觉盛宴亚洲| 日本va欧美va精品| av网站一区二区三区| 日韩视频永久免费| 久久视频一区二区| 日日夜夜精品视频天天综合网| 国产精品综合一区二区三区| 成人av在线播放网站| 中文一区在线播放| 午夜精品福利一区二区三区蜜桃| 成+人+亚洲+综合天堂| 欧美高清www午色夜在线视频| 中文字幕一区三区| 久久99日本精品| 精品捆绑美女sm三区| 精品综合久久久久久8888| 7777精品伊人久久久大香线蕉 | 26uuu久久综合| 丝袜美腿亚洲一区| 欧美卡1卡2卡| 久久疯狂做爰流白浆xx| 91精品综合久久久久久| 国产精品女主播在线观看| 国产成人午夜精品影院观看视频| 亚洲免费色视频| 久久精品夜色噜噜亚洲aⅴ| 94-欧美-setu| 国产麻豆成人精品| 五月激情综合色|