⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sm_rxfifobi.v

📁 FPGA直接读取SD卡扇区数据
💻 V
字号:
//////////////////////////////////////////////////////////////////////////                                                              //////// sm_RxfifoBI.v                                                ////////                                                              //////// This file is part of the spiMaster opencores effort.//// <http://www.opencores.org/cores//>                           ////////                                                              //////// Module Description:                                          //////// ////                                                              //////// To Do:                                                       //////// ////                                                              //////// Author(s):                                                   //////// - Steve Fielding, sfielding@base2designs.com                 ////////                                                              //////////////////////////////////////////////////////////////////////////////                                                              //////// Copyright (C) 2008 Steve Fielding and OPENCORES.ORG          ////////                                                              //////// 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 "timescale.v"`include "spiMaster_defines.v"module sm_RxfifoBI (  address,   writeEn,   strobe_i,  busClk,   spiSysClk,   rstSyncToBusClk,   fifoSelect,  fifoDataIn,  busDataIn,   busDataOut,  fifoREn,  forceEmptySyncToSpiClk,  forceEmptySyncToBusClk,  numElementsInFifo  );input [2:0] address;input writeEn;input strobe_i;input busClk;input spiSysClk;input rstSyncToBusClk;input [7:0] fifoDataIn;input [7:0] busDataIn; output [7:0] busDataOut;output fifoREn;output forceEmptySyncToSpiClk;output forceEmptySyncToBusClk;input [15:0] numElementsInFifo;input fifoSelect;wire [2:0] address;wire writeEn;wire strobe_i;wire busClk;wire spiSysClk;wire rstSyncToBusClk;wire [7:0] fifoDataIn;wire [7:0] busDataIn; reg [7:0] busDataOut;reg fifoREn;wire forceEmptySyncToSpiClk;wire forceEmptySyncToBusClk;wire [15:0] numElementsInFifo;wire fifoSelect;reg forceEmptyReg;reg forceEmpty;reg forceEmptyToggle;reg [2:0] forceEmptyToggleSyncToSpiClk;//sync writealways @(posedge busClk)begin  if (writeEn == 1'b1 && fifoSelect == 1'b1 &&     address == `FIFO_CONTROL_REG && strobe_i == 1'b1 && busDataIn[0] == 1'b1)    forceEmpty <= 1'b1;  else    forceEmpty <= 1'b0;end//detect rising edge of 'forceEmpty', and generate toggle signalalways @(posedge busClk) begin  if (rstSyncToBusClk == 1'b1) begin    forceEmptyReg <= 1'b0;    forceEmptyToggle <= 1'b0;  end  else begin    if (forceEmpty == 1'b1)      forceEmptyReg <= 1'b1;    else      forceEmptyReg <= 1'b0;    if (forceEmpty == 1'b1 && forceEmptyReg == 1'b0)      forceEmptyToggle <= ~forceEmptyToggle;  endendassign forceEmptySyncToBusClk = (forceEmpty == 1'b1 && forceEmptyReg == 1'b0) ? 1'b1 : 1'b0;// double sync across clock domains to generate 'forceEmptySyncToSpiClk'always @(posedge spiSysClk) begin    forceEmptyToggleSyncToSpiClk <= {forceEmptyToggleSyncToSpiClk[1:0], forceEmptyToggle};endassign forceEmptySyncToSpiClk = forceEmptyToggleSyncToSpiClk[2] ^ forceEmptyToggleSyncToSpiClk[1];// async read muxalways @(address or fifoDataIn or numElementsInFifo)begin  case (address)      `FIFO_DATA_REG : busDataOut <= fifoDataIn;      `FIFO_DATA_COUNT_MSB : busDataOut <= numElementsInFifo[15:8];      `FIFO_DATA_COUNT_LSB : busDataOut <= numElementsInFifo[7:0];      default: busDataOut <= 8'h00;   endcaseend//generate fifo read strobealways @(address or writeEn or strobe_i or fifoSelect) begin  if (address == `FIFO_DATA_REG &&   writeEn == 1'b0 &&   strobe_i == 1'b1 &&   fifoSelect == 1'b1)    fifoREn <= 1'b1;  else    fifoREn <= 1'b0;endendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -