pci_wbw_fifo_control(1).v
上传用户:quan1896
上传日期:2014-05-14
资源大小:211k
文件大小:32k
源码类别:

并行计算

开发平台:

Others

  1. <!-- pf_header_start -->
  2. <html>
  3.   <head>
  4.     <META NAME="keywords" CONTENT="cores, VHDL, Verilog HDL, ASIC, Synthesizable,
  5.       standard cell, IP, Intellectual Property, 32-bit RISC, UART, PCI, SDRAM,
  6.       full custom, system on a chip, SOC, reusable, design, development, synthesis,
  7.       designs, developers, C, Linux, eCos, open, free, open source cores, RTL code,
  8.       system-on-a-chip, circuits, digital, GNU, GPL, core, controller, processor,
  9.       system design, chip design, EDA, design methodology, design tools, ASICs, programmable logic,
  10.       FPGA's, PLDs, CPLDs, verification, Synthesis, HDL, Simulation, IC design software,
  11.       semiconductor design, integrated circuits, system designs, chip designs, EDAs, 
  12.       design methodologies, design tool, ASIC, programmable logics, FPGA, PLD, CPLD, Synthesis, 
  13.       circuit, Synopsys, system design, chip design, programmable logic, FPGA's, PLDs, 
  14.       CPLDs, verification, Simulation">
  15.     <META NAME="description" CONTENT="OPENCORES.ORG endorses development and hosts
  16.       a repository of free, open-source cores (chip designs) and supplemental
  17.       platforms (boards).">
  18.     <STYLE type=text/css>
  19.       BODY {margin: 0;}
  20.       BODY, P, DIV, TD, TR, TH, FORM, OL, UL, LI, B, I, INPUT, TEXTAREA, SELECT,
  21.       FONT {font-size: 10pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  22.       P, TD, FORM, TEXTAREA {font-size: 10pt;}
  23.       H1, H2 {FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica; font-size: 13pt; text-decoration: none}
  24.       .noline {text-decoration: none;}
  25.       .menu_top {text-decoration: none; font-weight: bold;
  26.         font-size: 7pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;} 
  27.       .menu_section {text-decoration: none; font-weight: bold;
  28.         font-size: 10pt; color: #ffffff; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;} 
  29.       .menu_item {font-size: 10pt; color: #004488; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  30.       .menu_section_admin {text-decoration: none; font-weight: bold;
  31.         font-size: 10pt; color: #ffff44; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;} 
  32.       .page_title {text-decoration: none; font-weight: bold; color: #c00000; font-size: 13pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  33.       .block_title {text-decoration: none; font-weight: bold; font-size: 11pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  34.       .block_subtitle {text-decoration: none; font-weight: bold; font-size: 10pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  35.       .title {text-decoration: none; font-weight: bold; font-size: 10pt; color: #000000; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  36.       .large {font-size: 13pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  37.       .medium {font-size: 10pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  38.       .small {font-size: 7pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  39.       .ultrasmall {font-size: 3pt; FONT-FAMILY: Verdana, Tahoma, Arial, Helvetica;}
  40.       .button { font-family:Verdana, Tahoma, Arial, Helvetica; }
  41.       .searchfield {font-family: verdana, arial, helvetica; font-size: 10px; color: #333333; width: 80px; height: 17px;}
  42.     </STYLE>
  43.     <title>OPENCORES.ORG</title>
  44.     <script laguage="Javascript">
  45.       function check(msg) {
  46.         if(confirm(msg)) {
  47.           return true
  48.         } else {
  49.           return false
  50.         }
  51.       }
  52.     </script>
  53.   </head>
  54.   
  55.   <body 
  56.     bgcolor="#e0e0e0" 
  57.     topmargin="0" 
  58.     leftmargin="0" 
  59.     marginwidth="0" 
  60.     marginheight="0" 
  61.     link="#004488" 
  62.     alink="#ff3300"
  63.     vlink="#444444"
  64.   >
  65. <a name="top">
  66. <!-- pf_header_end -->
  67. <center>
  68. <table cellpadding=0 cellspacing=0 border=0 width=96%><tr>
  69. <td width=1 bgcolor=#000000><img width=1 src="/images/dotty.gif"></td>
  70. <td>
  71. <table border=0 cellpadding=0 cellspacing=0 width=100%>
  72. <tr><td background="/images/topbg.gif" bgcolor=#aaddff height=70>
  73. <table width=100% border=0 ><tr><td width=180>
  74. <a href="/"><img border=0 src="/images/oc_logo.gif"></a>
  75. </td><td>
  76. <center>
  77. <!--
  78. <a title="" href="/banner.cgi"><img width=468 height=60 border=0 alt="" src=""></a>
  79. //-->
  80. <script type="text/javascript"><!--
  81. google_ad_client = "pub-9285819221080148";
  82. xgoogle_ad_width = 728;
  83. xgoogle_ad_height = 79;
  84. xgoogle_ad_format = "728x90_as";
  85. google_ad_width = 468;
  86. google_ad_height = 47;
  87. google_ad_format = "468x60_as";
  88. google_ad_type = "text_image";
  89. google_ad_channel ="3274390903";
  90. google_color_border = "aaddff";
  91. xgoogle_color_border = "ffee88";
  92. xgoogle_color_bg = "FFEE88";
  93. google_color_bg = "aaddFF";
  94. google_color_link = "004488";
  95. google_color_url = "b00000";
  96. google_color_text = "000000";
  97. //--></script>
  98. <script type="text/javascript"
  99.   src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  100. </script>
  101. </center>
  102. </td><td align=right>
  103. </td>
  104. </tr></table>
  105. </td></tr>
  106. <tr bgcolor=#000000><td><img height=1 src="/images/dotty.gif"></td></tr>
  107. <tr><td bgcolor=#ffffff>
  108. <table border=0 cellpadding=0 cellspacing=0 width=100%><tr>
  109. <td bgcolor=#ffee88 width=60% background="/images/menu1.gif"></td>
  110. <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_fifo_control.v?rev=1.5'"></a></td>
  111. <td bgcolor=#ffffff align=right nowrap>
  112. &nbsp; &nbsp; &nbsp; &nbsp; 
  113. <font class=menu_top size=-1>
  114.         
  115.           <a class=menu_top href="/login.cgi/login">LOGIN</a>
  116.           
  117.             &nbsp; ::: &nbsp;
  118.           
  119.         
  120.           <a class=menu_top href="/recover_pass.cgi/recover_pass">RECOVER PASS</a>
  121.           
  122.             &nbsp; ::: &nbsp;
  123.           
  124.         
  125.           <a class=menu_top href="/get_account.cgi/get_account">GET ACCOUNT</a>
  126.           
  127.         
  128. &nbsp; &nbsp;
  129. </font>
  130. </td></tr>
  131. <tr bgcolor=#ffffff>
  132.   <td></td>
  133.   <td></td>
  134.   <td bgcolor=#000000><img src="/images/dotty.gif"></td>
  135. </tr>
  136. </table>
  137. <table border=0 cellpadding=0 cellspacing=0>
  138. <tr>
  139. <td width=10><img width=10 src="/images/dotty.gif"></td>
  140. <td width=120 valign=top>
  141.         
  142.         <table width=100% border=0 cellpadding=2 cellspacing=0>
  143.           <tr><td><img height=2 src="/images/dotty.gif"></td></tr>
  144.         
  145.          <tr><td bgcolor="#347FB8">
  146.            <img src="/images/bullet.gif">
  147.          
  148.            <font class=menu_section>Browse</font>
  149.          
  150.          </td></tr>
  151.           
  152.            <tr><td>
  153.               
  154.                   
  155.                       <li class=small>
  156.                   
  157.               
  158.             
  159.                 <a class=menu_item href="/browse.cgi/by_category"><font class=menu_item>Projects</font></a></li>
  160.             
  161.            </td></tr>
  162.             
  163.           
  164.            <tr><td>
  165.               
  166.                   
  167.                       <li class=small>
  168.                   
  169.               
  170.             
  171.                 <a class=menu_item href="/cvsweb.shtml/"><font class=menu_item>Code (CVS)</font></a></li>
  172.             
  173.            </td></tr>
  174.             
  175.           
  176.            <tr><td>
  177.               
  178.                   
  179.                       <li class=small>
  180.                   
  181.               
  182.             
  183.                 <a class=menu_item href="/forums.cgi"><font class=menu_item>Forums</font></a></li>
  184.             
  185.            </td></tr>
  186.             
  187.           
  188.            <tr><td>
  189.               
  190.                   
  191.                       <li class=small>
  192.                   
  193.               
  194.             
  195.                 <a class=menu_item href="/news.cgi/list/1"><font class=menu_item>News</font></a></li>
  196.             
  197.            </td></tr>
  198.             
  199.           
  200.            <tr><td>
  201.               
  202.                   
  203.                       <li class=small>
  204.                   
  205.               
  206.             
  207.                 <a class=menu_item href="/articles.cgi/list"><font class=menu_item>Articles</font></a></li>
  208.             
  209.            </td></tr>
  210.             
  211.           
  212.            <tr><td>
  213.               
  214.                   
  215.                       <li class=small>
  216.                   
  217.               
  218.             
  219.                 <a class=menu_item href="/polls.cgi/list"><font class=menu_item>Polls</font></a></li>
  220.             
  221.            </td></tr>
  222.             
  223.           
  224.           <tr><td><font size=-2>&nbsp;</font></td></tr>
  225.         
  226.          <tr><td bgcolor="#347FB8">
  227.            <img src="/images/bullet.gif">
  228.          
  229.            <font class=menu_section>OpenCores</font>
  230.          
  231.          </td></tr>
  232.           
  233.            <tr><td>
  234.               
  235.                   
  236.                       <li class=small>
  237.                   
  238.               
  239.             
  240.                 <a class=menu_item href="/faq.cgi/index"><font class=menu_item>FAQ</font></a></li>
  241.             
  242.            </td></tr>
  243.             
  244.           
  245.            <tr><td>
  246.               
  247.                   
  248.                       <li class=small>
  249.                   
  250.               
  251.             
  252.                 <a class=menu_item href="/projects.cgi/web/opencores/cvs_howto"><font class=menu_item>CVS HowTo</font></a></li>
  253.             
  254.            </td></tr>
  255.             
  256.           
  257.            <tr><td>
  258.               
  259.                   
  260.                       <li class=small>
  261.                   
  262.               
  263.             
  264.                 <a class=menu_item href="/projects.cgi/web/opencores/mission"><font class=menu_item>Mission</font></a></li>
  265.             
  266.            </td></tr>
  267.             
  268.           
  269.            <tr><td>
  270.               
  271.                   
  272.                       <li class=small>
  273.                   
  274.               
  275.             
  276.                 <a class=menu_item href="/projects.cgi/web/opencores/media"><font class=menu_item>Media</font></a></li>
  277.             
  278.            </td></tr>
  279.             
  280.           
  281.            <tr><td>
  282.               
  283.                   
  284.                       <li class=small>
  285.                   
  286.               
  287.             
  288.                 <a class=menu_item href="/projects.cgi/web/opencores/tools"><font class=menu_item>Tools</font></a></li>
  289.             
  290.            </td></tr>
  291.             
  292.           
  293.            <tr><td>
  294.               
  295.                   
  296.                       <li class=small>
  297.                   
  298.               
  299.             
  300.                 <a class=menu_item href="/projects.cgi/web/opencores/sponsors"><font class=menu_item>Sponsors</font></a></li>
  301.             
  302.            </td></tr>
  303.             
  304.           
  305.            <tr><td>
  306.               
  307.                   
  308.                       <li class=small>
  309.                   
  310.               
  311.             
  312.                 <a class=menu_item href="/projects.cgi/web/opencores/mirrors"><font class=menu_item>Mirrors</font></a></li>
  313.             
  314.            </td></tr>
  315.             
  316.           
  317.            <tr><td>
  318.               
  319.                   
  320.                       <li class=small>
  321.                   
  322.               
  323.             
  324.                 <a class=menu_item href="/projects.cgi/web/opencores/logos"><font class=menu_item>Logos</font></a></li>
  325.             
  326.            </td></tr>
  327.             
  328.           
  329.            <tr><td>
  330.               
  331.                   
  332.                       <li class=small>
  333.                   
  334.               
  335.             
  336.                 <a class=menu_item href="/projects.cgi/web/opencores/contacts"><font class=menu_item>Contact us</font></a></li>
  337.             
  338.            </td></tr>
  339.             
  340.           
  341.           <tr><td><font size=-2>&nbsp;</font></td></tr>
  342.         
  343.          <tr><td bgcolor="#347FB8">
  344.            <img src="/images/bullet.gif">
  345.          
  346.            <font class=menu_section>Tools</font>
  347.          
  348.          </td></tr>
  349.           
  350.            <tr><td>
  351.               
  352.                   
  353.                       <li class=small>
  354.                   
  355.               
  356.             
  357.                 <font class=menu_item><a href="/search.cgi">Search</a><br><table><tr><form action=/search.cgi/do_search><td><font class=small>&nbsp;&nbsp;</font></td><td><input class=searchfield type=text name=query></td></form></tr></table></font></li>
  358.             
  359.            </td></tr>
  360.             
  361.           
  362.            <tr><td>
  363.               
  364.                   
  365.                       <li class=small>
  366.                   
  367.               
  368.             
  369.                 <a class=menu_item href="/cvsget.shtml"><font class=menu_item>Download Cores (CVSGet)</font></a></li>
  370.             
  371.            </td></tr>
  372.             
  373.           
  374.           <tr><td><font size=-2>&nbsp;</font></td></tr>
  375.         
  376.          <tr><td bgcolor="#347FB8">
  377.            <img src="/images/bullet.gif">
  378.          
  379.            <font class=menu_section>More</font>
  380.          
  381.          </td></tr>
  382.           
  383.            <tr><td>
  384.               
  385.                   
  386.                       <li class=small>
  387.                   
  388.               
  389.             
  390.                 <a class=menu_item href="/projects.cgi/web/wishbone/"><font class=menu_item>Wishbone</font></a></li>
  391.             
  392.            </td></tr>
  393.             
  394.           
  395.            <tr><td>
  396.               
  397.                   
  398.                       <li class=small>
  399.                   
  400.               
  401.             
  402.                 <a class=menu_item href="/projects.cgi/web/perlilog/"><font class=menu_item>Perlilog</font></a></li>
  403.             
  404.            </td></tr>
  405.             
  406.           
  407.            <tr><td>
  408.               
  409.                   
  410.                       <li class=small>
  411.                   
  412.               
  413.             
  414.                 <a class=menu_item href="/projects.cgi/web/edatools/"><font class=menu_item>EDA tools</font></a></li>
  415.             
  416.            </td></tr>
  417.             
  418.           
  419.            <tr><td>
  420.               
  421.                   
  422.                       <li class=small>
  423.                   
  424.               
  425.             
  426.                 <a class=menu_item href="/projects.cgi/web/opentech/"><font class=menu_item>OpenTech CD</font></a></li>
  427.             
  428.            </td></tr>
  429.             
  430.           
  431.           <tr><td><font size=-2>&nbsp;</font></td></tr>
  432.         
  433.         </table>
  434. </td>
  435. <td width=10><img width=10 src="/images/dotty.gif"></td>
  436. <td background="/images/vpd.gif"><img width=1 src="/images/dotty.gif"></td>
  437. <td width=10><img width=10 src="/images/dotty.gif"></td>
  438. <td valign=top>
  439.         
  440.         <table width=100% cellpadding=2 cellspacing=0 border=0>
  441.           <tr><td><img height=2 src="/images/dotty.gif"></td></tr>
  442.         </table>
  443.         
  444. <table width=100% cellspacing=0 cellpadding=0 border=0><tr><td>
  445. <!-- pf_body_start -->
  446.  
  447. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  448. <html>
  449. <head>
  450. <title>pci/rtl/verilog/pci_wbw_fifo_control.v - view - 1.5</title>
  451. <meta name="robots" content="nofollow" />
  452. <meta name="generator" content="FreeBSD-CVSweb 3.0.5" />
  453. <meta http-equiv="Content-Script-Type" content="text/javascript" />
  454. <meta http-equiv="Content-Style-Type" content="text/css" />
  455. <link rel="stylesheet" type="text/css" href="/css/cvsweb.css" />
  456. </head>
  457. <body class="src">
  458. <table class="navigate-header" width="100%" summary="Navigation">
  459.  <tr>
  460.   <td>
  461. <a href="./pci_wbw_fifo_control.v#rev1.5"><img src="/icons/back.gif" alt="[BACK]" border="0" width="20" height="22" /></a><b>Return to <a href="./pci_wbw_fifo_control.v#rev1.5">pci_wbw_fifo_control.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>
  462.  </tr>
  463. </table>
  464. <hr />
  465. <div class="log-markup">
  466. File:&nbsp;
  467.  <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_fifo_control.v">pci_wbw_fifo_control.v</a><br />
  468. <a name="rev1.5"></a><a name="HEAD"></a>
  469.  Revision <b>1.5</b>: <a href="/cvsweb.cgi/~checkout~/pci/rtl/verilog/pci_wbw_fifo_control.v?rev=1.5;content-type=text%2Fplain" class="download-link">download</a> - view: <a href="pci_wbw_fifo_control.v?rev=1.5;content-type=text%2Fplain" class="display-link">text</a>, <a href="pci_wbw_fifo_control.v?annotate=1.5">annotated</a> - <a href="pci_wbw_fifo_control.v?r1=1.5#rev1.5">select&nbsp;for&nbsp;diffs</a><br />
  470. <i>Tue Jul  4 13:16:19 2006 UTC</i> (10 months, 2 weeks ago) by <i>mihad</i><br />
  471. Branches: <a href="./pci_wbw_fifo_control.v?only_with_tag=MAIN">MAIN</a><br />
  472. CVS tags: <a href="./pci_wbw_fifo_control.v?only_with_tag=HEAD">HEAD</a><br />
  473. <pre class="log">
  474. Write burst performance patch applied.
  475. Not tested. Everything should be backwards
  476. compatible, since functional code is ifdefed.
  477. </pre>
  478. </div>
  479. <hr /><pre>
  480. //////////////////////////////////////////////////////////////////////
  481. ////                                                              ////
  482. ////  File name &quot;wbw_fifo_control.v&quot;                              ////
  483. ////                                                              ////
  484. ////  This file is part of the &quot;PCI bridge&quot; project               ////
  485. ////  http://www.opencores.org/cores/pci/                         ////
  486. ////                                                              ////
  487. ////  Author(s):                                                  ////
  488. ////      - Miha Dolenc (mihad@opencores.org)                     ////
  489. ////                                                              ////
  490. ////  All additional information is avaliable in the README       ////
  491. ////  file.                                                       ////
  492. ////                                                              ////
  493. ////                                                              ////
  494. //////////////////////////////////////////////////////////////////////
  495. ////                                                              ////
  496. //// Copyright (C) 2001 Miha Dolenc, mihad@opencores.org          ////
  497. ////                                                              ////
  498. //// This source file may be used and distributed without         ////
  499. //// restriction provided that this copyright statement is not    ////
  500. //// removed from the file and that any derivative work contains  ////
  501. //// the original copyright notice and the associated disclaimer. ////
  502. ////                                                              ////
  503. //// This source file is free software; you can redistribute it   ////
  504. //// and/or modify it under the terms of the GNU Lesser General   ////
  505. //// Public License as published by the Free Software Foundation; ////
  506. //// either version 2.1 of the License, or (at your option) any   ////
  507. //// later version.                                               ////
  508. ////                                                              ////
  509. //// This source is distributed in the hope that it will be       ////
  510. //// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
  511. //// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
  512. //// PURPOSE.  See the GNU Lesser General Public License for more ////
  513. //// details.                                                     ////
  514. ////                                                              ////
  515. //// You should have received a copy of the GNU Lesser General    ////
  516. //// Public License along with this source; if not, download it   ////
  517. //// from http://www.opencores.org/lgpl.shtml                     ////
  518. ////                                                              ////
  519. //////////////////////////////////////////////////////////////////////
  520. //
  521. // CVS Revision History
  522. //
  523. // $Log: pci_wbw_fifo_control.v,v $
  524. // Revision 1.5  2006/07/04 13:16:19  mihad
  525. // Write burst performance patch applied.
  526. // Not tested. Everything should be backwards
  527. // compatible, since functional code is ifdefed.
  528. //
  529. // Revision 1.4  2003/08/14 13:06:03  simons
  530. // synchronizer_flop replaced with pci_synchronizer_flop, artisan ram instance updated.
  531. //
  532. // Revision 1.3  2003/07/29 08:20:11  mihad
  533. // Found and simulated the problem in the synchronization logic.
  534. // Repaired the synchronization logic in the FIFOs.
  535. //
  536. // Revision 1.2  2003/03/26 13:16:18  mihad
  537. // Added the reset value parameter to the synchronizer flop module.
  538. // Added resets to all synchronizer flop instances.
  539. // Repaired initial sync value in fifos.
  540. //
  541. // Revision 1.1  2003/01/27 16:49:31  mihad
  542. // Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed.
  543. //
  544. // Revision 1.6  2002/11/27 20:36:13  mihad
  545. // Changed the code a bit to make it more readable.
  546. // Functionality not changed in any way.
  547. // More robust synchronization in fifos is still pending.
  548. //
  549. // Revision 1.5  2002/09/30 16:03:04  mihad
  550. // Added meta flop module for easier meta stable FF identification during synthesis
  551. //
  552. // Revision 1.4  2002/09/25 15:53:52  mihad
  553. // Removed all logic from asynchronous reset network
  554. //
  555. // Revision 1.3  2002/02/01 15:25:14  mihad
  556. // Repaired a few bugs, updated specification, added test bench files and design document
  557. //
  558. // Revision 1.2  2001/10/05 08:14:30  mihad
  559. // Updated all files with inclusion of timescale file for simulation purposes.
  560. //
  561. // Revision 1.1.1.1  2001/10/02 15:33:47  mihad
  562. // New project directory structure
  563. //
  564. //
  565. /* FIFO_CONTROL module provides read/write address and status generation for
  566.    FIFOs implemented with standard dual port SRAM cells in ASIC or FPGA designs */
  567. `include &quot;pci_constants.v&quot;
  568. // synopsys translate_off
  569. `include &quot;timescale.v&quot;
  570. // synopsys translate_on
  571. module pci_wbw_fifo_control
  572. (
  573.     rclock_in,
  574.     wclock_in,
  575.     renable_in,
  576.     wenable_in,
  577.     reset_in,
  578.     almost_full_out,
  579.     full_out,
  580.     empty_out,
  581.     waddr_out,
  582.     raddr_out,
  583.     rallow_out,
  584.     wallow_out,
  585. half_full_out ////Robert, burst issue
  586. );
  587. parameter ADDR_LENGTH = 7;
  588. // independent clock inputs - rclock_in = read clock, wclock_in = write clock
  589. input  rclock_in, wclock_in;
  590. // enable inputs - read address changes on rising edge of rclock_in when reads are allowed
  591. //                 write address changes on rising edge of wclock_in when writes are allowed
  592. input  renable_in, wenable_in ;
  593. // reset input
  594. input  reset_in;
  595. // flush input
  596. // input flush_in ; // not used
  597. // almost full and empy status outputs
  598. output almost_full_out ;
  599. // full and empty status outputs
  600. output full_out, empty_out;
  601. // read and write addresses outputs
  602. output [(ADDR_LENGTH - 1):0] waddr_out, raddr_out;
  603. // read and write allow outputs
  604. output rallow_out, wallow_out ;
  605. output half_full_out;
  606. // read address register
  607. reg [(ADDR_LENGTH - 1):0] raddr ;
  608. // write address register
  609. reg [(ADDR_LENGTH - 1):0] waddr;
  610. assign waddr_out = waddr ;
  611. // grey code registers
  612. reg [(ADDR_LENGTH - 1):0] wgrey_addr ; // current
  613. // grey code register for next write address
  614. reg [(ADDR_LENGTH - 1):0] wgrey_next ; // next
  615. // next write gray address calculation - bitwise xor between address and shifted address
  616. wire [(ADDR_LENGTH - 2):0] calc_wgrey_next  = waddr[(ADDR_LENGTH - 1):1] ^ waddr[(ADDR_LENGTH - 2):0] ;
  617. // grey code pipeline for read address
  618. reg [(ADDR_LENGTH - 1):0] rgrey_minus1 ; // one before current
  619. reg [(ADDR_LENGTH - 1):0] rgrey_addr ; // current
  620. reg [(ADDR_LENGTH - 1):0] rgrey_next ; // next
  621. // next read gray address calculation - bitwise xor between address and shifted address
  622. wire [(ADDR_LENGTH - 2):0] calc_rgrey_next  = raddr[(ADDR_LENGTH - 1):1] ^ raddr[(ADDR_LENGTH - 2):0] ;
  623. // write allow wire - writes are allowed when fifo is not full
  624. assign wallow_out = wenable_in &amp; ~full_out ;
  625. // clear generation for FFs and registers
  626. wire clear = reset_in ;
  627. //rallow generation
  628. assign rallow_out = renable_in &amp; ~empty_out ; // reads allowed if read enable is high and FIFO is not empty
  629. // at any clock edge that rallow is high, this register provides next read address, so wait cycles are not necessary
  630. // when FIFO is empty, this register provides actual read address, so first location can be read
  631. reg [(ADDR_LENGTH - 1):0] raddr_plus_one ;
  632. wire [ADDR_LENGTH :0] fifo_fullness; //Robert, burst issue
  633. //Robert, burst issue
  634. assign fifo_fullness = (waddr &gt; raddr) ? ({1'b0, waddr} - {1'b0, raddr}) : ({1'b1, waddr} - {1'b0, raddr});
  635. assign half_full_out   = fifo_fullness[(ADDR_LENGTH - 1)] ;
  636. //Robert, burst issue
  637. // address output mux - when FIFO is empty, current actual address is driven out, when it is non - empty next address is driven out
  638. // done for zero wait state burst
  639. assign raddr_out = rallow_out ? raddr_plus_one : raddr ;
  640. always@(posedge rclock_in or posedge clear)
  641. begin
  642.     if (clear)
  643.     begin
  644.         raddr_plus_one &lt;= #`FF_DELAY 4 ;
  645.         raddr          &lt;= #`FF_DELAY 3 ;
  646.     end
  647.     else if (rallow_out)
  648.     begin
  649.         raddr_plus_one &lt;= #`FF_DELAY raddr_plus_one + 1'b1 ;
  650.         raddr          &lt;= #`FF_DELAY raddr_plus_one ;
  651.     end
  652. end
  653. /*-----------------------------------------------------------------------------------------------
  654. Read address control consists of Read address counter and Grey Address pipeline
  655. There are 3 Grey addresses:
  656.     - rgrey_minus1 is Grey Code of address one before current address
  657.     - rgrey_addr is Grey Code of current read address
  658.     - rgrey_next is Grey Code of next read address
  659. --------------------------------------------------------------------------------------------------*/
  660. // grey coded address pipeline for status generation in read clock domain
  661. always@(posedge rclock_in or posedge clear)
  662. begin
  663. if (clear)
  664.     begin
  665.         // initial value is 0
  666.         rgrey_minus1 &lt;= #1 0 ;
  667.         rgrey_addr   &lt;= #1 1 ;
  668.         rgrey_next   &lt;= #`FF_DELAY 3 ;
  669.     end
  670.     else
  671.     if (rallow_out)
  672.     begin
  673.         rgrey_minus1 &lt;= #1 rgrey_addr ;
  674.         rgrey_addr   &lt;= #1 rgrey_next ;
  675.         rgrey_next   &lt;= #`FF_DELAY {raddr[ADDR_LENGTH - 1], calc_rgrey_next} ;
  676.     end
  677. end
  678. /*--------------------------------------------------------------------------------------------
  679. Write address control consists of write address counter and Grey Code Register
  680. ----------------------------------------------------------------------------------------------*/
  681. // grey coded address pipeline for status generation in write clock domain
  682. always@(posedge wclock_in or posedge clear)
  683. begin
  684.     if (clear)
  685.     begin
  686.         wgrey_addr &lt;= #`FF_DELAY 1 ;
  687.         wgrey_next &lt;= #1 3         ;
  688.     end
  689.     else
  690.     if (wallow_out)
  691.     begin
  692.         wgrey_addr &lt;= #`FF_DELAY wgrey_next ;
  693.         wgrey_next &lt;= #1 {waddr[(ADDR_LENGTH - 1)], calc_wgrey_next} ;
  694.     end
  695. end
  696. // write address counter - nothing special - initial value is important though
  697. always@(posedge wclock_in or posedge clear)
  698. begin
  699.     if (clear)
  700.         // initial value 4
  701.     waddr &lt;= #`FF_DELAY 3 ;
  702.     else
  703.     if (wallow_out)
  704.         waddr &lt;= #`FF_DELAY waddr + 1'b1 ;
  705. end
  706. /*------------------------------------------------------------------------------------------------------------------------------
  707. Gray coded address of read address decremented by 1 is synchronized to write clock domain and compared to:
  708. - Gray coded write address. If they are equal, fifo is full.
  709. - Gray coded next write address. If they are equal, fifo is almost full.
  710. --------------------------------------------------------------------------------------------------------------------------------*/
  711. wire [(ADDR_LENGTH - 1):0] wclk_sync_rgrey_minus1 ;
  712. reg  [(ADDR_LENGTH - 1):0] wclk_rgrey_minus1 ;
  713. pci_synchronizer_flop #(ADDR_LENGTH, 0) i_synchronizer_reg_rgrey_minus1
  714. (
  715.     .data_in        (rgrey_minus1),
  716.     .clk_out        (wclock_in),
  717.     .sync_data_out  (wclk_sync_rgrey_minus1),
  718.     .async_reset    (clear)
  719. ) ;
  720. always@(posedge wclock_in or posedge clear)
  721. begin
  722.     if (clear)
  723.     begin
  724.         wclk_rgrey_minus1 &lt;= #`FF_DELAY 0 ;
  725.     end
  726.     else
  727.     begin
  728.         wclk_rgrey_minus1 &lt;= #`FF_DELAY wclk_sync_rgrey_minus1 ;
  729.     end
  730. end
  731. assign full_out        = (wgrey_addr == wclk_rgrey_minus1) ;
  732. assign almost_full_out = (wgrey_next == wclk_rgrey_minus1) ;
  733. /*------------------------------------------------------------------------------------------------------------------------------
  734. Empty control:
  735. Gray coded address of next write address is synchronized to read clock domain and compared to Gray coded next read address.
  736. If they are equal, fifo is empty.
  737. --------------------------------------------------------------------------------------------------------------------------------*/
  738. wire [(ADDR_LENGTH - 1):0] rclk_sync_wgrey_next ;
  739. reg  [(ADDR_LENGTH - 1):0] rclk_wgrey_next ;
  740. pci_synchronizer_flop #(ADDR_LENGTH, 3) i_synchronizer_reg_wgrey_next
  741. (
  742.     .data_in        (wgrey_next),
  743.     .clk_out        (rclock_in),
  744.     .sync_data_out  (rclk_sync_wgrey_next),
  745.     .async_reset    (clear)
  746. ) ;
  747. always@(posedge rclock_in or posedge clear)
  748. begin
  749.     if (clear)
  750.         rclk_wgrey_next &lt;= #`FF_DELAY 3 ;
  751.     else
  752.         rclk_wgrey_next &lt;= #`FF_DELAY rclk_sync_wgrey_next ;
  753. end
  754. assign empty_out = (rgrey_next == rclk_wgrey_next) ;
  755. endmodule
  756. </pre>
  757. <hr />
  758. <address><span style="font-size: smaller">FreeBSD-CVSweb &lt;<a href="mailto:freebsd-cvsweb@FreeBSD.org">freebsd-cvsweb@FreeBSD.org</a>&gt;</span></address>
  759. </body>
  760. </html>
  761. <!-- pf_body_end -->
  762. </td>
  763. <td><img width=15 src="/images/dotty.gif"></td>
  764. </tr></table>
  765. <xcenter>
  766. <p>
  767. <table width=100% cellpadding=0 cellspacing=0 border=0>
  768.       <tr><td align=right valign=bottom><a title='Top' href='#top'><img border=0 alt='Top' src='/images/hr_up.gif'></a></td></tr>
  769.       <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>
  770. &nbsp;
  771. <br>
  772. <!--
  773. <table border=0 cellpadding=0 cellspacing=1 bgcolor=#ffffff><tr><td>
  774. <table cellpadding=0 cellspacing=0 border=0 bgcolor=#ffffff><tr><td>
  775. //-->
  776. <script type="text/javascript"><!--
  777. google_ad_client = "pub-9285819221080148";
  778. google_alternate_color = "FFFFFF";
  779. google_ad_width = 728;
  780. google_ad_height = 90;
  781. google_ad_format = "728x90_as";
  782. google_ad_type = "text_image";
  783. google_ad_channel ="3034172958";
  784. google_color_border = "ffffff";
  785. google_color_bg = "ffffff";
  786. google_color_link = "444488";
  787. google_color_url = "b00000";
  788. google_color_text = "666666";
  789. //--></script>
  790. <script type="text/javascript"
  791.   src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
  792. </script>
  793. <!--
  794. </td></tr></table>
  795. </td></tr></table>
  796. //-->
  797. </center>
  798. <img border=0 src="/images/dotty.gif" height=1 width=400>
  799. <img border=0 src="/images/dotty.gif" height=1 width=30>
  800. <img border=0 src="/images/dotty.gif" height=1 width=30>
  801. <img border=0 src="/images/dotty.gif" height=1 width=30>
  802. <img border=0 src="/images/dotty.gif" height=1 width=30>
  803. <img border=0 src="/images/dotty.gif" height=1 width=30>
  804. <img border=0 src="/images/dotty.gif" height=1 width=30>
  805. <img border=0 src="/images/dotty.gif" height=1 width=30>
  806. <img border=0 src="/images/dotty.gif" height=1 width=30>
  807. <img border=0 src="/images/dotty.gif" height=1 width=30>
  808. <img border=0 src="/images/dotty.gif" height=1 width=30>
  809. <img border=0 src="/images/dotty.gif" height=1 width=30>
  810. <img border=0 src="/images/dotty.gif" height=1 width=30>
  811. <img border=0 src="/images/dotty.gif" height=1 width=30>
  812. <img border=0 src="/images/dotty.gif" height=1 width=30>
  813. <img border=0 src="/images/dotty.gif" height=1 width=30>
  814. <img border=0 src="/images/dotty.gif" height=1 width=30>
  815. <img border=0 src="/images/dotty.gif" height=1 width=30>
  816. <img border=0 src="/images/dotty.gif" height=1 width=30>
  817. <img border=0 src="/images/dotty.gif" height=1 width=30>
  818. <img border=0 src="/images/dotty.gif" height=1 width=30>
  819. <img border=0 src="/images/dotty.gif" height=1 width=30>
  820. <img border=0 src="/images/dotty.gif" height=1 width=30>
  821. <img border=0 src="/images/dotty.gif" height=1 width=30>
  822. <img border=0 src="/images/dotty.gif" height=1 width=30>
  823. </td></tr>
  824. </table>
  825. &nbsp;
  826. </td></tr>
  827. <tr bgcolor=#000000><td><img height=1 src="/images/dotty.gif"></td></tr>
  828. </table>
  829. <table background="/images/topbg.gif" width=100% cellpadding=0 cellspacing=0 border=0 bgcolor=#aaddff>
  830. <tr><td align=right>
  831. Copyright (c) 1999-2007 OPENCORES.ORG. All rights reserved. &nbsp;
  832. </td></tr>
  833. <tr><td>
  834. &nbsp;
  835. </td></tr>
  836. </table>
  837. </td>
  838. <td width=1 bgcolor=#000000><img width=1 src="/images/dotty.gif"></td>
  839. <td width=1 bgcolor=#f0f0c8><img width=1 src="/images/dotty.gif"></td>
  840. </tr></table>
  841. </center>
  842. <!-- pf_footer_start -->
  843.   </body>
  844. </html>
  845. <!-- pf_footer_end -->