pci_wbw_wbr_fifos.v
上传用户:quan1896
上传日期:2014-05-14
资源大小:211k
文件大小:45k
- <!-- pf_header_start -->
- <html>
- <head>
- <META NAME="keywords" CONTENT="cores, VHDL, Verilog HDL, ASIC, Synthesizable,
- standard cell, IP, Intellectual Property, 32-bit RISC, UART, PCI, SDRAM,
- full custom, system on a chip, SOC, reusable, design, development, synthesis,
- designs, developers, C, Linux, eCos, open, free, open source cores, RTL code,
- system-on-a-chip, circuits, digital, GNU, GPL, core, controller, processor,
- system design, chip design, EDA, design methodology, design tools, ASICs, programmable logic,
- FPGA's, PLDs, CPLDs, verification, Synthesis, HDL, Simulation, IC design software,
- semiconductor design, integrated circuits, system designs, chip designs, EDAs,
- design methodologies, design tool, ASIC, programmable logics, FPGA, PLD, CPLD, Synthesis,
- circuit, Synopsys, system design, chip design, programmable logic, FPGA's, PLDs,
- CPLDs, verification, Simulation">
- <META NAME="description" CONTENT="OPENCORES.ORG endorses development and hosts
- a repository of free, open-source cores (chip designs) and supplemental
- platforms (boards).">
- <STYLE type=text/css>
- BODY {margin: 0;}
- BODY, P, DIV, TD, TR, TH, FORM, OL, UL, LI, B, I, INPUT, TEXTAREA, SELECT,
- FONT {font-size: 10pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- P, TD, FORM, TEXTAREA {font-size: 10pt;}
- H1, H2 {FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica; font-size: 13pt; text-decoration: none}
- .noline {text-decoration: none;}
- .menu_top {text-decoration: none; font-weight: bold;
- font-size: 7pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .menu_section {text-decoration: none; font-weight: bold;
- font-size: 10pt; color: #ffffff; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .menu_item {font-size: 10pt; color: #004488; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .menu_section_admin {text-decoration: none; font-weight: bold;
- font-size: 10pt; color: #ffff44; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .page_title {text-decoration: none; font-weight: bold; color: #c00000; font-size: 13pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .block_title {text-decoration: none; font-weight: bold; font-size: 11pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .block_subtitle {text-decoration: none; font-weight: bold; font-size: 10pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .title {text-decoration: none; font-weight: bold; font-size: 10pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .large {font-size: 13pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .medium {font-size: 10pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .small {font-size: 7pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .ultrasmall {font-size: 3pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
- .button { font-family:Verdana, Tahoma, Arial, Helvetica; }
- .searchfield {font-family: verdana, arial, helvetica; font-size: 10px; color: #333333; width: 80px; height: 17px;}
- </STYLE>
- <title>OPENCORES.ORG</title>
- <script laguage="Javascript">
- function check(msg) {
- if(confirm(msg)) {
- return true
- } else {
- return false
- }
- }
- </script>
- </head>
-
- <body
- bgcolor="#e0e0e0"
- topmargin="0"
- leftmargin="0"
- marginwidth="0"
- marginheight="0"
- link="#004488"
- alink="#ff3300"
- vlink="#444444"
- >
- <a name="top">
- <!-- pf_header_end -->
- <center>
- <table cellpadding=0 cellspacing=0 border=0 width=96%><tr>
- <td width=1 bgcolor=#000000><img width=1 src="/images/dotty.gif"></td>
- <td>
- <table border=0 cellpadding=0 cellspacing=0 width=100%>
- <tr><td background="/images/topbg.gif" bgcolor=#aaddff height=70>
- <table width=100% border=0 ><tr><td width=180>
- <a href="/"><img border=0 src="/images/oc_logo.gif"></a>
- </td><td>
- <center>
- <!--
- <a title="" href="/banner.cgi"><img width=468 height=60 border=0 alt="" src=""></a>
- //-->
- <script type="text/javascript"><!--
- google_ad_client = "pub-9285819221080148";
- xgoogle_ad_width = 728;
- xgoogle_ad_height = 79;
- xgoogle_ad_format = "728x90_as";
- google_ad_width = 468;
- google_ad_height = 47;
- google_ad_format = "468x60_as";
- google_ad_type = "text_image";
- google_ad_channel ="3274390903";
- google_color_border = "aaddff";
- xgoogle_color_border = "ffee88";
- xgoogle_color_bg = "FFEE88";
- google_color_bg = "aaddFF";
- google_color_link = "004488";
- google_color_url = "b00000";
- google_color_text = "000000";
- //--></script>
- <script type="text/javascript"
- src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
- </script>
- </center>
- </td><td align=right>
- </td>
- </tr></table>
- </td></tr>
- <tr bgcolor=#000000><td><img height=1 src="/images/dotty.gif"></td></tr>
- <tr><td bgcolor=#ffffff>
- <table border=0 cellpadding=0 cellspacing=0 width=100%><tr>
- <td bgcolor=#ffee88 width=60% background="/images/menu1.gif"></td>
- <td bgcolor=#ffee88 width=15 background="/images/menu1.gif" align=right><input type=image border=0 src="/images/exp1pf.gif" onclick="javascript:window.location='/pf.cgi?url=/cvsweb.shtml/pci/rtl/verilog/pci_wbw_wbr_fifos.v?rev=1.7'"></a></td>
- <td bgcolor=#ffffff align=right nowrap>
-
- <font class=menu_top size=-1>
-
- <a class=menu_top href="/login.cgi/login">LOGIN</a>
-
- :::
-
-
- <a class=menu_top href="/recover_pass.cgi/recover_pass">RECOVER PASS</a>
-
- :::
-
-
- <a class=menu_top href="/get_account.cgi/get_account">GET ACCOUNT</a>
-
-
-
- </font>
- </td></tr>
- <tr bgcolor=#ffffff>
- <td></td>
- <td></td>
- <td bgcolor=#000000><img src="/images/dotty.gif"></td>
- </tr>
- </table>
- <table border=0 cellpadding=0 cellspacing=0>
- <tr>
- <td width=10><img width=10 src="/images/dotty.gif"></td>
- <td width=120 valign=top>
-
- <table width=100% border=0 cellpadding=2 cellspacing=0>
- <tr><td><img height=2 src="/images/dotty.gif"></td></tr>
-
- <tr><td bgcolor="#347FB8">
- <img src="/images/bullet.gif">
-
- <font class=menu_section>Browse</font>
-
- </td></tr>
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/browse.cgi/by_category"><font class=menu_item>Projects</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/cvsweb.shtml/"><font class=menu_item>Code (CVS)</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/forums.cgi"><font class=menu_item>Forums</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/news.cgi/list/1"><font class=menu_item>News</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/articles.cgi/list"><font class=menu_item>Articles</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/polls.cgi/list"><font class=menu_item>Polls</font></a></li>
-
- </td></tr>
-
-
- <tr><td><font size=-2> </font></td></tr>
-
- <tr><td bgcolor="#347FB8">
- <img src="/images/bullet.gif">
-
- <font class=menu_section>OpenCores</font>
-
- </td></tr>
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/faq.cgi/index"><font class=menu_item>FAQ</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/cvs_howto"><font class=menu_item>CVS HowTo</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/mission"><font class=menu_item>Mission</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/media"><font class=menu_item>Media</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/tools"><font class=menu_item>Tools</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/sponsors"><font class=menu_item>Sponsors</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/mirrors"><font class=menu_item>Mirrors</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/logos"><font class=menu_item>Logos</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opencores/contacts"><font class=menu_item>Contact us</font></a></li>
-
- </td></tr>
-
-
- <tr><td><font size=-2> </font></td></tr>
-
- <tr><td bgcolor="#347FB8">
- <img src="/images/bullet.gif">
-
- <font class=menu_section>Tools</font>
-
- </td></tr>
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <font class=menu_item><a href="/search.cgi">Search</a><br><table><tr><form action=/search.cgi/do_search><td><font class=small> </font></td><td><input class=searchfield type=text name=query></td></form></tr></table></font></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/cvsget.shtml"><font class=menu_item>Download Cores (CVSGet)</font></a></li>
-
- </td></tr>
-
-
- <tr><td><font size=-2> </font></td></tr>
-
- <tr><td bgcolor="#347FB8">
- <img src="/images/bullet.gif">
-
- <font class=menu_section>More</font>
-
- </td></tr>
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/wishbone/"><font class=menu_item>Wishbone</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/perlilog/"><font class=menu_item>Perlilog</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/edatools/"><font class=menu_item>EDA tools</font></a></li>
-
- </td></tr>
-
-
- <tr><td>
-
-
- <li class=small>
-
-
-
- <a class=menu_item href="/projects.cgi/web/opentech/"><font class=menu_item>OpenTech CD</font></a></li>
-
- </td></tr>
-
-
- <tr><td><font size=-2> </font></td></tr>
-
- </table>
- </td>
- <td width=10><img width=10 src="/images/dotty.gif"></td>
- <td background="/images/vpd.gif"><img width=1 src="/images/dotty.gif"></td>
- <td width=10><img width=10 src="/images/dotty.gif"></td>
- <td valign=top>
-
- <table width=100% cellpadding=2 cellspacing=0 border=0>
- <tr><td><img height=2 src="/images/dotty.gif"></td></tr>
- </table>
-
- <table width=100% cellspacing=0 cellpadding=0 border=0><tr><td>
- <!-- pf_body_start -->
-
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html>
- <head>
- <title>pci/rtl/verilog/pci_wbw_wbr_fifos.v - view - 1.7</title>
- <meta name="robots" content="nofollow" />
- <meta name="generator" content="FreeBSD-CVSweb 3.0.5" />
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
- <meta http-equiv="Content-Style-Type" content="text/css" />
- <link rel="stylesheet" type="text/css" href="/css/cvsweb.css" />
- </head>
- <body class="src">
- <table class="navigate-header" width="100%" summary="Navigation">
- <tr>
- <td>
- <a href="./pci_wbw_wbr_fifos.v#rev1.7"><img src="/icons/back.gif" alt="[BACK]" border="0" width="20" height="22" /></a><b>Return to <a href="./pci_wbw_wbr_fifos.v#rev1.7">pci_wbw_wbr_fifos.v</a> CVS log</b> <img src="/icons/text.gif" alt="[TXT]" border="0" width="20" height="22" /></td> <td style="text-align: right"><img src="/icons/dir.gif" alt="[DIR]" border="0" width="20" height="22" /> <b>Up to <a href="/cvsweb.shtml/#dirlist">[Official OpenCores CVS Repository]</a> / <a href="/cvsweb.shtml/pci/#dirlist">pci</a> / <a href="/cvsweb.shtml/pci/rtl/#dirlist">rtl</a> / <a href="/cvsweb.shtml/pci/rtl/verilog/#dirlist">verilog</a></b></td>
- </tr>
- </table>
- <hr />
- <div class="log-markup">
- File:
- <a href="/cvsweb.shtml/#dirlist">[Official OpenCores CVS Repository]</a> / <a href="/cvsweb.shtml/pci/#dirlist">pci</a> / <a href="/cvsweb.shtml/pci/rtl/#dirlist">rtl</a> / <a href="/cvsweb.shtml/pci/rtl/verilog/#dirlist">verilog</a> / <a href="/cvsweb.shtml/pci/rtl/verilog/pci_wbw_wbr_fifos.v">pci_wbw_wbr_fifos.v</a><br />
- <a name="rev1.7"></a><a name="HEAD"></a>
- Revision <b>1.7</b>: <a href="/cvsweb.cgi/~checkout~/pci/rtl/verilog/pci_wbw_wbr_fifos.v?rev=1.7;content-type=text%2Fplain" class="download-link">download</a> - view: <a href="pci_wbw_wbr_fifos.v?rev=1.7;content-type=text%2Fplain" class="display-link">text</a>, <a href="pci_wbw_wbr_fifos.v?annotate=1.7">annotated</a> - <a href="pci_wbw_wbr_fifos.v?r1=1.7#rev1.7">select for diffs</a><br />
- <i>Tue Jul 4 13:16:19 2006 UTC</i> (10 months, 2 weeks ago) by <i>mihad</i><br />
- Branches: <a href="./pci_wbw_wbr_fifos.v?only_with_tag=MAIN">MAIN</a><br />
- CVS tags: <a href="./pci_wbw_wbr_fifos.v?only_with_tag=HEAD">HEAD</a><br />
- <pre class="log">
- Write burst performance patch applied.
- Not tested. Everything should be backwards
- compatible, since functional code is ifdefed.
- </pre>
- </div>
- <hr /><pre>
- //////////////////////////////////////////////////////////////////////
- //// ////
- //// File name "wbw_wbr_fifos.v" ////
- //// ////
- //// This file is part of the "PCI bridge" project ////
- //// http://www.opencores.org/cores/pci/ ////
- //// ////
- //// Author(s): ////
- //// - Miha Dolenc (mihad@opencores.org) ////
- //// ////
- //// All additional information is avaliable in the README ////
- //// file. ////
- //// ////
- //// ////
- //////////////////////////////////////////////////////////////////////
- //// ////
- //// Copyright (C) 2001 Miha Dolenc, mihad@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 ////
- //// ////
- //////////////////////////////////////////////////////////////////////
- //
- // CVS Revision History
- //
- // $Log: pci_wbw_wbr_fifos.v,v $
- // Revision 1.7 2006/07/04 13:16:19 mihad
- // Write burst performance patch applied.
- // Not tested. Everything should be backwards
- // compatible, since functional code is ifdefed.
- //
- // Revision 1.6 2003/12/19 11:11:30 mihad
- // Compact PCI Hot Swap support added.
- // New testcases added.
- // Specification updated.
- // Test application changed to support WB B3 cycles.
- //
- // Revision 1.5 2003/10/17 09:11:52 markom
- // mbist signals updated according to newest convention
- //
- // Revision 1.4 2003/08/14 13:06:03 simons
- // synchronizer_flop replaced with pci_synchronizer_flop, artisan ram instance updated.
- //
- // Revision 1.3 2003/03/26 13:16:18 mihad
- // Added the reset value parameter to the synchronizer flop module.
- // Added resets to all synchronizer flop instances.
- // Repaired initial sync value in fifos.
- //
- // Revision 1.2 2003/01/30 22:01:09 mihad
- // Updated synchronization in top level fifo modules.
- //
- // Revision 1.1 2003/01/27 16:49:31 mihad
- // Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed.
- //
- // Revision 1.9 2002/10/18 03:36:37 tadejm
- // Changed wrong signal name mbist_sen into mbist_ctrl_i.
- //
- // Revision 1.8 2002/10/17 22:49:22 tadejm
- // Changed BIST signals for RAMs.
- //
- // Revision 1.7 2002/10/11 10:09:01 mihad
- // Added additional testcase and changed rst name in BIST to trst
- //
- // Revision 1.6 2002/10/08 17:17:06 mihad
- // Added BIST signals for RAMs.
- //
- // Revision 1.5 2002/09/30 16:03:04 mihad
- // Added meta flop module for easier meta stable FF identification during synthesis
- //
- // Revision 1.4 2002/09/25 15:53:52 mihad
- // Removed all logic from asynchronous reset network
- //
- // Revision 1.3 2002/02/01 15:25:14 mihad
- // Repaired a few bugs, updated specification, added test bench files and design document
- //
- // Revision 1.2 2001/10/05 08:20:12 mihad
- // Updated all files with inclusion of timescale file for simulation purposes.
- //
- // Revision 1.1.1.1 2001/10/02 15:33:47 mihad
- // New project directory structure
- //
- //
- `include "pci_constants.v"
- // synopsys translate_off
- `include "timescale.v"
- // synopsys translate_on
- module pci_wbw_wbr_fifos
- (
- wb_clock_in,
- pci_clock_in,
- reset_in,
- wbw_wenable_in,
- wbw_addr_data_in,
- wbw_cbe_in,
- wbw_control_in,
- wbw_renable_in,
- wbw_addr_data_out,
- wbw_cbe_out,
- wbw_control_out,
- // wbw_flush_in, write fifo flush not used
- wbw_almost_full_out,
- wbw_full_out,
- wbw_empty_out,
- wbw_transaction_ready_out,
- wbw_half_full_out, ////Robert, burst issue
- wbr_wenable_in,
- wbr_data_in,
- wbr_be_in,
- wbr_control_in,
- wbr_renable_in,
- wbr_data_out,
- wbr_be_out,
- wbr_control_out,
- wbr_flush_in,
- wbr_empty_out
-
- `ifdef PCI_BIST
- ,
- // debug chain signals
- mbist_si_i, // bist scan serial in
- mbist_so_o, // bist scan serial out
- mbist_ctrl_i // bist chain shift control
- `endif
- ) ;
- /*-----------------------------------------------------------------------------------------------------------
- System inputs:
- wb_clock_in - WISHBONE bus clock
- pci_clock_in - PCI bus clock
- reset_in - reset from control logic
- -------------------------------------------------------------------------------------------------------------*/
- input wb_clock_in, pci_clock_in, reset_in ;
- /*-----------------------------------------------------------------------------------------------------------
- WISHBONE WRITE FIFO interface signals prefixed with wbw_ - FIFO is used for posted writes initiated by
- WISHBONE master, traveling through FIFO and are completed on PCI by PCI master interface
- write enable signal:
- wbw_wenable_in = write enable input for WBW_FIFO - driven by WISHBONE slave interface
- data input signals:
- wbw_addr_data_in = data input - data from WISHBONE bus - first entry of transaction is address others are data entries
- wbw_cbe_in = bus command/byte enable(~SEL[3:0]) input - first entry of transaction is bus command, other are byte enables
- wbw_control_in = control input - encoded control bus input
- read enable signal:
- wbw_renable_in = read enable input driven by PCI master interface
- data output signals:
- wbw_addr_data_out = data output - data from WISHBONE bus - first entry of transaction is address, others are data entries
- wbw_cbe_out = bus command/byte enable output - first entry of transaction is bus command, others are byte enables
- wbw_control_out = control input - encoded control bus input
- status signals - monitored by various resources in the core
- wbw_flush_in = flush signal input for WBW_FIFO - when asserted, fifo is flushed(emptied)
- wbw_almost_full_out = almost full output from WBW_FIFO
- wbw_full_out = full output from WBW_FIFO
- wbw_empty_out = empty output from WBW_FIFO
- wbw_transaction_ready_out = output indicating that one complete transaction is waiting in WBW_FIFO
- -----------------------------------------------------------------------------------------------------------*/
- // input control and data
- input wbw_wenable_in ;
- input [31:0] wbw_addr_data_in ;
- input [3:0] wbw_cbe_in ;
- input [3:0] wbw_control_in ;
- // output control and data
- input wbw_renable_in ;
- output [31:0] wbw_addr_data_out ;
- output [3:0] wbw_cbe_out ;
- output [3:0] wbw_control_out ;
- // flush input
- // input wbw_flush_in ; // not used
- // status outputs
- output wbw_almost_full_out ;
- output wbw_full_out ;
- output wbw_empty_out ;
- output wbw_transaction_ready_out ;
- output wbw_half_full_out; ////Robert, burst issue
- /*-----------------------------------------------------------------------------------------------------------
- WISHBONE READ FIFO interface signals prefixed with wbr_ - FIFO is used for holding delayed read completions
- initiated by master on WISHBONE bus and completed on PCI bus,
- write enable signal:
- wbr_wenable_in = write enable input for WBR_FIFO - driven by PCI master interface
- data input signals:
- wbr_data_in = data input - data from PCI bus - there is no address entry here, since address is stored in separate register
- wbr_be_in = byte enable(~BE#[3:0]) input - byte enables - same through one transaction
- wbr_control_in = control input - encoded control bus input
- read enable signal:
- wbr_renable_in = read enable input driven by WISHBONE slave interface
- data output signals:
- wbr_data_out = data output - data from PCI bus
- wbr_be_out = byte enable output(~#BE)
- wbr_control_out = control output - encoded control bus output
- status signals - monitored by various resources in the core
- wbr_flush_in = flush signal input for WBR_FIFO - when asserted, fifo is flushed(emptied)
- wbr full_out = full output from WBR_FIFO
- wbr_empty_out = empty output from WBR_FIFO
- -----------------------------------------------------------------------------------------------------------*/
- // input control and data
- input wbr_wenable_in ;
- input [31:0] wbr_data_in ;
- input [3:0] wbr_be_in ;
- input [3:0] wbr_control_in ;
- // output control and data
- input wbr_renable_in ;
- output [31:0] wbr_data_out ;
- output [3:0] wbr_be_out ;
- output [3:0] wbr_control_out ;
- // flush input
- input wbr_flush_in ;
- output wbr_empty_out ;
- `ifdef PCI_BIST
- /*-----------------------------------------------------
- BIST debug chain port signals
- -----------------------------------------------------*/
- input mbist_si_i; // bist scan serial in
- output mbist_so_o; // bist scan serial out
- input [`PCI_MBIST_CTRL_WIDTH - 1:0] mbist_ctrl_i; // bist chain shift control
- `endif
- /*-----------------------------------------------------------------------------------------------------------
- FIFO depth parameters:
- WBW_DEPTH = defines WBW_FIFO depth
- WBR_DEPTH = defines WBR_FIFO depth
- WBW_ADDR_LENGTH = defines WBW_FIFO's location address length = log2(WBW_DEPTH)
- WBR_ADDR_LENGTH = defines WBR_FIFO's location address length = log2(WBR_DEPTH)
- -----------------------------------------------------------------------------------------------------------*/
- parameter WBW_DEPTH = `WBW_DEPTH ;
- parameter WBW_ADDR_LENGTH = `WBW_ADDR_LENGTH ;
- parameter WBR_DEPTH = `WBR_DEPTH ;
- parameter WBR_ADDR_LENGTH = `WBR_ADDR_LENGTH ;
- /*-----------------------------------------------------------------------------------------------------------
- wbw_wallow = WBW_FIFO write allow wire - writes to FIFO are allowed when FIFO isn't full and write enable is 1
- wbw_rallow = WBW_FIFO read allow wire - reads from FIFO are allowed when FIFO isn't empty and read enable is 1
- -----------------------------------------------------------------------------------------------------------*/
- wire wbw_wallow ;
- wire wbw_rallow ;
- /*-----------------------------------------------------------------------------------------------------------
- wbr_wallow = WBR_FIFO write allow wire - writes to FIFO are allowed when FIFO isn't full and write enable is 1
- wbr_rallow = WBR_FIFO read allow wire - reads from FIFO are allowed when FIFO isn't empty and read enable is 1
- -----------------------------------------------------------------------------------------------------------*/
- wire wbr_wallow ;
- wire wbr_rallow ;
- /*-----------------------------------------------------------------------------------------------------------
- wires for address port conections from WBW_FIFO control logic to RAM blocks used for WBW_FIFO
- -----------------------------------------------------------------------------------------------------------*/
- wire [(WBW_ADDR_LENGTH - 1):0] wbw_raddr ;
- wire [(WBW_ADDR_LENGTH - 1):0] wbw_waddr ;
- /*-----------------------------------------------------------------------------------------------------------
- wires for address port conections from WBR_FIFO control logic to RAM blocks used for WBR_FIFO
- -----------------------------------------------------------------------------------------------------------*/
- wire [(WBR_ADDR_LENGTH - 1):0] wbr_raddr ;
- wire [(WBR_ADDR_LENGTH - 1):0] wbr_waddr ;
- /*-----------------------------------------------------------------------------------------------------------
- WBW_FIFO transaction counters: used to count incoming transactions and outgoing transactions. When number of
- input transactions is equal to number of output transactions, it means that there isn't any complete transaction
- currently present in the FIFO.
- -----------------------------------------------------------------------------------------------------------*/
- reg [(WBW_ADDR_LENGTH - 2):0] wbw_inTransactionCount ;
- reg [(WBW_ADDR_LENGTH - 2):0] wbw_outTransactionCount ;
- /*-----------------------------------------------------------------------------------------------------------
- wires monitoring control bus. When control bus on a write transaction has a value of `LAST, it means that
- complete transaction is in the FIFO. When control bus on a read transaction has a value of `LAST,
- it means that there was one complete transaction taken out of FIFO.
- -----------------------------------------------------------------------------------------------------------*/
- wire wbw_last_in = wbw_control_in[`LAST_CTRL_BIT] ;
- wire wbw_last_out = wbw_control_out[`LAST_CTRL_BIT] ;
- wire wbw_empty ;
- wire wbr_empty ;
- assign wbw_empty_out = wbw_empty ;
- assign wbr_empty_out = wbr_empty ;
- // clear wires for fifos
- wire wbw_clear = reset_in /*|| wbw_flush_in*/ ; // WBW_FIFO clear flush not used
- wire wbr_clear = reset_in /*|| wbr_flush_in*/ ; // WBR_FIFO clear - flush changed from asynchronous to synchronous
- /*-----------------------------------------------------------------------------------------------------------
- Definitions of wires for connecting RAM instances
- -----------------------------------------------------------------------------------------------------------*/
- wire [39:0] dpram_portA_output ;
- wire [39:0] dpram_portB_output ;
- wire [39:0] dpram_portA_input = {wbw_control_in, wbw_cbe_in, wbw_addr_data_in} ;
- wire [39:0] dpram_portB_input = {wbr_control_in, wbr_be_in, wbr_data_in} ;
- /*-----------------------------------------------------------------------------------------------------------
- Fifo output assignments - each ram port provides data for different fifo
- -----------------------------------------------------------------------------------------------------------*/
- assign wbw_control_out = dpram_portB_output[39:36] ;
- assign wbr_control_out = dpram_portA_output[39:36] ;
- assign wbw_cbe_out = dpram_portB_output[35:32] ;
- assign wbr_be_out = dpram_portA_output[35:32] ;
- assign wbw_addr_data_out = dpram_portB_output[31:0] ;
- assign wbr_data_out = dpram_portA_output[31:0] ;
- `ifdef WB_RAM_DONT_SHARE
- /*-----------------------------------------------------------------------------------------------------------
- Piece of code in this ifdef section is used in applications which can provide enough RAM instances to
- accomodate four fifos - each occupying its own instance of ram. Ports are connected in such a way,
- that instances of RAMs can be changed from two port to dual port ( async read/write port ). In that case,
- write port is always port a and read port is port b.
- -----------------------------------------------------------------------------------------------------------*/
- /*-----------------------------------------------------------------------------------------------------------
- Pad redundant address lines with zeros. This may seem stupid, but it comes in perfect for FPGA impl.
- -----------------------------------------------------------------------------------------------------------*/
- /*
- wire [(`WBW_FIFO_RAM_ADDR_LENGTH - WBW_ADDR_LENGTH - 1):0] wbw_addr_prefix = {( `WBW_FIFO_RAM_ADDR_LENGTH - WBW_ADDR_LENGTH){1'b0}} ;
- wire [(`WBR_FIFO_RAM_ADDR_LENGTH - WBR_ADDR_LENGTH - 1):0] wbr_addr_prefix = {( `WBR_FIFO_RAM_ADDR_LENGTH - WBR_ADDR_LENGTH){1'b0}} ;
- */
- // compose complete port addresses
- wire [(`WB_FIFO_RAM_ADDR_LENGTH-1):0] wbw_whole_waddr = wbw_waddr ;
- wire [(`WB_FIFO_RAM_ADDR_LENGTH-1):0] wbw_whole_raddr = wbw_raddr ;
- wire [(`WB_FIFO_RAM_ADDR_LENGTH-1):0] wbr_whole_waddr = wbr_waddr ;
- wire [(`WB_FIFO_RAM_ADDR_LENGTH-1):0] wbr_whole_raddr = wbr_raddr ;
- wire wbw_read_enable = 1'b1 ;
- wire wbr_read_enable = 1'b1 ;
- `ifdef PCI_BIST
- wire mbist_so_o_internal ; // wires for connection of debug ports on two rams
- wire mbist_si_i_internal = mbist_so_o_internal ;
- `endif
- // instantiate and connect two generic rams - one for wishbone write fifo and one for wishbone read fifo
- pci_wb_tpram #(`WB_FIFO_RAM_ADDR_LENGTH, 40) wbw_fifo_storage
- (
- /////////////////Generic synchronous two-port RAM interface
- .clk_a(wb_clock_in),
- .rst_a(reset_in),
- .ce_a(1'b1),
- .we_a(wbw_wallow),
- .oe_a(1'b1),
- .addr_a(wbw_whole_waddr),
- .di_a(dpram_portA_input),
- .do_a(),
- .clk_b(pci_clock_in),
- .rst_b(reset_in),
- .ce_b(wbw_read_enable),
- .we_b(1'b0),
- .oe_b(1'b1),
- .addr_b(wbw_whole_raddr),
- .di_b(40'h00_0000_0000),
- .do_b(dpram_portB_output)
- `ifdef PCI_BIST
- ,
- .mbist_si_i (mbist_si_i),
- .mbist_so_o (mbist_so_o_internal),
- .mbist_ctrl_i (mbist_ctrl_i)
- `endif
- );
-
- pci_wb_tpram #(`WB_FIFO_RAM_ADDR_LENGTH, 40) wbr_fifo_storage
- (
- // Generic synchronous two-port RAM interface
- .clk_a(pci_clock_in),
- .rst_a(reset_in),
- .ce_a(1'b1),
- .we_a(wbr_wallow),
- .oe_a(1'b1),
- .addr_a(wbr_whole_waddr),
- .di_a(dpram_portB_input),
- .do_a(),
- .clk_b(wb_clock_in),
- .rst_b(reset_in),
- .ce_b(wbr_read_enable),
- .we_b(1'b0),
- .oe_b(1'b1),
- .addr_b(wbr_whole_raddr),
- .di_b(40'h00_0000_0000),
- .do_b(dpram_portA_output)
- `ifdef PCI_BIST
- ,
- .mbist_si_i (mbist_si_i_internal),
- .mbist_so_o (mbist_so_o),
- .mbist_ctrl_i (mbist_ctrl_i)
- `endif
- );
- `else // RAM blocks sharing between two fifos
- /*-----------------------------------------------------------------------------------------------------------
- Code section under this ifdef is used for implementation where RAM instances are too expensive. In this
- case one RAM instance is used for both - WISHBONE read and WISHBONE write fifo.
- -----------------------------------------------------------------------------------------------------------*/
- /*-----------------------------------------------------------------------------------------------------------
- Address prefix definition - since both FIFOs reside in same RAM instance, storage is separated by MSB
- addresses. WISHBONE write fifo addresses are padded with zeros on the MSB side ( at least one address line
- must be used for this ), WISHBONE read fifo addresses are padded with ones on the right ( at least one ).
- -----------------------------------------------------------------------------------------------------------*/
- wire [(`WB_FIFO_RAM_ADDR_LENGTH - WBW_ADDR_LENGTH - 1):0] wbw_addr_prefix = {( `WB_FIFO_RAM_ADDR_LENGTH - WBW_ADDR_LENGTH){1'b0}} ;
- wire [(`WB_FIFO_RAM_ADDR_LENGTH - WBR_ADDR_LENGTH - 1):0] wbr_addr_prefix = {( `WB_FIFO_RAM_ADDR_LENGTH - WBR_ADDR_LENGTH){1'b1}} ;
- /*-----------------------------------------------------------------------------------------------------------
- Port A address generation for RAM instance. RAM instance must be full two port RAM - read and write capability
- on both sides.
- Port A is clocked by WISHBONE clock, DIA is input for wbw_fifo, DOA is output for wbr_fifo.
- Address is multiplexed so operation can be switched between fifos. Default is a read on port.
- -----------------------------------------------------------------------------------------------------------*/
- wire [(`WB_FIFO_RAM_ADDR_LENGTH-1):0] portA_addr = wbw_wallow ? {wbw_addr_prefix, wbw_waddr} : {wbr_addr_prefix, wbr_raddr} ;
- /*-----------------------------------------------------------------------------------------------------------
- Port B is clocked by PCI clock, DIB is input for wbr_fifo, DOB is output for wbw_fifo.
- Address is multiplexed so operation can be switched between fifos. Default is a read on port.
- -----------------------------------------------------------------------------------------------------------*/
- wire [(`WB_FIFO_RAM_ADDR_LENGTH-1):0] portB_addr = wbr_wallow ? {wbr_addr_prefix, wbr_waddr} : {wbw_addr_prefix, wbw_raddr} ;
- wire portA_enable = 1'b1 ;
- wire portB_enable = 1'b1 ;
- // instantiate RAM for these two fifos
- pci_wb_tpram #(`WB_FIFO_RAM_ADDR_LENGTH, 40) wbu_fifo_storage
- (
- // Generic synchronous two-port RAM interface
- .clk_a(wb_clock_in),
- .rst_a(reset_in),
- .ce_a(portA_enable),
- .we_a(wbw_wallow),
- .oe_a(1'b1),
- .addr_a(portA_addr),
- .di_a(dpram_portA_input),
- .do_a(dpram_portA_output),
- .clk_b(pci_clock_in),
- .rst_b(reset_in),
- .ce_b(portB_enable),
- .we_b(wbr_wallow),
- .oe_b(1'b1),
- .addr_b(portB_addr),
- .di_b(dpram_portB_input),
- .do_b(dpram_portB_output)
- `ifdef PCI_BIST
- ,
- .mbist_si_i (mbist_si_i),
- .mbist_so_o (mbist_so_o),
- .mbist_ctrl_i (mbist_ctrl_i)
- `endif
- );
- `endif
- /*-----------------------------------------------------------------------------------------------------------
- Instantiation of two control logic modules - one for WBW_FIFO and one for WBR_FIFO
- -----------------------------------------------------------------------------------------------------------*/
- pci_wbw_fifo_control #(WBW_ADDR_LENGTH) wbw_fifo_ctrl
- (
- .rclock_in(pci_clock_in),
- .wclock_in(wb_clock_in),
- .renable_in(wbw_renable_in),
- .wenable_in(wbw_wenable_in),
- .reset_in(reset_in),
- ////////////////////////////// .flush_in(wbw_flush_in),
- .almost_full_out(wbw_almost_full_out),
- .full_out(wbw_full_out),
- .empty_out(wbw_empty),
- .waddr_out(wbw_waddr),
- .raddr_out(wbw_raddr),
- .rallow_out(wbw_rallow),
- .wallow_out(wbw_wallow),
- .half_full_out(wbw_half_full_out) ////Robert, burst issue
- );
- pci_wbr_fifo_control #(WBR_ADDR_LENGTH) wbr_fifo_ctrl
- ( .rclock_in(wb_clock_in),
- .wclock_in(pci_clock_in),
- .renable_in(wbr_renable_in),
- .wenable_in(wbr_wenable_in),
- .reset_in(reset_in),
- .flush_in(wbr_flush_in),
- .empty_out(wbr_empty),
- .waddr_out(wbr_waddr),
- .raddr_out(wbr_raddr),
- .rallow_out(wbr_rallow),
- .wallow_out(wbr_wallow)
- );
- // in and out transaction counters and grey codes
- reg [(WBW_ADDR_LENGTH-2):0] inGreyCount ;
- reg [(WBW_ADDR_LENGTH-2):0] outGreyCount ;
- wire [(WBW_ADDR_LENGTH-2):0] inNextGreyCount = {wbw_inTransactionCount[(WBW_ADDR_LENGTH-2)], wbw_inTransactionCount[(WBW_ADDR_LENGTH-2):1] ^ wbw_inTransactionCount[(WBW_ADDR_LENGTH-3):0]} ;
- wire [(WBW_ADDR_LENGTH-2):0] outNextGreyCount = {wbw_outTransactionCount[(WBW_ADDR_LENGTH-2)], wbw_outTransactionCount[(WBW_ADDR_LENGTH-2):1] ^ wbw_outTransactionCount[(WBW_ADDR_LENGTH-3):0]} ;
- // input transaction counter increment - when last data of transaction is written to fifo
- wire in_count_en = wbw_wallow && wbw_last_in ;
- // output transaction counter increment - when last data is on top of fifo and read from it
- wire out_count_en = wbw_renable_in && wbw_last_out ;
- // register holding grey coded count of incoming transactions
- always@(posedge wb_clock_in or posedge wbw_clear)
- begin
- if (wbw_clear)
- begin
- inGreyCount <= #3 0 ;
- end
- else
- if (in_count_en)
- inGreyCount <= #3 inNextGreyCount ;
- end
- wire [(WBW_ADDR_LENGTH-2):0] pci_clk_sync_inGreyCount ;
- reg [(WBW_ADDR_LENGTH-2):0] pci_clk_inGreyCount ;
- pci_synchronizer_flop #((WBW_ADDR_LENGTH - 1), 0) i_synchronizer_reg_inGreyCount
- (
- .data_in (inGreyCount),
- .clk_out (pci_clock_in),
- .sync_data_out (pci_clk_sync_inGreyCount),
- .async_reset (wbw_clear)
- ) ;
- always@(posedge pci_clock_in or posedge wbw_clear)
- begin
- if (wbw_clear)
- pci_clk_inGreyCount <= #`FF_DELAY 0 ;
- else
- pci_clk_inGreyCount <= # `FF_DELAY pci_clk_sync_inGreyCount ;
- end
- // register holding grey coded count of outgoing transactions
- always@(posedge pci_clock_in or posedge wbw_clear)
- begin
- if (wbw_clear)
- begin
- outGreyCount <= #`FF_DELAY 0 ;
- end
- else
- if (out_count_en)
- outGreyCount <= #`FF_DELAY outNextGreyCount ;
- end
- // incoming transactions counter
- always@(posedge wb_clock_in or posedge wbw_clear)
- begin
- if (wbw_clear)
- wbw_inTransactionCount <= #`FF_DELAY 1 ;
- else
- if (in_count_en)
- wbw_inTransactionCount <= #`FF_DELAY wbw_inTransactionCount + 1'b1 ;
- end
- // outgoing transactions counter
- always@(posedge pci_clock_in or posedge wbw_clear)
- begin
- if (wbw_clear)
- wbw_outTransactionCount <= 1 ;
- else
- if (out_count_en)
- wbw_outTransactionCount <= #`FF_DELAY wbw_outTransactionCount + 1'b1 ;
- end
- assign wbw_transaction_ready_out = pci_clk_inGreyCount != outGreyCount ;
- endmodule
- </pre>
- <hr />
- <address><span style="font-size: smaller">FreeBSD-CVSweb <<a href="mailto:freebsd-cvsweb@FreeBSD.org">freebsd-cvsweb@FreeBSD.org</a>></span></address>
- </body>
- </html>
- <!-- pf_body_end -->
- </td>
- <td><img width=15 src="/images/dotty.gif"></td>
- </tr></table>
- <xcenter>
- <p>
- <table width=100% cellpadding=0 cellspacing=0 border=0>
- <tr><td align=right valign=bottom><a title='Top' href='#top'><img border=0 alt='Top' src='/images/hr_up.gif'></a></td></tr>
- <tr><td background='/images/hpd.gif'><img height=1 border=0 src='/images/dotty.gif'></td></tr><tr><td height=4><img height=4 src='/images/dotty.gif'></td></tr></table>
-
- <br>
- <!--
- <table border=0 cellpadding=0 cellspacing=1 bgcolor=#ffffff><tr><td>
- <table cellpadding=0 cellspacing=0 border=0 bgcolor=#ffffff><tr><td>
- //-->
- <script type="text/javascript"><!--
- google_ad_client = "pub-9285819221080148";
- google_alternate_color = "FFFFFF";
- google_ad_width = 728;
- google_ad_height = 90;
- google_ad_format = "728x90_as";
- google_ad_type = "text_image";
- google_ad_channel ="3034172958";
- google_color_border = "ffffff";
- google_color_bg = "ffffff";
- google_color_link = "444488";
- google_color_url = "b00000";
- google_color_text = "666666";
- //--></script>
- <script type="text/javascript"
- src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
- </script>
- <!--
- </td></tr></table>
- </td></tr></table>
- //-->
- </center>
- <img border=0 src="/images/dotty.gif" height=1 width=400>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- <img border=0 src="/images/dotty.gif" height=1 width=30>
- </td></tr>
- </table>
-
- </td></tr>
- <tr bgcolor=#000000><td><img height=1 src="/images/dotty.gif"></td></tr>
- </table>
- <table background="/images/topbg.gif" width=100% cellpadding=0 cellspacing=0 border=0 bgcolor=#aaddff>
- <tr><td align=right>
- Copyright (c) 1999-2007 OPENCORES.ORG. All rights reserved.
- </td></tr>
- <tr><td>
-
- </td></tr>
- </table>
- </td>
- <td width=1 bgcolor=#000000><img width=1 src="/images/dotty.gif"></td>
- <td width=1 bgcolor=#f0f0c8><img width=1 src="/images/dotty.gif"></td>
- </tr></table>
- </center>
- <!-- pf_footer_start -->
- </body>
- </html>
- <!-- pf_footer_end -->