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

📄 opb_ipif_slv_ps2_reg_dual.v

📁 edk实现lcd通信,c语言和vhdl语言
💻 V
字号:
//-------------------------------------------------------------------------// OPB Slave IPIF with PS2 Control Register Protocol Interface - Module//-------------------------------------------------------------------------////     XILINX IS PROVIDING THIS DESIGN, CODE, OR INFORMATION "AS IS"//     SOLELY FOR USE IN DEVELOPING PROGRAMS AND SOLUTIONS FOR//     XILINX DEVICES.  BY PROVIDING THIS DESIGN, CODE, OR INFORMATION//     AS ONE POSSIBLE IMPLEMENTATION OF THIS FEATURE, APPLICATION//     OR STANDARD, XILINX IS MAKING NO REPRESENTATION THAT THIS//     IMPLEMENTATION IS FREE FROM ANY CLAIMS OF INFRINGEMENT,//     AND YOU ARE RESPONSIBLE FOR OBTAINING ANY RIGHTS YOU MAY REQUIRE//     FOR YOUR IMPLEMENTATION.  XILINX EXPRESSLY DISCLAIMS ANY//     WARRANTY WHATSOEVER WITH RESPECT TO THE ADEQUACY OF THE//     IMPLEMENTATION, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OR//     REPRESENTATIONS THAT THIS IMPLEMENTATION IS FREE FROM CLAIMS OF//     INFRINGEMENT, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS//     FOR A PARTICULAR PURPOSE.//     //     (c) Copyright 2004 Xilinx, Inc.//     All rights reserved.// //-------------------------------------------------------------------------// Filename:     opb_ipif_slv_ps2_reg_dual.v// // Description:    //   This module implements an IPIF with a slave simple Control Register //   interface.  //// Design Notes://   The IP interface has a 32 bit data path with a 32 bit address bus.//   This design pipelines the signals going into or out of the IP to//   provide better timing and allow higher clock frequencies at the//   expense of greater access latency. ////-------------------------------------------------------------------------// Structure: // -- opb_ipif_slv_ps2_reg_dual.v////-------------------------------------------------------------------------// Author:      KD// History://   KD        5/15/01 -- EA 2 Release//   BF        5/17/01 -- Modified for IIC Control Register IPIF//   WPH      10/10/01 -- Modified for PS2 Control Register IPIF// //-------------------------------------------------------------------------// Naming Conventions://      active low signals:                    "*_n"//      clock signals:                         "clk", "clk_div#", "clk_#x" //      reset signals:                         "rst", "rst_n" //      generics/parameters:                   "C_*" //      user defined types:                    "*_TYPE" //      state machine next state:              "*_ns" //      state machine current state:           "*_cs" //      combinatorial signals:                 "*_com" //      pipelined or register delay signals:   "*_d#" //      counter signals:                       "*cnt*"//      clock enable signals:                  "*_ce" //      internal version of output port        "*_i"//      device pins:                           "*_pin" //      ports:                                 - Names begin w/ Uppercase //      processes:                             "*_PROCESS" //      component instantiations:              "<ENTITY_>I_<#|FUNC>//-------------------------------------------------------------------------///////////////////////////////////////////////////////////////////////////// Module Declaration///////////////////////////////////////////////////////////////////////////module opb_ipif_slv_ps2_reg_dual (  // OPB Slave Signals  OPB_ABus,        // I [0:31]  OPB_BE,          // I [0:3]  OPB_Clk,         // I  OPB_DBus,        // I [0:31]  OPB_RNW,         // I  OPB_Rst,         // I  OPB_select,      // I  OPB_seqAddr,     // I  Sl_DBus,         // O [0:31]  Sl_DBusEn,       // O  Sl_errAck,       // O  Sl_retry,        // O  Sl_toutSup,      // O  Sl_xferAck,      // O  Sys_Intr1,       // O   Sys_Intr2,       // O   // IP Related Signals  IP2Bus_Data,     // I [0:7]  IP2Bus_Error,    // I  IP2Bus_RdAck,    // I  IP2Bus_Retry,    // I  IP2Bus_ToutSup,  // I  IP2Bus_WrAck,    // I  IP2Bus_Intr1,    // I   IP2Bus_Intr2,    // I   Bus2IP_Addr,     // O [0:31]  Bus2IP_RegCE,    // O [0:15]   Bus2IP_Data,     // O [0:7]  Bus2IP_RdReq,    // O  Bus2IP_WrReq     // O  );   ///////////////////////////////////////////////////////////////////////////// Port Declarations///////////////////////////////////////////////////////////////////////////  // OPB Slave Signals  input  [0:31] OPB_ABus;  input  [0:3]  OPB_BE;  input         OPB_Clk;  input  [0:31] OPB_DBus;  input         OPB_RNW;  input         OPB_Rst;  input         OPB_select;  input         OPB_seqAddr;  output [0:31] Sl_DBus;  output        Sl_DBusEn;  output        Sl_errAck;  output        Sl_retry;  output        Sl_toutSup;  output        Sl_xferAck;  output        Sys_Intr1;  output        Sys_Intr2;  // IP Related Signals  input  [0:7] IP2Bus_Data;        input         IP2Bus_Error;  input         IP2Bus_RdAck;  input         IP2Bus_Retry;  input         IP2Bus_ToutSup;  input         IP2Bus_WrAck;  input         IP2Bus_Intr1;  input         IP2Bus_Intr2;  output [0:31] Bus2IP_Addr;  output [0:15] Bus2IP_RegCE;            output [0:7]  Bus2IP_Data;             output        Bus2IP_RdReq;  output        Bus2IP_WrReq;///////////////////////////////////////////////////////////////////////////// Parameter Declarations///////////////////////////////////////////////////////////////////////////  parameter     C_PS2_BAR         = 32'ha900_0000;///////////////////////////////////////////////////////////////////////////// Signal Declarations///////////////////////////////////////////////////////////////////////////   wire        addr_decode_hit;   reg         addr_hit;   wire        addr_hit_clear;   reg  [0:31] Bus2IP_Addr;   reg  [0:3]  Bus2IP_BE;   reg  [0:7]  Bus2IP_Data;   reg  [0:15] Bus2IP_RegCE;   reg         gen_xfer_ack;   reg         ip_retry_req;   reg         ip_tout_sup_req;   reg         opb_req_clr;   reg         opb_rnw_d1;   reg         reg_ce_d1;   reg  [0:7]  Sl_DBus_int;   reg         Sl_errAck;///////////////////////////////////////////////////////////////////////////// Main Body of Code///////////////////////////////////////////////////////////////////////////// logic to decode addresses.assign addr_decode_hit = (OPB_ABus[0:18]  == C_PS2_BAR[31:13]) & // PS2 #1 access offset 0 or                         (OPB_ABus[20:25] == C_PS2_BAR[11:6]);   // PS2 #2 access offset 0x1000// Address decode use 1 extra cycleassign addr_hit_clear = ~OPB_select | Sl_xferAck | Sl_retry | OPB_Rst;                          always @(posedge OPB_Clk)  if (addr_hit_clear)    addr_hit <= 1'b0;  else    addr_hit <= addr_decode_hit;always @(posedge OPB_Clk)  opb_rnw_d1 <= OPB_RNW;// Generate OPB Slave xferAckassign Sl_xferAck = gen_xfer_ack;// Send Back toutSup or Retry if IP requests itassign Sl_toutSup = ip_tout_sup_req;assign Sl_retry   = ip_retry_req;      always @(posedge OPB_Clk)begin  Bus2IP_Addr <= OPB_ABus;  Bus2IP_BE   <= OPB_BE;  Bus2IP_Data <= OPB_DBus[0:7];  // Hard coded 8 bit regs, params laterend// Pipeline response signals from IP to OPB - organize for 1 level of logic maxalways @(posedge OPB_Clk)  if (OPB_Rst | ~OPB_select | ~addr_hit | opb_req_clr) begin    gen_xfer_ack    <= 1'b0;    ip_tout_sup_req <= 1'b0;    ip_retry_req    <= 1'b0;    opb_req_clr     <= 1'b0;  end  else begin    gen_xfer_ack    <= ((opb_rnw_d1)? IP2Bus_RdAck : IP2Bus_WrAck) & addr_decode_hit;    ip_tout_sup_req <= IP2Bus_ToutSup;    ip_retry_req    <= IP2Bus_Retry & addr_decode_hit;    opb_req_clr     <= ((opb_rnw_d1)? IP2Bus_RdAck : IP2Bus_WrAck)                     | IP2Bus_Retry;  end// Decode PS2 Controller Registersalways @(posedge OPB_Clk)  begin    Bus2IP_RegCE[0]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h0;    Bus2IP_RegCE[1]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h1;    Bus2IP_RegCE[2]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h2;    Bus2IP_RegCE[3]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h3;    Bus2IP_RegCE[4]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h4;    Bus2IP_RegCE[5]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h5;    Bus2IP_RegCE[6]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h6;    Bus2IP_RegCE[7]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h7;    Bus2IP_RegCE[8]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h8;    Bus2IP_RegCE[9]  <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'h9;    Bus2IP_RegCE[10] <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'hA;    Bus2IP_RegCE[11] <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'hB;    Bus2IP_RegCE[12] <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'hC;    Bus2IP_RegCE[13] <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'hD;    Bus2IP_RegCE[14] <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'hE;    Bus2IP_RegCE[15] <= {OPB_ABus[19], OPB_ABus[27:29]} == 4'hF;  endalways @(posedge OPB_Clk)  reg_ce_d1 <= addr_hit & ~opb_req_clr;// Process Rd/Wr Requestsassign Bus2IP_RdReq = addr_hit & ~opb_req_clr &  opb_rnw_d1 & ~reg_ce_d1;assign Bus2IP_WrReq = addr_hit & ~opb_req_clr & ~opb_rnw_d1 & ~reg_ce_d1;// ML align to 0:7, MB aling to 24:31// Read Data Return  always @(posedge OPB_Clk)  if ( ~IP2Bus_RdAck | OPB_Rst)    Sl_DBus_int[0:7] <= 8'h00;  else    Sl_DBus_int[0:7] <= IP2Bus_Data[0:7];  assign Sl_DBus = {Sl_DBus_int, 24'h0};// Since Sl_DBus is already gated off when not active, Sl_DBusEn is// set to 1 so it can be optimized away if it is AND'ed with Sl_DBusassign Sl_DBusEn = 1'b1;// ErrAck Returnalways @(posedge OPB_Clk)  if (OPB_Rst | ((opb_rnw_d1)? ~IP2Bus_RdAck : ~IP2Bus_WrAck))    Sl_errAck <= 1'b0;  else     Sl_errAck <= addr_hit & ~opb_req_clr & IP2Bus_Error;// Pass along interruptsassign Sys_Intr1 = IP2Bus_Intr1;assign Sys_Intr2 = IP2Bus_Intr2;endmodule

⌨️ 快捷键说明

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