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

并行计算

开发平台:

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_conf_space.v?rev=1.10'"></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_conf_space.v - view - 1.10</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_conf_space.v#rev1.10"><img src="/icons/back.gif" alt="[BACK]" border="0" width="20" height="22" /></a><b>Return to <a href="./pci_conf_space.v#rev1.10">pci_conf_space.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_conf_space.v">pci_conf_space.v</a><br />
  468. <a name="rev1.10"></a><a name="HEAD"></a>
  469.  Revision <b>1.10</b>: <a href="/cvsweb.cgi/~checkout~/pci/rtl/verilog/pci_conf_space.v?rev=1.10;content-type=text%2Fplain" class="download-link">download</a> - view: <a href="pci_conf_space.v?rev=1.10;content-type=text%2Fplain" class="display-link">text</a>, <a href="pci_conf_space.v?annotate=1.10">annotated</a> - <a href="pci_conf_space.v?r1=1.10#rev1.10">select&nbsp;for&nbsp;diffs</a><br />
  470. <i>Thu Aug 19 16:04:53 2004 UTC</i> (2 years, 8 months ago) by <i>mihad</i><br />
  471. Branches: <a href="./pci_conf_space.v?only_with_tag=MAIN">MAIN</a><br />
  472. CVS tags: <a href="./pci_conf_space.v?only_with_tag=HEAD">HEAD</a><br />
  473. <pre class="log">
  474. Removed some unused signals.
  475. </pre>
  476. </div>
  477. <hr /><pre>
  478. //////////////////////////////////////////////////////////////////////
  479. ////                                                              ////
  480. ////  File name: pci_conf_space.v                                 ////
  481. ////                                                              ////
  482. ////  This file is part of the &quot;PCI bridge&quot; project               ////
  483. ////  http://www.opencores.org/cores/pci/                         ////
  484. ////                                                              ////
  485. ////  Author(s):                                                  ////
  486. ////      - tadej@opencores.org                                   ////
  487. ////      - Tadej Markovic                                        ////
  488. ////                                                              ////
  489. ////  All additional information is avaliable in the README.txt   ////
  490. ////  file.                                                       ////
  491. ////                                                              ////
  492. ////                                                              ////
  493. //////////////////////////////////////////////////////////////////////
  494. ////                                                              ////
  495. //// Copyright (C) 2000 Tadej Markovic, tadej@opencores.org       ////
  496. ////                                                              ////
  497. //// This source file may be used and distributed without         ////
  498. //// restriction provided that this copyright statement is not    ////
  499. //// removed from the file and that any derivative work contains  ////
  500. //// the original copyright notice and the associated disclaimer. ////
  501. ////                                                              ////
  502. //// This source file is free software; you can redistribute it   ////
  503. //// and/or modify it under the terms of the GNU Lesser General   ////
  504. //// Public License as published by the Free Software Foundation; ////
  505. //// either version 2.1 of the License, or (at your option) any   ////
  506. //// later version.                                               ////
  507. ////                                                              ////
  508. //// This source is distributed in the hope that it will be       ////
  509. //// useful, but WITHOUT ANY WARRANTY; without even the implied   ////
  510. //// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      ////
  511. //// PURPOSE.  See the GNU Lesser General Public License for more ////
  512. //// details.                                                     ////
  513. ////                                                              ////
  514. //// You should have received a copy of the GNU Lesser General    ////
  515. //// Public License along with this source; if not, download it   ////
  516. //// from http://www.opencores.org/lgpl.shtml                     ////
  517. ////                                                              ////
  518. //////////////////////////////////////////////////////////////////////
  519. //
  520. // CVS Revision History
  521. //
  522. // $Log: pci_conf_space.v,v $
  523. // Revision 1.10  2004/08/19 16:04:53  mihad
  524. // Removed some unused signals.
  525. //
  526. // Revision 1.9  2004/08/19 15:27:34  mihad
  527. // Changed minimum pci image size to 256 bytes because
  528. // of some PC system problems with size of IO images.
  529. //
  530. // Revision 1.8  2004/07/07 12:45:01  mihad
  531. // Added SubsystemVendorID, SubsystemID, MAXLatency, MinGnt defines.
  532. // Enabled value loading from serial EEPROM for all of the above + VendorID and DeviceID registers.
  533. //
  534. // Revision 1.7  2004/01/24 11:54:18  mihad
  535. // Update! SPOCI Implemented!
  536. //
  537. // Revision 1.6  2003/12/28 09:54:48  fr2201
  538. // def_wb_imagex_addr_map  defined correctly
  539. //
  540. // Revision 1.5  2003/12/28 09:20:00  fr2201
  541. // Reset values for PCI, WB defined (PCI_TAx,WB_BAx,WB_TAx,WB_AMx,WB_BAx_MEM_IO)
  542. //
  543. // Revision 1.4  2003/12/19 11:11:30  mihad
  544. // Compact PCI Hot Swap support added.
  545. // New testcases added.
  546. // Specification updated.
  547. // Test application changed to support WB B3 cycles.
  548. //
  549. // Revision 1.3  2003/08/14 13:06:02  simons
  550. // synchronizer_flop replaced with pci_synchronizer_flop, artisan ram instance updated.
  551. //
  552. // Revision 1.2  2003/03/26 13:16:18  mihad
  553. // Added the reset value parameter to the synchronizer flop module.
  554. // Added resets to all synchronizer flop instances.
  555. // Repaired initial sync value in fifos.
  556. //
  557. // Revision 1.1  2003/01/27 16:49:31  mihad
  558. // Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed.
  559. //
  560. // Revision 1.4  2002/08/13 11:03:53  mihad
  561. // Added a few testcases. Repaired wrong reset value for PCI_AM5 register. Repaired Parity Error Detected bit setting. Changed PCI_AM0 to always enabled(regardles of PCI_AM0 define), if image 0 is used as configuration image
  562. //
  563. // Revision 1.3  2002/02/01 15:25:12  mihad
  564. // Repaired a few bugs, updated specification, added test bench files and design document
  565. //
  566. // Revision 1.2  2001/10/05 08:14:28  mihad
  567. // Updated all files with inclusion of timescale file for simulation purposes.
  568. //
  569. // Revision 1.1.1.1  2001/10/02 15:33:46  mihad
  570. // New project directory structure
  571. //
  572. //
  573. `include &quot;pci_constants.v&quot;
  574. // synopsys translate_off
  575. `include &quot;timescale.v&quot;
  576. // synopsys translate_on
  577. /*-----------------------------------------------------------------------------------------------------------
  578. w_ prefix is a sign for Write (and read) side of Dual-Port registers
  579. r_ prefix is a sign for Read only side of Dual-Port registers
  580. In the first line there are DATA and ADDRESS ports, in the second line there are write enable and read
  581. enable signals with chip-select (conf_hit) for config. space.
  582. In the third line there are output signlas from Command register of the PCI configuration header !!!
  583. In the fourth line there are input signals to Status register of the PCI configuration header !!!
  584. In the fifth line there is output from Latency Timer &amp; r_Interrupt pin registers of the PCI conf. header !!!
  585. Following are IMAGE specific registers, from which PCI_BASE_ADDR registers are the same as base address
  586. registers from the PCI conf. header !!!
  587. -----------------------------------------------------------------------------------------------------------*/
  588. // normal R/W address, data and control
  589. module pci_conf_space 
  590.                 ( w_conf_address_in, w_conf_data_in, w_conf_data_out, r_conf_address_in, r_conf_data_out,
  591. w_we_i, w_re, r_re, w_byte_en_in, w_clock, reset, pci_clk, wb_clk,
  592. // outputs from command register of the PCI header
  593. serr_enable, perr_response, pci_master_enable, memory_space_enable, io_space_enable,
  594. // inputs to status register of the PCI header
  595. perr_in, serr_in, master_abort_recv, target_abort_recv, target_abort_set, master_data_par_err,
  596. // output from cache_line_size, latency timer and r_interrupt_pin register of the PCI header
  597. cache_line_size_to_pci, cache_line_size_to_wb, cache_lsize_not_zero_to_wb,
  598. latency_tim,
  599. // output from all pci IMAGE registers
  600. pci_base_addr0, pci_base_addr1, pci_base_addr2, pci_base_addr3, pci_base_addr4, pci_base_addr5,
  601. pci_memory_io0, pci_memory_io1, pci_memory_io2, pci_memory_io3, pci_memory_io4, pci_memory_io5,
  602. pci_addr_mask0, pci_addr_mask1, pci_addr_mask2, pci_addr_mask3, pci_addr_mask4, pci_addr_mask5,
  603. pci_tran_addr0, pci_tran_addr1, pci_tran_addr2, pci_tran_addr3, pci_tran_addr4, pci_tran_addr5,
  604. pci_img_ctrl0,  pci_img_ctrl1,  pci_img_ctrl2,  pci_img_ctrl3,  pci_img_ctrl4,  pci_img_ctrl5,
  605. // input to pci error control and status register, error address and error data registers
  606. pci_error_be, pci_error_bc, pci_error_rty_exp, pci_error_es, pci_error_sig, pci_error_addr,
  607. pci_error_data,
  608. // output from all wishbone IMAGE registers
  609. wb_base_addr0, wb_base_addr1, wb_base_addr2, wb_base_addr3, wb_base_addr4, wb_base_addr5,
  610. wb_memory_io0, wb_memory_io1, wb_memory_io2, wb_memory_io3, wb_memory_io4, wb_memory_io5,
  611. wb_addr_mask0, wb_addr_mask1, wb_addr_mask2, wb_addr_mask3, wb_addr_mask4, wb_addr_mask5,
  612. wb_tran_addr0, wb_tran_addr1, wb_tran_addr2, wb_tran_addr3, wb_tran_addr4, wb_tran_addr5,
  613. wb_img_ctrl0,  wb_img_ctrl1,  wb_img_ctrl2,  wb_img_ctrl3,  wb_img_ctrl4,  wb_img_ctrl5,
  614. // input to wb error control and status register, error address and error data registers
  615. wb_error_be, wb_error_bc, wb_error_rty_exp, wb_error_es, wb_error_sig, wb_error_addr, wb_error_data,
  616. // output from conf. cycle generation register (sddress), int. control register &amp; interrupt output
  617. config_addr, icr_soft_res, int_out,
  618. // input to interrupt status register
  619. isr_sys_err_int, isr_par_err_int, isr_int_prop,
  620.                     pci_init_complete_out, wb_init_complete_out
  621.                 `ifdef PCI_CPCI_HS_IMPLEMENT
  622.                     ,
  623.                     pci_cpci_hs_enum_oe_o, pci_cpci_hs_led_oe_o, pci_cpci_hs_es_i
  624.                 `endif
  625.                 `ifdef PCI_SPOCI
  626.                     ,
  627.                     spoci_scl_oe_o, spoci_sda_i, spoci_sda_oe_o
  628.                 `endif
  629.                 ) ;
  630. /*###########################################################################################################
  631. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  632. Input and output ports
  633. ======================
  634. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  635. ###########################################################################################################*/
  636. // output data
  637. output [31 : 0] w_conf_data_out ;
  638. output [31 : 0] r_conf_data_out ;
  639. reg [31 : 0] w_conf_data_out ;
  640. `ifdef NO_CNF_IMAGE
  641. `else
  642. reg [31 : 0] r_conf_data_out ;
  643. `endif
  644. // input data
  645. input [31 : 0] w_conf_data_in ;
  646. wire [31 : 0] w_conf_pdata_reduced ; // reduced data written into PCI image registers
  647. wire [31 : 0] w_conf_wdata_reduced ; // reduced data written into WB  image registers
  648. // input address
  649. input [11 : 0] w_conf_address_in ;
  650. input [11 : 0] r_conf_address_in ;
  651. // input control signals
  652. input w_we_i ;
  653. input w_re   ;
  654. input r_re   ;
  655. input [3 : 0] w_byte_en_in ;
  656. input w_clock ;
  657. input reset ;
  658. input pci_clk ;
  659. input wb_clk ;
  660. // PCI header outputs from command register
  661. output serr_enable ;
  662. output perr_response ;
  663. output pci_master_enable ;
  664. output memory_space_enable ;
  665. output io_space_enable ;
  666. // PCI header inputs to status register
  667. input perr_in ;
  668. input serr_in ;
  669. input master_abort_recv ;
  670. input target_abort_recv ;
  671. input target_abort_set ;
  672. input master_data_par_err ;
  673. // PCI header output from cache_line_size, latency timer and interrupt pin
  674. output [7 : 0] cache_line_size_to_pci ; // sinchronized to PCI clock
  675. output [7 : 0] cache_line_size_to_wb ;  // sinchronized to WB clock
  676. output cache_lsize_not_zero_to_wb ; // used in WBU and PCIU
  677. output [7 : 0] latency_tim ;
  678. //output [2 : 0] int_pin ; // only 3 LSbits are important!
  679. // PCI output from image registers
  680. `ifdef GUEST
  681.     output [31:12] pci_base_addr0 ;
  682. `endif
  683. `ifdef HOST
  684.     `ifdef NO_CNF_IMAGE
  685.         output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr0 ;
  686.     `else
  687.         output [31:12] pci_base_addr0 ;
  688.     `endif
  689. `endif
  690. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr1 ;
  691. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr2 ;
  692. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr3 ;
  693. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr4 ;
  694. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr5 ;
  695. output pci_memory_io0 ;
  696. output pci_memory_io1 ;
  697. output pci_memory_io2 ;
  698. output pci_memory_io3 ;
  699. output pci_memory_io4 ;
  700. output pci_memory_io5 ;
  701. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask0 ;
  702. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask1 ;
  703. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask2 ;
  704. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask3 ;
  705. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask4 ;
  706. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask5 ;
  707. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr0 ;
  708. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr1 ;
  709. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr2 ;
  710. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr3 ;
  711. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr4 ;
  712. output  [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr5 ;
  713. output  [2 : 1]                 pci_img_ctrl0 ;
  714. output  [2 : 1]                 pci_img_ctrl1 ;
  715. output  [2 : 1]                 pci_img_ctrl2 ;
  716. output  [2 : 1]                 pci_img_ctrl3 ;
  717. output  [2 : 1]                 pci_img_ctrl4 ;
  718. output  [2 : 1]                 pci_img_ctrl5 ;
  719. // PCI input to pci error control and status register, error address and error data registers
  720. input [3 : 0] pci_error_be ;
  721. input   [3 : 0]                 pci_error_bc ;
  722. input                           pci_error_rty_exp ;
  723. input pci_error_es ;
  724. input                           pci_error_sig ;
  725. input   [31 : 0]                pci_error_addr ;
  726. input   [31 : 0]                pci_error_data ;
  727. // WISHBONE output from image registers
  728. output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr0 ;
  729. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr1 ;
  730. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr2 ;
  731. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr3 ;
  732. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr4 ;
  733. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr5 ;
  734. output wb_memory_io0 ;
  735. output wb_memory_io1 ;
  736. output wb_memory_io2 ;
  737. output wb_memory_io3 ;
  738. output wb_memory_io4 ;
  739. output wb_memory_io5 ;
  740. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_addr_mask0 ;
  741. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_addr_mask1 ;
  742. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_addr_mask2 ;
  743. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_addr_mask3 ;
  744. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_addr_mask4 ;
  745. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_addr_mask5 ;
  746. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_tran_addr0 ;
  747. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_tran_addr1 ;
  748. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_tran_addr2 ;
  749. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_tran_addr3 ;
  750. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_tran_addr4 ;
  751. output  [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_tran_addr5 ;
  752. output  [2 : 0]                 wb_img_ctrl0 ;
  753. output  [2 : 0]                 wb_img_ctrl1 ;
  754. output  [2 : 0]                 wb_img_ctrl2 ;
  755. output  [2 : 0]                 wb_img_ctrl3 ;
  756. output  [2 : 0]                 wb_img_ctrl4 ;
  757. output  [2 : 0]                 wb_img_ctrl5 ;
  758. // WISHBONE input to wb error control and status register, error address and error data registers
  759. input [3 : 0]  wb_error_be ;
  760. input   [3 : 0]                 wb_error_bc ;
  761. input                    wb_error_rty_exp ;
  762. input                           wb_error_es ;
  763. input                           wb_error_sig ;
  764. input   [31 : 0]                wb_error_addr ;
  765. input   [31 : 0]                wb_error_data ;
  766. // GENERAL output from conf. cycle generation register &amp; int. control register
  767. output [23 : 0] config_addr ;
  768. output                          icr_soft_res ;
  769. output int_out ;
  770. // GENERAL input to interrupt status register
  771. input                           isr_sys_err_int ;
  772. input                           isr_par_err_int ;
  773. input isr_int_prop ;
  774. output                          pci_init_complete_out ;
  775. output                          wb_init_complete_out  ;
  776. `ifdef PCI_CPCI_HS_IMPLEMENT
  777. output  pci_cpci_hs_enum_oe_o   ; 
  778. output  pci_cpci_hs_led_oe_o    ; 
  779. input   pci_cpci_hs_es_i        ;
  780. reg pci_cpci_hs_enum_oe_o   ; 
  781. reg pci_cpci_hs_led_oe_o    ; 
  782. // set the hot swap ejector switch debounce counter width
  783. // it is only 4 for simulation purposes
  784. `ifdef PCI_CPCI_SIM
  785.     parameter hs_es_cnt_width = 4  ;
  786. `else
  787.     `ifdef PCI33
  788.     
  789.     parameter hs_es_cnt_width = 16 ;
  790.     
  791.     `endif
  792.     
  793.     `ifdef PCI66
  794.     
  795.     parameter hs_es_cnt_width = 17 ;
  796.     
  797.     `endif
  798. `endif
  799. `endif
  800. `ifdef PCI_SPOCI
  801. output  spoci_scl_oe_o  ;
  802. input   spoci_sda_i     ;
  803. output  spoci_sda_oe_o  ;
  804. reg spoci_cs_nack,
  805.     spoci_cs_write,
  806.     spoci_cs_read;
  807. reg [10: 0] spoci_cs_adr   ; 
  808. reg [ 7: 0] spoci_cs_dat   ;
  809. `endif
  810. /*###########################################################################################################
  811. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  812. REGISTERS definition
  813. ====================
  814. /////////////////////////////////////////////////////////////////////////////////////////////////////////////
  815. ###########################################################################################################*/
  816. // Decoded Register Select signals for writting (only one address decoder)
  817. reg [56 : 0] w_reg_select_dec ;
  818. /*###########################################################################################################
  819. -------------------------------------------------------------------------------------------------------------
  820. PCI CONFIGURATION SPACE HEADER (type 00h) registers
  821. BIST and some other registers are not implemented and therefor written in correct
  822. place with comment line. There are also some registers with NOT all bits implemented and therefor uses
  823. _bitX or _bitX2_X1 to sign which bit or range of bits are implemented.
  824. Some special cases and examples are described below!
  825. -------------------------------------------------------------------------------------------------------------
  826. ###########################################################################################################*/
  827. /*-----------------------------------------------------------------------------------------------------------
  828. [000h-00Ch] First 4 DWORDs (32-bit) of PCI configuration header - the same regardless of the HEADER type !
  829. r_ prefix is a sign for read only registers
  830. Vendor_ID is an ID for a specific vendor defined by PCI_SIG - 2321h does not belong to anyone (e.g.
  831. Xilinx's Vendor_ID is 10EEh and Altera's Vendor_ID is 1172h). Device_ID and Revision_ID should be used
  832. together by application. Class_Code has 3 bytes to define BASE class (06h for PCI Bridge), SUB class
  833. (00h for HOST type, 80h for Other Bridge type) and Interface type (00h for normal).
  834. -----------------------------------------------------------------------------------------------------------*/
  835.             reg [15: 0] r_vendor_id         ;
  836.             reg [15: 0] r_device_id         ;
  837.             reg [15: 0] r_subsys_vendor_id  ;
  838.             reg [15: 0] r_subsys_id         ;
  839. reg command_bit8 ;
  840. reg command_bit6 ;
  841. reg [2 : 0] command_bit2_0 ;
  842. reg [15 : 11] status_bit15_11 ;
  843. parameter r_status_bit10_9 = 2'b01 ; // 2'b01 means MEDIUM devsel timing !!!
  844. reg status_bit8 ;
  845. parameter r_status_bit7 = 1'b1 ; // fast back-to-back capable response !!!
  846. parameter r_status_bit5 = `HEADER_66MHz ;    // 1'b0 indicates 33 MHz capable !!!
  847. `ifdef PCI_CPCI_HS_IMPLEMENT
  848.             wire                r_status_bit4 = 1   ;
  849.             reg                 hs_ins              ;
  850.             reg                 hs_ext              ;
  851.             wire    [ 1: 0]     hs_pi = 2'b00       ;
  852.             reg                 hs_loo              ;
  853.             reg                 hs_eim              ;
  854.             wire    [ 7: 0]     hs_cap_id = 8'h06   ;
  855.             reg                 hs_ins_armed        ;
  856.             reg                 hs_ext_armed        ;
  857. `else
  858.             wire                r_status_bit4 = 0 ;
  859. `endif
  860.             reg     [ 7: 0]     r_revision_id   ;
  861. `ifdef HOST
  862. parameter r_class_code = 24'h06_00_00 ;
  863. `else
  864. parameter r_class_code = 24'h06_80_00 ;
  865. `endif
  866. reg [7 : 0] cache_line_size_reg ;
  867. reg [7 : 0] latency_timer ;
  868. parameter r_header_type = 8'h00 ;
  869. // REG bist NOT implemented !!!
  870. /*-----------------------------------------------------------------------------------------------------------
  871. [010h-03Ch] all other DWORDs (32-bit) of PCI configuration header - only for HEADER type 00h !
  872. r_ prefix is a sign for read only registers
  873. BASE_ADDRESS_REGISTERS are the same as ones in the PCI Target configuration registers section. They
  874. are duplicated and therefor defined just ones and used with the same name as written below. If
  875. IMAGEx is NOT defined there is only parameter image_X assigned to '0' and this parameter is used
  876. elsewhere in the code. This parameter is defined in the INTERNAL SIGNALS part !!!
  877. Interrupt_Pin value 8'h01 is used for INT_A pin used.
  878. MIN_GNT and MAX_LAT are used for device's desired values for Latency Timer value. The value in boath
  879. registers specifies a period of time in units of 1/4 microsecond. ZERO indicates that there are no
  880. major requirements for the settings of Latency Timer.
  881. MIN_GNT specifieshow how long a burst period the device needs at 33MHz. MAX_LAT specifies how often
  882. the device needs to gain access to the PCI bus. Values are choosen assuming that the target does not
  883. insert any wait states. Follow the expamle of settings for simple display card.
  884. If we use 64 (32-bit) FIFO locations for one burst then we need 8 x 1/4 microsecond periods at 33MHz
  885. clock rate =&gt; MIN_GNT = 08h ! Resolution is 1024 x 768 (= 786432 pixels for one frame) with 16-bit
  886. color mode. We can transfere 2 16-bit pixels in one FIFO location. From that we calculate, that for
  887. one frame we need 6144 burst transferes in 1/25 second. So we need one burst every 6,51 microsecond
  888. and that is 26 x 1/4 microsecond or 1Ah x 1/4 microsecond =&gt; MAX_LAT = 1Ah !
  889. -----------------------------------------------------------------------------------------------------------*/
  890. // REG x 6 base_address_register_X IMPLEMENTED as pci_ba_X !!!
  891. // REG r_cardbus_cis_pointer NOT implemented !!!
  892. // REG r_subsystem_vendor_id NOT implemented !!!
  893. // REG r_subsystem_id NOT implemented !!!
  894. // REG r_expansion_rom_base_address NOT implemented !!!
  895. // REG r_cap_list_pointer NOT implemented !!!
  896. reg [7 : 0] interrupt_line ;
  897. parameter r_interrupt_pin = 8'h01 ;
  898. reg     [7 : 0] r_min_gnt   ;
  899.             reg     [7 : 0] r_max_lat   ;
  900. /*###########################################################################################################
  901. -------------------------------------------------------------------------------------------------------------
  902. PCI Target configuration registers
  903. There are also some registers with NOT all bits implemented and therefor uses _bitX or _bitX2_X1 to
  904. sign which bit or range of bits are implemented. Some special cases and examples are described below!
  905. -------------------------------------------------------------------------------------------------------------
  906. ###########################################################################################################*/
  907. /*-----------------------------------------------------------------------------------------------------------
  908. [100h-168h]
  909. Depending on defines (PCI_IMAGE1 or .. or PCI_IMAGE5 or (PCI_IMAGE0 and HOST)) in constants.v file,
  910. there are registers corresponding to each IMAGE defined to REG and parameter pci_image_X assigned to '1'.
  911. The maximum number of images is &quot;6&quot;. By default there are first two images used and the first (PCI_IMAGE0)
  912. is assigned to Configuration space! With a 'define' PCI_IMAGEx you choose the number of used PCI IMAGES
  913. in a bridge without PCI_IMAGE0 (e.g. PCI_IMAGE3 tells, that PCI_IMAGE1, PCI_IMAGE2 and PCI_IMAGE3 are
  914. used for mapping the space from WB to PCI. Offcourse, PCI_IMAGE0 is assigned to Configuration space).
  915. That leave us PCI_IMAGE5 as the maximum number of images.
  916. There is one exeption, when the core is implemented as HOST. If so, then the PCI specification allowes
  917. the Configuration space NOT to be visible on the PCI bus. With `define PCI_IMAGE0 (and `define HOST), we
  918. assign PCI_IMAGE0 to normal WB to PCI image and not to configuration space!
  919. When error occurs, PCI ERR_ADDR and ERR_DATA registers stores address and data on the bus that
  920. caused error. While ERR_CS register stores Byte Enables and Bus Command in the MSByte. In bits 10
  921. and 8 it reports Retry Counter Expired (for posted writes), Error Source (Master Abort) and Error
  922. Report Signal (signals that error has occured) respectively. With bit 0 we enable Error Reporting
  923. mechanism.
  924. -----------------------------------------------------------------------------------------------------------*/
  925. `ifdef HOST
  926. `ifdef NO_CNF_IMAGE
  927. `ifdef PCI_IMAGE0 // if PCI bridge is HOST and IMAGE0 is assigned as general image space
  928. reg [31 : 8] pci_ba0_bit31_8 ;
  929. reg [2 : 1] pci_img_ctrl0_bit2_1 ;
  930. reg pci_ba0_bit0 ;
  931. reg [31 : 8] pci_am0 ;
  932. reg [31 : 8] pci_ta0 ;
  933. `else // if PCI bridge is HOST and IMAGE0 is not used
  934. wire [31 : 8] pci_ba0_bit31_8 = 24'h0000_00 ; // NO base address needed
  935. wire [2 : 1] pci_img_ctrl0_bit2_1 = 2'b00 ; // NO addr.transl. and pre-fetch
  936. wire pci_ba0_bit0 = 0 ; // config. space is MEMORY space
  937. wire [31 : 8] pci_am0 = 24'h0000_00 ; // NO address mask needed
  938. wire [31 : 8] pci_ta0 = 24'h0000_00 ; // NO address translation needed
  939. `endif
  940. `else // if PCI bridge is HOST and IMAGE0 is assigned to PCI configuration space
  941. reg [31 : 8] pci_ba0_bit31_8 ;
  942. wire [2 : 1] pci_img_ctrl0_bit2_1 = 2'b00 ; // NO pre-fetch and read line support
  943. wire pci_ba0_bit0 = 0 ; // config. space is MEMORY space
  944. wire [31 : 8] pci_am0 = 24'hFFFF_F0 ; // address mask for configuration image always 20'hffff_f
  945. wire [31 : 8] pci_ta0 = 24'h0000_00 ; // NO address translation needed
  946. `endif
  947. `endif
  948. `ifdef GUEST // if PCI bridge is GUEST, then IMAGE0 is assigned to PCI configuration space
  949. reg [31 : 8] pci_ba0_bit31_8 ;
  950. wire [2 : 1] pci_img_ctrl0_bit2_1 = 2'b00 ; // NO addr.transl. and pre-fetch
  951. wire pci_ba0_bit0 = 0 ; // config. space is MEMORY space
  952. wire [31 : 8] pci_am0 = 24'hffff_f0 ; // address mask for configuration image always 24'hffff_f0 - 4KB mem image
  953. wire [31 : 8] pci_ta0 = 24'h0000_00 ; // NO address translation needed
  954. `endif
  955. // IMAGE1 is included by default, meanwhile other IMAGEs are optional !!!
  956. reg [2 : 1] pci_img_ctrl1_bit2_1 ;
  957. reg [31 : 8] pci_ba1_bit31_8 ;
  958. `ifdef HOST
  959. reg pci_ba1_bit0 ;
  960. `else
  961. wire pci_ba1_bit0 = `PCI_BA1_MEM_IO ;
  962. `endif
  963. reg [31 :  8] pci_am1 ;
  964. reg [31 :  8] pci_ta1 ;
  965. `ifdef PCI_IMAGE2
  966. reg [2 : 1] pci_img_ctrl2_bit2_1 ;
  967. reg [31 : 8] pci_ba2_bit31_8 ;
  968. `ifdef HOST
  969. reg pci_ba2_bit0 ;
  970. `else
  971. wire pci_ba2_bit0 = `PCI_BA2_MEM_IO ;
  972. `endif
  973. reg [31 :  8] pci_am2 ;
  974. reg [31 :  8] pci_ta2 ;
  975. `else
  976.             wire [2 : 1] pci_img_ctrl2_bit2_1 = 2'b00 ;
  977. wire [31 :  8] pci_ba2_bit31_8 = 24'h0000_00 ;
  978.             wire pci_ba2_bit0 = 1'b0 ;
  979.             wire [31 :  8] pci_am2 = 24'h0000_00 ;
  980.             wire [31 :  8] pci_ta2 = 24'h0000_00 ;
  981. `endif
  982. `ifdef PCI_IMAGE3
  983. reg [2 : 1] pci_img_ctrl3_bit2_1 ;
  984. reg [31 :  8] pci_ba3_bit31_8 ;
  985. `ifdef HOST
  986. reg pci_ba3_bit0 ;
  987. `else
  988. wire pci_ba3_bit0 = `PCI_BA3_MEM_IO ;
  989. `endif
  990. reg [31 :  8] pci_am3 ;
  991. reg [31 :  8] pci_ta3 ;
  992. `else
  993.             wire [2 : 1] pci_img_ctrl3_bit2_1 = 2'b00 ;
  994. wire [31 :  8] pci_ba3_bit31_8 = 24'h0000_00 ;
  995.             wire pci_ba3_bit0 = 1'b0 ;
  996.             wire [31 :  8] pci_am3 = 24'h0000_00 ;
  997.             wire [31 :  8] pci_ta3 = 24'h0000_00 ;
  998. `endif
  999. `ifdef PCI_IMAGE4
  1000. reg [2 : 1] pci_img_ctrl4_bit2_1 ;
  1001. reg [31 :  8] pci_ba4_bit31_8 ;
  1002. `ifdef HOST
  1003. reg pci_ba4_bit0 ;
  1004. `else
  1005. wire pci_ba4_bit0 = `PCI_BA4_MEM_IO ;
  1006. `endif
  1007. reg [31 :  8] pci_am4 ;
  1008. reg [31 :  8] pci_ta4 ;
  1009. `else
  1010.             wire [2 : 1] pci_img_ctrl4_bit2_1 = 2'b00 ;
  1011. wire [31 :  8] pci_ba4_bit31_8 = 24'h0000_00 ;
  1012.             wire pci_ba4_bit0 = 1'b0 ;
  1013.             wire [31 :  8] pci_am4 = 24'h0000_00 ;
  1014.             wire [31 :  8] pci_ta4 = 24'h0000_00 ;
  1015. `endif
  1016. `ifdef PCI_IMAGE5
  1017. reg [2 : 1] pci_img_ctrl5_bit2_1 ;
  1018. reg [31 :  8] pci_ba5_bit31_8 ;
  1019. `ifdef HOST
  1020. reg pci_ba5_bit0 ;
  1021. `else
  1022. wire pci_ba5_bit0 = `PCI_BA5_MEM_IO ;
  1023. `endif
  1024. reg [31 :  8] pci_am5 ;
  1025. reg [31 :  8] pci_ta5 ;
  1026. `else
  1027.             wire [2 : 1] pci_img_ctrl5_bit2_1 = 2'b00 ;
  1028. wire [31 :  8] pci_ba5_bit31_8 = 24'h0000_00 ;
  1029.             wire pci_ba5_bit0 = 1'b0 ;
  1030.             wire [31 :  8] pci_am5 = 24'h0000_00 ;
  1031.             wire [31 :  8] pci_ta5 = 24'h0000_00 ;
  1032. `endif
  1033. reg [31 : 24] pci_err_cs_bit31_24 ;
  1034. reg pci_err_cs_bit10 ;
  1035. reg pci_err_cs_bit9 ;
  1036. reg pci_err_cs_bit8 ;
  1037. reg pci_err_cs_bit0 ;
  1038. reg [31 : 0] pci_err_addr ;
  1039. reg [31 : 0] pci_err_data ;
  1040. /*###########################################################################################################
  1041. -------------------------------------------------------------------------------------------------------------
  1042. WISHBONE Slave configuration registers
  1043. There are also some registers with NOT all bits implemented and therefor uses _bitX or _bitX2_X1 to
  1044. sign which bit or range of bits are implemented. Some special cases and examples are described below!
  1045. -------------------------------------------------------------------------------------------------------------
  1046. ###########################################################################################################*/
  1047. /*-----------------------------------------------------------------------------------------------------------
  1048. [800h-85Ch]
  1049. Depending on defines (WB_IMAGE1 or .. or WB_IMAGE4 or WB_IMAGE5) in constants.v file, there are
  1050. registers corresponding to each IMAGE defined to REG and parameter wb_image_X assigned to '1'.
  1051. The maximum number of images is &quot;6&quot;. By default there are first two images used and the first (WB_IMAGE0)
  1052. is assigned to Configuration space! With a 'define' WB_IMAGEx you choose the number of used WB IMAGES in
  1053. a bridge without WB_IMAGE0 (e.g. WB_IMAGE3 tells, that WB_IMAGE1, WB_IMAGE2 and WB_IMAGE3 are used for
  1054. mapping the space from PCI to WB. Offcourse, WB_IMAGE0 is assigned to Configuration space). That leave
  1055. us WB_IMAGE5 as the maximum number of images.
  1056. When error occurs, WISHBONE ERR_ADDR and ERR_DATA registers stores address and data on the bus that
  1057. caused error. While ERR_CS register stores Byte Enables and Bus Command in the MSByte. In bits 10, 9
  1058. and 8 it reports Retry Counter Expired (for posted writes), Error Source (Master Abort) and Error
  1059. Report Signal (signals that error has occured) respectively. With bit 0 we enable Error Reporting
  1060. mechanism.
  1061. -----------------------------------------------------------------------------------------------------------*/
  1062. // WB_IMAGE0 is always assigned to config. space or is not used
  1063. wire [2 : 0] wb_img_ctrl0_bit2_0 = 3'b000 ; // NO addr.transl., pre-fetch and read-line
  1064. wire [31 : 12] wb_ba0_bit31_12 = `WB_CONFIGURATION_BASE ;
  1065. wire wb_ba0_bit0 = 0 ; // config. space is MEMORY space
  1066. wire [31 : 12] wb_am0 = `WB_AM0 ; // 4KBytes of configuration space is minimum
  1067. wire [31 : 12] wb_ta0 = 20'h0000_0 ; // NO address translation needed
  1068. // WB_IMAGE1 is included by default meanwhile others are optional !
  1069. reg [2 : 0] wb_img_ctrl1_bit2_0 ;
  1070. reg [31 : 12] wb_ba1_bit31_12 ;
  1071. reg wb_ba1_bit0 ;
  1072. reg [31 : 12] wb_am1 ;
  1073. reg [31 : 12] wb_ta1 ;
  1074. `ifdef WB_IMAGE2
  1075. reg [2 : 0] wb_img_ctrl2_bit2_0 ;
  1076. reg [31 : 12] wb_ba2_bit31_12 ;
  1077. reg wb_ba2_bit0 ;
  1078. reg [31 : 12] wb_am2 ;
  1079. reg [31 : 12] wb_ta2 ;
  1080. `else
  1081.             wire [2 : 0] wb_img_ctrl2_bit2_0 = 3'b000 ;
  1082. wire [31 : 12] wb_ba2_bit31_12 = 20'h0000_0 ;
  1083.             wire wb_ba2_bit0 = 1'b0 ;
  1084.             wire [31 : 12] wb_am2 = 20'h0000_0 ;
  1085.             wire [31 : 12] wb_ta2 = 20'h0000_0 ;
  1086. `endif
  1087. `ifdef WB_IMAGE3
  1088. reg [2 : 0] wb_img_ctrl3_bit2_0 ;
  1089. reg [31 : 12] wb_ba3_bit31_12 ;
  1090. reg wb_ba3_bit0 ;
  1091. reg [31 : 12] wb_am3 ;
  1092. reg [31 : 12] wb_ta3 ;
  1093. `else
  1094.             wire [2 : 0] wb_img_ctrl3_bit2_0 = 3'b000 ;
  1095. wire [31 : 12] wb_ba3_bit31_12 = 20'h0000_0 ;
  1096.             wire wb_ba3_bit0 = 1'b0 ;
  1097.             wire [31 : 12] wb_am3 = 20'h0000_0 ;
  1098.             wire [31 : 12] wb_ta3 = 20'h0000_0 ;
  1099. `endif
  1100. `ifdef WB_IMAGE4
  1101. reg [2 : 0] wb_img_ctrl4_bit2_0 ;
  1102. reg [31 : 12] wb_ba4_bit31_12 ;
  1103. reg wb_ba4_bit0 ;
  1104. reg [31 : 12] wb_am4 ;
  1105. reg [31 : 12] wb_ta4 ;
  1106. `else
  1107.             wire [2 : 0] wb_img_ctrl4_bit2_0 = 3'b000 ;
  1108. wire [31 : 12] wb_ba4_bit31_12 = 20'h0000_0 ;
  1109.             wire wb_ba4_bit0 = 1'b0 ;
  1110.             wire [31 : 12] wb_am4 = 20'h0000_0 ;
  1111.             wire [31 : 12] wb_ta4 = 20'h0000_0 ;
  1112. `endif
  1113. `ifdef WB_IMAGE5
  1114. reg [2 : 0] wb_img_ctrl5_bit2_0 ;
  1115. reg [31 : 12] wb_ba5_bit31_12 ;
  1116. reg wb_ba5_bit0 ;
  1117. reg [31 : 12] wb_am5 ;
  1118. reg [31 : 12] wb_ta5 ;
  1119. `else
  1120.             wire [2 : 0] wb_img_ctrl5_bit2_0 = 3'b000 ;
  1121. wire [31 : 12] wb_ba5_bit31_12 = 20'h0000_0 ;
  1122.             wire wb_ba5_bit0 = 1'b0 ;
  1123.             wire [31 : 12] wb_am5 = 20'h0000_0 ;
  1124.             wire [31 : 12] wb_ta5 = 20'h0000_0 ;
  1125. `endif
  1126. reg [31 : 24] wb_err_cs_bit31_24 ;
  1127. /* reg wb_err_cs_bit10 ;*/
  1128. reg wb_err_cs_bit9 ;
  1129. reg wb_err_cs_bit8 ;
  1130. reg wb_err_cs_bit0 ;
  1131. reg [31 : 0] wb_err_addr ;
  1132. reg [31 : 0] wb_err_data ;
  1133. /*###########################################################################################################
  1134. -------------------------------------------------------------------------------------------------------------
  1135. Configuration Cycle address register
  1136. There are also some registers with NOT all bits implemented and therefor uses _bitX or _bitX2_X1 to
  1137. sign which bit or range of bits are implemented.
  1138. -------------------------------------------------------------------------------------------------------------
  1139. ###########################################################################################################*/
  1140. /*-----------------------------------------------------------------------------------------------------------
  1141. [860h-868h]
  1142. PCI bridge must ignore Type 1 configuration cycles (Master Abort) since they are used for PCI to PCI
  1143. bridges. This is single function device, that means responding on configuration cycles to all functions
  1144. (or responding only to function 0). Configuration address register for generating configuration cycles
  1145. is prepared for all options (it includes Bus Number, Device, Function, Offset and Type).
  1146. Interrupt acknowledge register stores interrupt vector data returned during Interrupt Acknowledge cycle.
  1147. -----------------------------------------------------------------------------------------------------------*/
  1148. `ifdef HOST
  1149. reg [23 : 2] cnf_addr_bit23_2 ;
  1150. reg cnf_addr_bit0 ;
  1151. `else // GUEST
  1152. wire [23 : 2] cnf_addr_bit23_2 = 22'h0 ;
  1153. wire cnf_addr_bit0 = 1'b0 ;
  1154. `endif
  1155. // reg [31 : 0] cnf_data ; IMPLEMENTED elsewhere !!!!!
  1156. // reg [31 : 0] int_ack ; IMPLEMENTED elsewhere !!!!!
  1157. /*###########################################################################################################
  1158. -------------------------------------------------------------------------------------------------------------
  1159. General Interrupt registers
  1160. There are also some registers with NOT all bits implemented and therefor uses _bitX or _bitX2_X1 to
  1161. sign which bit or range of bits are implemented.
  1162. -------------------------------------------------------------------------------------------------------------
  1163. ###########################################################################################################*/
  1164. /*-----------------------------------------------------------------------------------------------------------
  1165. [FF8h-FFCh]
  1166. Bit 31 in the Interrupt Control register is set by software and used to generate SOFT RESET. Other 4
  1167. bits are used to enable interrupt generations.
  1168. 5 LSbits in the Interrupt Status register are indicating System Error Int, Parity Error Int, PCI &amp; WB
  1169. Error Int and Inerrupt respecively. System and Parity errors are implented only in HOST bridge
  1170. implementations!
  1171. -----------------------------------------------------------------------------------------------------------*/
  1172. reg icr_bit31 ;
  1173. `ifdef HOST
  1174. reg [4 : 3] icr_bit4_3              ;
  1175. reg [4 : 3] isr_bit4_3              ;
  1176. reg [2 : 0] icr_bit2_0              ;
  1177. reg [2 : 0] isr_bit2_0              ;
  1178. `else // GUEST
  1179. wire [4 : 3] icr_bit4_3 = 2'h0 ;
  1180. wire [4 : 3] isr_bit4_3 = 2'h0 ;
  1181. reg [2 : 0] icr_bit2_0 ;
  1182. reg [2 : 0] isr_bit2_0 ;
  1183. `endif
  1184. /*###########################################################################################################
  1185. -------------------------------------------------------------------------------------------------------------
  1186. Initialization complete identifier
  1187.     When using I2C or similar initialisation mechanism,
  1188.     the bridge must not respond to transaction requests on PCI bus,
  1189.     not even to configuration cycles.
  1190.     Therefore, only when init_complete is set, the bridge starts
  1191.     participating on the PCI bus as an active device.
  1192.     Two additional flip flops are also provided for GUEST implementation,
  1193.     to synchronize to the pci clock after PCI reset is asynchronously de-asserted.
  1194. -------------------------------------------------------------------------------------------------------------
  1195. ###########################################################################################################*/
  1196. `ifdef GUEST
  1197. reg rst_inactive_sync ;
  1198. reg rst_inactive      ;
  1199. `else
  1200. wire rst_inactive = 1'b1 ;
  1201. `endif
  1202. reg init_complete   ;
  1203. wire    sync_init_complete ;
  1204. `ifdef HOST
  1205. assign  wb_init_complete_out = init_complete ;
  1206. pci_synchronizer_flop #(1, 0) i_pci_init_complete_sync
  1207. (
  1208.     .data_in        (   init_complete       ), 
  1209.     .clk_out        (   pci_clk             ), 
  1210.     .sync_data_out  (   sync_init_complete  ), 
  1211.     .async_reset    (   reset               )
  1212. );
  1213. reg pci_init_complete_out ;
  1214. always@(posedge pci_clk or posedge reset)
  1215. begin
  1216.     if (reset)
  1217.         pci_init_complete_out &lt;= 1'b0 ;
  1218.     else
  1219.         pci_init_complete_out &lt;= sync_init_complete ;
  1220. end
  1221. `endif
  1222. `ifdef GUEST
  1223. assign  pci_init_complete_out = init_complete ;
  1224. pci_synchronizer_flop #(1, 0) i_wb_init_complete_sync
  1225. (
  1226.     .data_in        (   init_complete       ), 
  1227.     .clk_out        (   wb_clk              ), 
  1228.     .sync_data_out  (   sync_init_complete  ), 
  1229.     .async_reset    (   reset               )
  1230. );
  1231. reg wb_init_complete_out ;
  1232. always@(posedge wb_clk or posedge reset)
  1233. begin
  1234.     if (reset)
  1235.         wb_init_complete_out &lt;= 1'b0 ;
  1236.     else
  1237.         wb_init_complete_out &lt;= sync_init_complete ;
  1238. end
  1239. `endif
  1240. /*###########################################################################################################
  1241. -------------------------------------------------------------------------------------------------------------
  1242. -----------------------------------------------------------------------------------------------------------*/
  1243. `ifdef NO_CNF_IMAGE // if IMAGE0 is assigned as general image space
  1244. assign r_conf_data_out = 32'h0000_0000 ;
  1245. `else
  1246.     always@(r_conf_address_in or
  1247.      status_bit15_11 or status_bit8 or r_status_bit4 or command_bit8 or command_bit6 or command_bit2_0 or
  1248.      latency_timer or cache_line_size_reg or r_vendor_id or r_device_id or r_revision_id or
  1249.             r_subsys_vendor_id or r_subsys_id or r_max_lat or r_min_gnt or
  1250.      pci_ba0_bit31_8 or
  1251.      pci_img_ctrl0_bit2_1 or pci_am0 or pci_ta0 or pci_ba0_bit0 or
  1252.      pci_img_ctrl1_bit2_1 or pci_am1 or pci_ta1 or pci_ba1_bit31_8  or pci_ba1_bit0 or
  1253.      pci_img_ctrl2_bit2_1 or pci_am2 or pci_ta2 or pci_ba2_bit31_8 or pci_ba2_bit0 or
  1254.      pci_img_ctrl3_bit2_1 or pci_am3 or pci_ta3 or pci_ba3_bit31_8 or pci_ba3_bit0 or
  1255.      pci_img_ctrl4_bit2_1 or pci_am4 or pci_ta4 or pci_ba4_bit31_8 or pci_ba4_bit0 or
  1256.      pci_img_ctrl5_bit2_1 or pci_am5 or pci_ta5 or pci_ba5_bit31_8 or pci_ba5_bit0 or
  1257.      interrupt_line or
  1258.      pci_err_cs_bit31_24 or pci_err_cs_bit10 or pci_err_cs_bit9 or pci_err_cs_bit8 or pci_err_cs_bit0 or
  1259.      pci_err_addr or pci_err_data or
  1260.      wb_ba0_bit31_12 or wb_ba0_bit0 or
  1261.      wb_img_ctrl1_bit2_0 or wb_ba1_bit31_12 or wb_ba1_bit0 or wb_am1 or wb_ta1 or
  1262.      wb_img_ctrl2_bit2_0 or wb_ba2_bit31_12 or wb_ba2_bit0 or wb_am2 or wb_ta2 or
  1263.      wb_img_ctrl3_bit2_0 or wb_ba3_bit31_12 or wb_ba3_bit0 or wb_am3 or wb_ta3 or
  1264.      wb_img_ctrl4_bit2_0 or wb_ba4_bit31_12 or wb_ba4_bit0 or wb_am4 or wb_ta4 or
  1265.      wb_img_ctrl5_bit2_0 or wb_ba5_bit31_12 or wb_ba5_bit0 or wb_am5 or wb_ta5 or
  1266.      wb_err_cs_bit31_24 or /*wb_err_cs_bit10 or*/ wb_err_cs_bit9 or wb_err_cs_bit8 or wb_err_cs_bit0 or
  1267.      wb_err_addr or wb_err_data or
  1268.      cnf_addr_bit23_2 or cnf_addr_bit0 or icr_bit31 or icr_bit4_3 or icr_bit2_0 or isr_bit4_3 or isr_bit2_0
  1269.         `ifdef PCI_CPCI_HS_IMPLEMENT
  1270.             or hs_ins or hs_ext or hs_pi or hs_loo or hs_eim or hs_cap_id
  1271.         `endif
  1272.         `ifdef PCI_SPOCI
  1273.             or spoci_cs_nack or spoci_cs_write or spoci_cs_read or spoci_cs_adr or spoci_cs_dat
  1274.         `endif
  1275.      )
  1276.     begin
  1277.      case (r_conf_address_in[9:2])
  1278.      // PCI header - configuration space
  1279.      8'h0: r_conf_data_out = { r_device_id, r_vendor_id } ;
  1280.      8'h1: r_conf_data_out = { status_bit15_11, r_status_bit10_9, status_bit8, r_status_bit7, 1'h0, r_status_bit5, r_status_bit4, 
  1281.       4'h0, 7'h00, command_bit8, 1'h0, command_bit6, 3'h0, command_bit2_0 } ;
  1282.      8'h2: r_conf_data_out = { r_class_code, r_revision_id } ;
  1283.      8'h3: r_conf_data_out = { 8'h00, r_header_type, latency_timer, cache_line_size_reg } ;
  1284.      8'h4: 
  1285.      begin
  1286.         `ifdef HOST
  1287.             `ifdef NO_CNF_IMAGE
  1288.          r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba0_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1289.            pci_am0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1290.          r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1291.          r_conf_data_out[0] = pci_ba0_bit0 &amp; pci_am0[31];
  1292.             `else
  1293.                 r_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1294.                 r_conf_data_out[11: 0] = 12'h000 ;
  1295.             `endif
  1296.         `endif
  1297.         `ifdef GUEST
  1298.             r_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1299.             r_conf_data_out[11: 0] = 12'h000 ;
  1300.         `endif
  1301.      end
  1302.      8'h5: 
  1303.      begin
  1304.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba1_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1305.       pci_am1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1306.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1307.      r_conf_data_out[0] = pci_ba1_bit0 &amp; pci_am1[31];
  1308.      end
  1309.      8'h6: 
  1310.      begin
  1311.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba2_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1312.       pci_am2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1313.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1314.      r_conf_data_out[0] = pci_ba2_bit0 &amp; pci_am2[31];
  1315.      end
  1316.      8'h7: 
  1317.      begin
  1318.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba3_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1319.       pci_am3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1320.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1321.      r_conf_data_out[0] = pci_ba3_bit0 &amp; pci_am3[31];
  1322.      end
  1323.      8'h8: 
  1324.      begin
  1325.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba4_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1326.       pci_am4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1327.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1328.      r_conf_data_out[0] = pci_ba4_bit0 &amp; pci_am4[31];
  1329.      end
  1330.      8'h9: 
  1331.      begin
  1332.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba5_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1333.       pci_am5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1334.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1335.      r_conf_data_out[0] = pci_ba5_bit0 &amp; pci_am5[31];
  1336.      end
  1337.         8'hB:
  1338.         begin
  1339.             r_conf_data_out = {r_subsys_id, r_subsys_vendor_id} ;
  1340.         end
  1341.     `ifdef PCI_CPCI_HS_IMPLEMENT
  1342.         8'hD:
  1343.         begin
  1344.             r_conf_data_out = {24'h0000_00, `PCI_CAP_PTR_VAL} ;
  1345.         end
  1346.     `endif
  1347.      8'hf: r_conf_data_out = { r_max_lat, r_min_gnt, r_interrupt_pin, interrupt_line } ;
  1348.     `ifdef PCI_CPCI_HS_IMPLEMENT
  1349.         (`PCI_CAP_PTR_VAL &gt;&gt; 2):
  1350.         begin
  1351.             r_conf_data_out  = {8'h00, hs_ins, hs_ext, hs_pi, hs_loo, 1'b0, hs_eim, 1'b0, 8'h00, hs_cap_id} ;
  1352.         end
  1353.     `endif
  1354.    // PCI target - configuration space
  1355.      {2'b01, `P_IMG_CTRL0_ADDR}: r_conf_data_out = { 29'h00000000, pci_img_ctrl0_bit2_1, 1'h0 } ;
  1356.         {2'b01, `P_BA0_ADDR}   : 
  1357.         begin
  1358.      `ifdef HOST
  1359.             `ifdef NO_CNF_IMAGE
  1360.          r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba0_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1361.            pci_am0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1362.          r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1363.          r_conf_data_out[0] = pci_ba0_bit0 &amp; pci_am0[31];
  1364.             `else
  1365.                 r_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1366.                 r_conf_data_out[11: 0] = 12'h000 ;
  1367.             `endif
  1368.         `endif
  1369.         `ifdef GUEST
  1370.             r_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1371.             r_conf_data_out[11: 0] = 12'h000 ;
  1372.         `endif
  1373.      end
  1374.         {2'b01, `P_AM0_ADDR}: 
  1375.      begin
  1376.         `ifdef HOST
  1377.             `ifdef NO_CNF_IMAGE
  1378.                 r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1379.          r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1380.             `else
  1381.                 r_conf_data_out[31:12] = pci_am0[31:12] ;
  1382.                 r_conf_data_out[11: 0] = 12'h000        ;
  1383.             `endif
  1384.         `endif
  1385.         `ifdef GUEST
  1386.             r_conf_data_out[31:12] = pci_am0[31:12] ;
  1387.             r_conf_data_out[11: 0] = 12'h000        ;
  1388.         `endif
  1389.      end
  1390.         {2'b01, `P_TA0_ADDR}: 
  1391.      begin
  1392.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1393.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1394.      end
  1395.         {2'b01, `P_IMG_CTRL1_ADDR}: r_conf_data_out = { 29'h00000000, pci_img_ctrl1_bit2_1, 1'h0 } ;
  1396.         {2'b01, `P_BA1_ADDR}: 
  1397.      begin
  1398.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba1_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1399.          pci_am1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1400.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1401.      r_conf_data_out[0] = pci_ba1_bit0 &amp; pci_am1[31];
  1402.      end
  1403.         {2'b01, `P_AM1_ADDR}: 
  1404.      begin
  1405.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1406.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1407.      end
  1408.         {2'b01, `P_TA1_ADDR}: 
  1409.      begin
  1410.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1411.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1412.      end
  1413.         {2'b01, `P_IMG_CTRL2_ADDR}: r_conf_data_out = { 29'h00000000, pci_img_ctrl2_bit2_1, 1'h0 } ;
  1414.         {2'b01, `P_BA2_ADDR}: 
  1415.      begin
  1416.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba2_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1417.        pci_am2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1418.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1419.      r_conf_data_out[0] = pci_ba2_bit0 &amp; pci_am2[31];
  1420.      end
  1421.         {2'b01, `P_AM2_ADDR}: 
  1422.      begin
  1423.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1424.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1425.      end
  1426.         {2'b01, `P_TA2_ADDR}: 
  1427.      begin
  1428.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1429.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1430.      end
  1431.         {2'b01, `P_IMG_CTRL3_ADDR}: r_conf_data_out = { 29'h00000000, pci_img_ctrl3_bit2_1, 1'h0 } ;
  1432.         {2'b01, `P_BA3_ADDR}: 
  1433.      begin
  1434.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba3_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1435.        pci_am3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1436.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1437.      r_conf_data_out[0] = pci_ba3_bit0 &amp; pci_am3[31];
  1438.      end
  1439.         {2'b01, `P_AM3_ADDR}: 
  1440.      begin
  1441.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1442.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1443.      end
  1444.         {2'b01, `P_TA3_ADDR}: 
  1445.      begin
  1446.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1447.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1448.      end
  1449.         {2'b01, `P_IMG_CTRL4_ADDR}: r_conf_data_out = { 29'h00000000, pci_img_ctrl4_bit2_1, 1'h0 } ;
  1450.         {2'b01, `P_BA4_ADDR}: 
  1451.      begin
  1452.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba4_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1453.        pci_am4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1454.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1455.      r_conf_data_out[0] = pci_ba4_bit0 &amp; pci_am4[31];
  1456.      end
  1457.         {2'b01, `P_AM4_ADDR}: 
  1458.      begin
  1459.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1460.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1461.      end
  1462.         {2'b01, `P_TA4_ADDR}: 
  1463.      begin
  1464.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1465.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1466.      end
  1467.         {2'b01, `P_IMG_CTRL5_ADDR}: r_conf_data_out = { 29'h00000000, pci_img_ctrl5_bit2_1, 1'h0 } ;
  1468.         {2'b01, `P_BA5_ADDR}: 
  1469.      begin
  1470.      r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba5_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1471.        pci_am5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1472.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1473.      r_conf_data_out[0] = pci_ba5_bit0 &amp; pci_am5[31];
  1474.      end
  1475.         {2'b01, `P_AM5_ADDR}:
  1476.      begin
  1477.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1478.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1479.      end
  1480.         {2'b01, `P_TA5_ADDR}: 
  1481.      begin
  1482.             r_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1483.      r_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1484.      end
  1485.         {2'b01, `P_ERR_CS_ADDR}: r_conf_data_out = { pci_err_cs_bit31_24, 13'h0000, pci_err_cs_bit10, pci_err_cs_bit9,
  1486.                     pci_err_cs_bit8, 7'h00, pci_err_cs_bit0 } ;
  1487.         {2'b01, `P_ERR_ADDR_ADDR}: r_conf_data_out = pci_err_addr ;
  1488.         {2'b01, `P_ERR_DATA_ADDR}: r_conf_data_out = pci_err_data ;
  1489.      // WB slave - configuration space
  1490.      {2'b01, `WB_CONF_SPC_BAR_ADDR}: r_conf_data_out = { wb_ba0_bit31_12, 11'h000, wb_ba0_bit0 } ;
  1491.      {2'b01, `W_IMG_CTRL1_ADDR}: r_conf_data_out = { 29'h00000000, wb_img_ctrl1_bit2_0 } ;
  1492.      {2'b01, `W_BA1_ADDR}: 
  1493.      begin
  1494.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba1_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1495.       wb_am1[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1496.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1497.      r_conf_data_out[0] = wb_ba1_bit0 ;
  1498.      end
  1499.      {2'b01, `W_AM1_ADDR}: 
  1500.      begin
  1501.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am1[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1502.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1503.      end
  1504.      {2'b01, `W_TA1_ADDR}: 
  1505.      begin
  1506.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta1[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1507.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1508.      end
  1509.      {2'b01, `W_IMG_CTRL2_ADDR}: r_conf_data_out = { 29'h00000000, wb_img_ctrl2_bit2_0 } ;
  1510.      `W_BA2_ADDR  : 
  1511.      begin
  1512.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba2_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1513.       wb_am2[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1514.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1515.      r_conf_data_out[0] = wb_ba2_bit0 ;
  1516.      end
  1517.      {2'b01, `W_AM2_ADDR}: 
  1518.      begin
  1519.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am2[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1520.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1521.      end
  1522.      {2'b01, `W_TA2_ADDR}: 
  1523.      begin
  1524.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta2[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1525.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1526.      end
  1527.      {2'b01, `W_IMG_CTRL3_ADDR}: r_conf_data_out = { 29'h00000000, wb_img_ctrl3_bit2_0 } ;
  1528.      {2'b01, `W_BA3_ADDR}: 
  1529.      begin
  1530.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba3_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1531.       wb_am3[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1532.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1533.      r_conf_data_out[0] = wb_ba3_bit0 ;
  1534.      end
  1535.      {2'b01, `W_AM3_ADDR}: 
  1536.      begin
  1537.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am3[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1538.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1539.      end
  1540.      {2'b01, `W_TA3_ADDR}: 
  1541.      begin
  1542.          r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta3[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1543.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1544.      end
  1545.      {2'b01, `W_IMG_CTRL4_ADDR}: r_conf_data_out = { 29'h00000000, wb_img_ctrl4_bit2_0 } ;
  1546.      {2'b01, `W_BA4_ADDR}: 
  1547.      begin
  1548.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba4_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1549.       wb_am4[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1550.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1551.      r_conf_data_out[0] = wb_ba4_bit0 ;
  1552.      end
  1553.      {2'b01, `W_AM4_ADDR}: 
  1554.      begin
  1555.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am4[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1556.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1557.      end
  1558.      {2'b01, `W_TA4_ADDR}: 
  1559.      begin
  1560.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta4[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1561.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1562.      end
  1563.      {2'b01, `W_IMG_CTRL5_ADDR}: r_conf_data_out = { 29'h00000000, wb_img_ctrl5_bit2_0 } ;
  1564.      {2'b01, `W_BA5_ADDR}: 
  1565.      begin
  1566.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba5_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1567.       wb_am5[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1568.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1569.      r_conf_data_out[0] = wb_ba5_bit0 ;
  1570.      end
  1571.      {2'b01, `W_AM5_ADDR}: 
  1572.      begin
  1573.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am5[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1574.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1575.      end
  1576.      {2'b01, `W_TA5_ADDR}: 
  1577.      begin
  1578.      r_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta5[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1579.      r_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1580.      end
  1581.      {2'b01, `W_ERR_CS_ADDR}: r_conf_data_out = { wb_err_cs_bit31_24, /*13*/14'h0000, /*wb_err_cs_bit10,*/
  1582.                   wb_err_cs_bit9, wb_err_cs_bit8, 7'h00, wb_err_cs_bit0 } ;
  1583.      {2'b01, `W_ERR_ADDR_ADDR}: r_conf_data_out = wb_err_addr ;
  1584.      {2'b01, `W_ERR_DATA_ADDR}: r_conf_data_out = wb_err_data ;
  1585.      {2'b01, `CNF_ADDR_ADDR}: r_conf_data_out = { 8'h00, cnf_addr_bit23_2, 1'h0, cnf_addr_bit0 } ;
  1586.      // `CNF_DATA_ADDR: implemented elsewhere !!!
  1587.      // `INT_ACK_ADDR : implemented elsewhere !!!
  1588.         {2'b01, `ICR_ADDR}: r_conf_data_out = { icr_bit31, 26'h0000_000, icr_bit4_3, icr_bit2_0 } ;
  1589.         {2'b01, `ISR_ADDR}: r_conf_data_out = { 27'h0000_000, isr_bit4_3, isr_bit2_0 } ;
  1590.     `ifdef PCI_SPOCI
  1591.         8'hff: r_conf_data_out = {spoci_cs_nack, 5'h0, spoci_cs_write, spoci_cs_read,
  1592.                                   5'h0, spoci_cs_adr[10:8],
  1593.                                   spoci_cs_adr[7:0],
  1594.                                   spoci_cs_dat[7:0]} ;
  1595.     `endif
  1596.      default : r_conf_data_out = 32'h0000_0000 ;
  1597.      endcase
  1598.     end
  1599. `endif
  1600. `ifdef PCI_SPOCI
  1601. reg [ 7: 0] spoci_reg_num ;
  1602. wire [11: 0] w_conf_address = init_complete ? w_conf_address_in : {2'b00, spoci_reg_num, 2'b00} ;
  1603. `else
  1604. wire [11: 0] w_conf_address = w_conf_address_in ;
  1605. wire [ 7: 0] spoci_reg_num = 'hff ;
  1606. `endif
  1607. always@(w_conf_address or
  1608. status_bit15_11 or status_bit8 or r_status_bit4 or command_bit8 or command_bit6 or command_bit2_0 or
  1609. latency_timer or cache_line_size_reg or r_vendor_id or r_device_id or r_revision_id or
  1610.         r_subsys_id or r_subsys_vendor_id or r_max_lat or r_min_gnt or
  1611. pci_ba0_bit31_8 or
  1612. pci_img_ctrl0_bit2_1 or pci_am0 or pci_ta0 or pci_ba0_bit0 or
  1613. pci_img_ctrl1_bit2_1 or pci_am1 or pci_ta1 or pci_ba1_bit31_8  or pci_ba1_bit0 or
  1614. pci_img_ctrl2_bit2_1 or pci_am2 or pci_ta2 or pci_ba2_bit31_8 or pci_ba2_bit0 or
  1615. pci_img_ctrl3_bit2_1 or pci_am3 or pci_ta3 or pci_ba3_bit31_8 or pci_ba3_bit0 or
  1616. pci_img_ctrl4_bit2_1 or pci_am4 or pci_ta4 or pci_ba4_bit31_8 or pci_ba4_bit0 or
  1617. pci_img_ctrl5_bit2_1 or pci_am5 or pci_ta5 or pci_ba5_bit31_8 or pci_ba5_bit0 or
  1618. interrupt_line or
  1619. pci_err_cs_bit31_24 or pci_err_cs_bit10 or pci_err_cs_bit9 or pci_err_cs_bit8 or pci_err_cs_bit0 or
  1620. pci_err_addr or pci_err_data or
  1621. wb_ba0_bit31_12 or wb_ba0_bit0 or
  1622. wb_img_ctrl1_bit2_0 or wb_ba1_bit31_12 or wb_ba1_bit0 or wb_am1 or wb_ta1 or
  1623. wb_img_ctrl2_bit2_0 or wb_ba2_bit31_12 or wb_ba2_bit0 or wb_am2 or wb_ta2 or
  1624. wb_img_ctrl3_bit2_0 or wb_ba3_bit31_12 or wb_ba3_bit0 or wb_am3 or wb_ta3 or
  1625. wb_img_ctrl4_bit2_0 or wb_ba4_bit31_12 or wb_ba4_bit0 or wb_am4 or wb_ta4 or
  1626. wb_img_ctrl5_bit2_0 or wb_ba5_bit31_12 or wb_ba5_bit0 or wb_am5 or wb_ta5 or
  1627. wb_err_cs_bit31_24 or /*wb_err_cs_bit10 or*/ wb_err_cs_bit9 or wb_err_cs_bit8 or wb_err_cs_bit0 or
  1628. wb_err_addr or wb_err_data or
  1629. cnf_addr_bit23_2 or cnf_addr_bit0 or icr_bit31 or icr_bit4_3 or icr_bit2_0 or isr_bit4_3 or isr_bit2_0
  1630.     `ifdef PCI_CPCI_HS_IMPLEMENT
  1631.         or hs_ins or hs_ext or hs_pi or hs_loo or hs_eim or hs_cap_id
  1632.     `endif
  1633.     `ifdef PCI_SPOCI
  1634.         or spoci_cs_nack or spoci_cs_write or spoci_cs_read or spoci_cs_adr or spoci_cs_dat
  1635.     `endif
  1636. )
  1637. begin
  1638. case (w_conf_address[9:2])
  1639. 8'h0:
  1640. begin
  1641. w_conf_data_out = { r_device_id, r_vendor_id } ;
  1642. w_reg_select_dec = 57'h000_0000_0000_0000 ; // Read-Only register
  1643. end
  1644. 8'h1: // w_reg_select_dec bit 0
  1645. begin
  1646. w_conf_data_out = { status_bit15_11, r_status_bit10_9, status_bit8, r_status_bit7, 1'h0, r_status_bit5, r_status_bit4, 
  1647.       4'h0, 7'h00, command_bit8, 1'h0, command_bit6, 3'h0, command_bit2_0 } ;
  1648. w_reg_select_dec = 57'h000_0000_0000_0001 ;
  1649. end
  1650. 8'h2:
  1651. begin
  1652. w_conf_data_out = { r_class_code, r_revision_id } ;
  1653. w_reg_select_dec = 57'h000_0000_0000_0000 ; // Read-Only register
  1654. end
  1655. 8'h3: // w_reg_select_dec bit 1
  1656. begin
  1657. w_conf_data_out = { 8'h00, r_header_type, latency_timer, cache_line_size_reg } ;
  1658. w_reg_select_dec = 57'h000_0000_0000_0002 ;
  1659. end
  1660. 8'h4: // w_reg_select_dec bit 4
  1661. begin
  1662.     `ifdef HOST
  1663.         `ifdef NO_CNF_IMAGE
  1664.          w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba0_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1665.            pci_am0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1666.          w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1667.          w_conf_data_out[0] = pci_ba0_bit0 &amp; pci_am0[31];
  1668.         `else
  1669.             w_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1670.             w_conf_data_out[11: 0] = 12'h000 ;
  1671.         `endif
  1672.     `endif
  1673.     `ifdef GUEST
  1674.         w_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1675.         w_conf_data_out[11: 0] = 12'h000 ;
  1676.     `endif
  1677. w_reg_select_dec = 57'h000_0000_0000_0010 ; // The same for another address
  1678. end
  1679. 8'h5: // w_reg_select_dec bit 8
  1680. begin
  1681.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba1_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1682.        pci_am1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1683.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1684.      w_conf_data_out[0] = pci_ba1_bit0 &amp; pci_am1[31];
  1685. w_reg_select_dec = 57'h000_0000_0000_0100 ; // The same for another address
  1686. end
  1687. 8'h6: // w_reg_select_dec bit 12
  1688. begin
  1689.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba2_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1690.        pci_am2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1691.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1692.      w_conf_data_out[0] = pci_ba2_bit0 &amp; pci_am2[31];
  1693. w_reg_select_dec = 57'h000_0000_0000_1000 ; // The same for another address
  1694. end
  1695. 8'h7: // w_reg_select_dec bit 16
  1696. begin
  1697.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba3_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1698.        pci_am3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1699.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1700.      w_conf_data_out[0] = pci_ba3_bit0 &amp; pci_am3[31];
  1701. w_reg_select_dec = 57'h000_0000_0001_0000 ; // The same for another address
  1702. end
  1703. 8'h8: // w_reg_select_dec bit 20
  1704. begin
  1705.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba4_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1706.        pci_am4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1707.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1708.      w_conf_data_out[0] = pci_ba4_bit0 &amp; pci_am4[31];
  1709. w_reg_select_dec = 57'h000_0000_0010_0000 ; // The same for another address
  1710. end
  1711. 8'h9: // w_reg_select_dec bit 24
  1712. begin
  1713.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba5_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1714.        pci_am5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1715.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1716.      w_conf_data_out[0] = pci_ba5_bit0 &amp; pci_am5[31];
  1717. w_reg_select_dec = 57'h000_0000_0100_0000 ; // The same for another address
  1718. end
  1719.     8'hB:
  1720.     begin
  1721.         w_conf_data_out = {r_subsys_id, r_subsys_vendor_id} ;
  1722.         w_reg_select_dec = 57'h000_0000_0000_0000 ;
  1723.     end
  1724. `ifdef PCI_CPCI_HS_IMPLEMENT
  1725.     8'hD:
  1726.     begin
  1727.         w_conf_data_out  = {24'h0000_00, `PCI_CAP_PTR_VAL} ;
  1728.         w_reg_select_dec = 57'h000_0000_0000_0000 ; // Read-Only register
  1729.     end
  1730. `endif
  1731. 8'hf: // w_reg_select_dec bit 2
  1732. begin
  1733. w_conf_data_out = { r_max_lat, r_min_gnt, r_interrupt_pin, interrupt_line } ;
  1734. w_reg_select_dec = 57'h000_0000_0000_0004 ;
  1735. end
  1736. `ifdef PCI_CPCI_HS_IMPLEMENT
  1737.     (`PCI_CAP_PTR_VAL &gt;&gt; 2):
  1738.     begin
  1739.         w_reg_select_dec = 57'h100_0000_0000_0000 ;
  1740.         w_conf_data_out  = {8'h00, hs_ins, hs_ext, hs_pi, hs_loo, 1'b0, hs_eim, 1'b0, 8'h00, hs_cap_id} ;
  1741.     end
  1742. `endif
  1743. {2'b01, `P_IMG_CTRL0_ADDR}:  // w_reg_select_dec bit 3
  1744. begin
  1745. w_conf_data_out = { 29'h00000000, pci_img_ctrl0_bit2_1, 1'h0 } ;
  1746. w_reg_select_dec = 57'h000_0000_0000_0008 ;
  1747. end
  1748.     {2'b01, `P_BA0_ADDR}:   // w_reg_select_dec bit 4
  1749. begin
  1750.     `ifdef HOST
  1751.         `ifdef NO_CNF_IMAGE
  1752.          w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba0_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1753.            pci_am0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1754.          w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1755.          w_conf_data_out[0] = pci_ba0_bit0 &amp; pci_am0[31];
  1756.         `else
  1757.             w_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1758.             w_conf_data_out[11: 0] = 12'h000 ;
  1759.         `endif
  1760.     `endif
  1761.     `ifdef GUEST
  1762.         w_conf_data_out[31:12] = pci_ba0_bit31_8[31:12] ;
  1763.         w_conf_data_out[11: 0] = 12'h000 ;
  1764.     `endif
  1765. w_reg_select_dec = 57'h000_0000_0000_0010 ; // The same for another address
  1766. end
  1767.     {2'b01, `P_AM0_ADDR}:   // w_reg_select_dec bit 5
  1768. begin
  1769.     `ifdef HOST
  1770.         `ifdef NO_CNF_IMAGE
  1771.             w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1772.          w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1773.         `else
  1774.             w_conf_data_out[31:12] = pci_am0[31:12] ;
  1775.             w_conf_data_out[11: 0] = 12'h000        ;
  1776.         `endif
  1777.     `endif
  1778.     `ifdef GUEST
  1779.         w_conf_data_out[31:12] = pci_am0[31:12] ;
  1780.         w_conf_data_out[11: 0] = 12'h000        ;
  1781.     `endif
  1782. w_reg_select_dec = 57'h000_0000_0000_0020 ;
  1783. end
  1784.     {2'b01, `P_TA0_ADDR}:   // w_reg_select_dec bit 6
  1785. begin
  1786.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1787.         w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1788. w_reg_select_dec = 57'h000_0000_0000_0040 ;
  1789. end
  1790.     {2'b01, `P_IMG_CTRL1_ADDR}:   // w_reg_select_dec bit 7
  1791. begin
  1792.     w_conf_data_out = { 29'h00000000, pci_img_ctrl1_bit2_1, 1'h0 } ;
  1793. w_reg_select_dec = 57'h000_0000_0000_0080 ;
  1794. end
  1795.     {2'b01, `P_BA1_ADDR}:   // w_reg_select_dec bit 8
  1796. begin
  1797.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba1_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1798.        pci_am1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1799.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1800.      w_conf_data_out[0] = pci_ba1_bit0 &amp; pci_am1[31];
  1801. w_reg_select_dec = 57'h000_0000_0000_0100 ; // The same for another address
  1802. end
  1803.     {2'b01, `P_AM1_ADDR}:   // w_reg_select_dec bit 9
  1804. begin
  1805.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1806.         w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1807. w_reg_select_dec = 57'h000_0000_0000_0200 ;
  1808. end
  1809.     {2'b01, `P_TA1_ADDR}:   // w_reg_select_dec bit 10
  1810. begin
  1811.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1812.         w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1813. w_reg_select_dec = 57'h000_0000_0000_0400 ;
  1814. end
  1815.     {2'b01, `P_IMG_CTRL2_ADDR}:   // w_reg_select_dec bit 11
  1816. begin
  1817.     w_conf_data_out = { 29'h00000000, pci_img_ctrl2_bit2_1, 1'h0 } ;
  1818. w_reg_select_dec = 57'h000_0000_0000_0800 ;
  1819. end
  1820.     {2'b01, `P_BA2_ADDR}:   // w_reg_select_dec bit 12
  1821. begin
  1822.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba2_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1823.        pci_am2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1824.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1825.      w_conf_data_out[0] = pci_ba2_bit0 &amp; pci_am2[31];
  1826. w_reg_select_dec = 57'h000_0000_0000_1000 ; // The same for another address
  1827. end
  1828.     {2'b01, `P_AM2_ADDR}:   // w_reg_select_dec bit 13
  1829. begin
  1830.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1831.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1832. w_reg_select_dec = 57'h000_0000_0000_2000 ;
  1833. end
  1834.     {2'b01, `P_TA2_ADDR}:   // w_reg_select_dec bit 14
  1835. begin
  1836.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1837.         w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1838. w_reg_select_dec = 57'h000_0000_0000_4000 ;
  1839. end
  1840.     {2'b01, `P_IMG_CTRL3_ADDR}:   // w_reg_select_dec bit 15
  1841. begin
  1842.     w_conf_data_out = { 29'h00000000, pci_img_ctrl3_bit2_1, 1'h0 } ;
  1843. w_reg_select_dec = 57'h000_0000_0000_8000 ;
  1844. end
  1845.     {2'b01, `P_BA3_ADDR}:   // w_reg_select_dec bit 16
  1846. begin
  1847.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba3_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1848.        pci_am3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1849.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1850.      w_conf_data_out[0] = pci_ba3_bit0 &amp; pci_am3[31];
  1851. w_reg_select_dec = 57'h000_0000_0001_0000 ; // The same for another address
  1852. end
  1853.     {2'b01, `P_AM3_ADDR}:   // w_reg_select_dec bit 17
  1854. begin
  1855.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1856.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1857. w_reg_select_dec = 57'h000_0000_0002_0000 ;
  1858. end
  1859.     {2'b01, `P_TA3_ADDR}:   // w_reg_select_dec bit 18
  1860. begin
  1861.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1862.         w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1863. w_reg_select_dec = 57'h000_0000_0004_0000 ;
  1864. end
  1865.     {2'b01, `P_IMG_CTRL4_ADDR}:   // w_reg_select_dec bit 19
  1866. begin
  1867.     w_conf_data_out = { 29'h00000000, pci_img_ctrl4_bit2_1, 1'h0 } ;
  1868. w_reg_select_dec = 57'h000_0000_0008_0000 ;
  1869. end
  1870.     {2'b01, `P_BA4_ADDR}:   // w_reg_select_dec bit 20
  1871. begin
  1872.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba4_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1873.        pci_am4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1874.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1875.      w_conf_data_out[0] = pci_ba4_bit0 &amp; pci_am4[31];
  1876. w_reg_select_dec = 57'h000_0000_0010_0000 ; // The same for another address
  1877. end
  1878.     {2'b01, `P_AM4_ADDR}:   // w_reg_select_dec bit 21
  1879. begin
  1880.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1881.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1882. w_reg_select_dec = 57'h000_0000_0020_0000 ;
  1883. end
  1884.     {2'b01, `P_TA4_ADDR}:   // w_reg_select_dec bit 22
  1885. begin
  1886.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1887.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1888. w_reg_select_dec = 57'h000_0000_0040_0000 ;
  1889. end
  1890.     {2'b01, `P_IMG_CTRL5_ADDR}:   // w_reg_select_dec bit 23
  1891. begin
  1892. w_conf_data_out = { 29'h00000000, pci_img_ctrl5_bit2_1, 1'h0 } ;
  1893. w_reg_select_dec = 57'h000_0000_0080_0000 ;
  1894. end
  1895.     {2'b01, `P_BA5_ADDR}:   // w_reg_select_dec bit 24
  1896. begin
  1897.      w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ba5_bit31_8[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1898.        pci_am5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1899.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
  1900.      w_conf_data_out[0] = pci_ba5_bit0 &amp; pci_am5[31];
  1901. w_reg_select_dec = 57'h000_0000_0100_0000 ; // The same for another address
  1902. end
  1903.     {2'b01, `P_AM5_ADDR}:   // w_reg_select_dec bit 25
  1904. begin
  1905.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_am5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1906.      w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1907. w_reg_select_dec = 57'h000_0000_0200_0000 ;
  1908. end
  1909.     {2'b01, `P_TA5_ADDR}:   // w_reg_select_dec bit 26
  1910. begin
  1911.         w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = pci_ta5[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  1912.         w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):0] = 0 ;
  1913. w_reg_select_dec = 57'h000_0000_0400_0000 ;
  1914. end
  1915.     {2'b01, `P_ERR_CS_ADDR}:   // w_reg_select_dec bit 27
  1916. begin
  1917.     w_conf_data_out = { pci_err_cs_bit31_24, 13'h0000, pci_err_cs_bit10, pci_err_cs_bit9,
  1918.              pci_err_cs_bit8, 7'h00, pci_err_cs_bit0 } ;
  1919. w_reg_select_dec = 57'h000_0000_0800_0000 ;
  1920. end
  1921.     {2'b01, `P_ERR_ADDR_ADDR}:   // w_reg_select_dec bit 28
  1922. begin
  1923.     w_conf_data_out = pci_err_addr ;
  1924. w_reg_select_dec = 57'h000_0000_0000_0000 ; // = 56'h00_0000_1000_0000 ;
  1925. end
  1926.     {2'b01, `P_ERR_DATA_ADDR}:   // w_reg_select_dec bit 29
  1927. begin
  1928. w_conf_data_out = pci_err_data ;
  1929. w_reg_select_dec = 57'h000_0000_0000_0000 ; // = 56'h00_0000_2000_0000 ;
  1930. end
  1931. // WB slave - configuration space
  1932. {2'b01, `WB_CONF_SPC_BAR_ADDR}:
  1933. begin
  1934. w_conf_data_out = { wb_ba0_bit31_12, 11'h000, wb_ba0_bit0 } ;
  1935. w_reg_select_dec = 57'h000_0000_0000_0000 ; // Read-Only register
  1936. end
  1937. {2'b01, `W_IMG_CTRL1_ADDR}:   // w_reg_select_dec bit 30
  1938. begin
  1939. w_conf_data_out = { 29'h00000000, wb_img_ctrl1_bit2_0 } ;
  1940. w_reg_select_dec = 57'h000_0000_4000_0000 ;
  1941. end
  1942. {2'b01, `W_BA1_ADDR}:   // w_reg_select_dec bit 31
  1943. begin
  1944.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba1_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1945.       wb_am1[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1946.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1947.      w_conf_data_out[0] = wb_ba1_bit0 ;
  1948. w_reg_select_dec = 57'h000_0000_8000_0000 ;
  1949. end
  1950. {2'b01, `W_AM1_ADDR}:   // w_reg_select_dec bit 32
  1951. begin
  1952.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am1[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1953.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1954. w_reg_select_dec = 57'h000_0001_0000_0000 ;
  1955. end
  1956.     {2'b01, `W_TA1_ADDR}:   // w_reg_select_dec bit 33
  1957. begin
  1958.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta1[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1959.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1960. w_reg_select_dec = 57'h000_0002_0000_0000 ;
  1961. end
  1962. {2'b01, `W_IMG_CTRL2_ADDR}:   // w_reg_select_dec bit 34
  1963. begin
  1964. w_conf_data_out = { 29'h00000000, wb_img_ctrl2_bit2_0 } ;
  1965. w_reg_select_dec = 57'h000_0004_0000_0000 ;
  1966. end
  1967. {2'b01, `W_BA2_ADDR}:   // w_reg_select_dec bit 35
  1968. begin
  1969.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba2_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1970.       wb_am2[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1971.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1972.      w_conf_data_out[0] = wb_ba2_bit0 ;
  1973. w_reg_select_dec = 57'h000_0008_0000_0000 ;
  1974. end
  1975. {2'b01, `W_AM2_ADDR}:   // w_reg_select_dec bit 36
  1976. begin
  1977.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am2[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1978.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1979. w_reg_select_dec = 57'h000_0010_0000_0000 ;
  1980. end
  1981. {2'b01, `W_TA2_ADDR}:   // w_reg_select_dec bit 37
  1982. begin
  1983.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta2[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1984.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  1985. w_reg_select_dec = 57'h000_0020_0000_0000 ;
  1986. end
  1987. {2'b01, `W_IMG_CTRL3_ADDR}:   // w_reg_select_dec bit 38
  1988. begin
  1989. w_conf_data_out = { 29'h00000000, wb_img_ctrl3_bit2_0 } ;
  1990. w_reg_select_dec = 57'h000_0040_0000_0000 ;
  1991. end
  1992. {2'b01, `W_BA3_ADDR}:   // w_reg_select_dec bit 39
  1993. begin
  1994.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba3_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  1995.       wb_am3[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  1996.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  1997.      w_conf_data_out[0] = wb_ba3_bit0 ;
  1998. w_reg_select_dec = 57'h000_0080_0000_0000 ;
  1999. end
  2000. {2'b01, `W_AM3_ADDR}:   // w_reg_select_dec bit 40
  2001. begin
  2002.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am3[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2003.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  2004. w_reg_select_dec = 57'h000_0100_0000_0000 ;
  2005. end
  2006. {2'b01, `W_TA3_ADDR}:   // w_reg_select_dec bit 41
  2007. begin
  2008.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta3[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2009.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  2010. w_reg_select_dec = 57'h000_0200_0000_0000 ;
  2011. end
  2012. {2'b01, `W_IMG_CTRL4_ADDR}:   // w_reg_select_dec bit 42
  2013. begin
  2014. w_conf_data_out = { 29'h00000000, wb_img_ctrl4_bit2_0 } ;
  2015. w_reg_select_dec = 57'h000_0400_0000_0000 ;
  2016. end
  2017. {2'b01, `W_BA4_ADDR}:   // w_reg_select_dec bit 43
  2018. begin
  2019.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba4_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  2020.       wb_am4[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2021.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  2022.      w_conf_data_out[0] = wb_ba4_bit0 ;
  2023. w_reg_select_dec = 57'h000_0800_0000_0000 ;
  2024. end
  2025. {2'b01, `W_AM4_ADDR}:   // w_reg_select_dec bit 44
  2026. begin
  2027.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am4[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2028.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  2029. w_reg_select_dec = 57'h000_1000_0000_0000 ;
  2030. end
  2031. {2'b01, `W_TA4_ADDR}:   // w_reg_select_dec bit 45
  2032. begin
  2033.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta4[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2034.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  2035. w_reg_select_dec = 57'h000_2000_0000_0000 ;
  2036. end
  2037. {2'b01, `W_IMG_CTRL5_ADDR}:   // w_reg_select_dec bit 46
  2038. begin
  2039. w_conf_data_out = { 29'h00000000, wb_img_ctrl5_bit2_0 } ;
  2040. w_reg_select_dec = 57'h000_4000_0000_0000 ;
  2041. end
  2042. {2'b01, `W_BA5_ADDR}:   // w_reg_select_dec bit 47
  2043. begin
  2044.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ba5_bit31_12[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] &amp; 
  2045.       wb_am5[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2046.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):1]  = 0 ;
  2047.      w_conf_data_out[0] = wb_ba5_bit0 ;
  2048. w_reg_select_dec = 57'h000_8000_0000_0000 ;
  2049. end
  2050. {2'b01, `W_AM5_ADDR}:   // w_reg_select_dec bit 48
  2051. begin
  2052.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_am5[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2053.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  2054. w_reg_select_dec = 57'h001_0000_0000_0000 ;
  2055. end
  2056. {2'b01, `W_TA5_ADDR}:   // w_reg_select_dec bit 49
  2057. begin
  2058.      w_conf_data_out[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = wb_ta5[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2059.      w_conf_data_out[(31-`WB_NUM_OF_DEC_ADDR_LINES):0]  = 0 ;
  2060. w_reg_select_dec = 57'h002_0000_0000_0000 ;
  2061. end
  2062. {2'b01, `W_ERR_CS_ADDR}:   // w_reg_select_dec bit 50
  2063. begin
  2064. w_conf_data_out = { wb_err_cs_bit31_24, /*13*/14'h0000, /*wb_err_cs_bit10,*/
  2065.          wb_err_cs_bit9, wb_err_cs_bit8, 7'h00, wb_err_cs_bit0 } ;
  2066. w_reg_select_dec = 57'h004_0000_0000_0000 ;
  2067. end
  2068. {2'b01, `W_ERR_ADDR_ADDR}:   // w_reg_select_dec bit 51
  2069. begin
  2070. w_conf_data_out = wb_err_addr ;
  2071. w_reg_select_dec = 57'h008_0000_0000_0000 ;
  2072. end
  2073. {2'b01, `W_ERR_DATA_ADDR}:   // w_reg_select_dec bit 52
  2074. begin
  2075. w_conf_data_out = wb_err_data ;
  2076. w_reg_select_dec = 57'h010_0000_0000_0000 ;
  2077. end
  2078. {2'b01, `CNF_ADDR_ADDR}:   // w_reg_select_dec bit 53
  2079. begin
  2080. w_conf_data_out = { 8'h00, cnf_addr_bit23_2, 1'h0, cnf_addr_bit0 } ;
  2081. w_reg_select_dec = 57'h020_0000_0000_0000 ;
  2082. end
  2083. // `CNF_DATA_ADDR: implemented elsewhere !!!
  2084. // `INT_ACK_ADDR: implemented elsewhere !!!
  2085.     {2'b01, `ICR_ADDR}:   // w_reg_select_dec bit 54
  2086. begin
  2087. w_conf_data_out = { icr_bit31, 26'h0000_000, icr_bit4_3, icr_bit2_0 } ;
  2088. w_reg_select_dec = 57'h040_0000_0000_0000 ;
  2089. end
  2090.     {2'b01, `ISR_ADDR}:   // w_reg_select_dec bit 55
  2091. begin
  2092. w_conf_data_out = { 27'h0000_000, isr_bit4_3, isr_bit2_0 } ;
  2093. w_reg_select_dec = 57'h080_0000_0000_0000 ;
  2094. end
  2095. `ifdef PCI_SPOCI
  2096.     8'hff:
  2097.     begin
  2098.         w_conf_data_out = {spoci_cs_nack, 5'h0, spoci_cs_write, spoci_cs_read,
  2099.                            5'h0, spoci_cs_adr[10:8],
  2100.                            spoci_cs_adr[7:0],
  2101.                            spoci_cs_dat[7:0]} ;
  2102.         // this register is implemented separate from other registers, because
  2103.         // it has special features implemented
  2104.         w_reg_select_dec = 57'h000_0000_0000_0000 ;
  2105.     end
  2106. `endif
  2107. default:
  2108. begin
  2109. w_conf_data_out = 32'h0000_0000 ;
  2110. w_reg_select_dec = 57'h000_0000_0000_0000 ;
  2111. end
  2112. endcase
  2113. end
  2114. `ifdef PCI_SPOCI
  2115. reg init_we ;
  2116. reg init_cfg_done ;
  2117. reg [31: 0] spoci_dat ;
  2118. wire [31: 0] w_conf_data = init_cfg_done ? w_conf_data_in : spoci_dat ;
  2119. wire [ 3: 0] w_byte_en   = init_cfg_done ? w_byte_en_in   : 4'b0000   ;
  2120. `else
  2121. wire init_we        = 1'b0  ;
  2122. wire init_cfg_done  = 1'b1  ;
  2123. wire [31: 0] w_conf_data    = w_conf_data_in ;
  2124. wire [ 3: 0] w_byte_en      = w_byte_en_in   ;
  2125. wire [31: 0] spoci_dat      = 'h0000_0000    ;
  2126. `endif
  2127. // Reduced write data for BASE, MASK and TRANSLATION registers of PCI and WB images
  2128. assign w_conf_pdata_reduced[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] = w_conf_data[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
  2129. assign w_conf_pdata_reduced[(31-`PCI_NUM_OF_DEC_ADDR_LINES): 0] = 0 ;
  2130. assign w_conf_wdata_reduced[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] = w_conf_data[31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] ;
  2131. assign w_conf_wdata_reduced[(31-`WB_NUM_OF_DEC_ADDR_LINES): 0] = 0 ;
  2132. wire w_we = w_we_i | init_we ;
  2133. always@(posedge w_clock or posedge reset)
  2134. begin
  2135. // Here are implemented all registers that are reset with RESET signal otherwise they can be normaly written!!!
  2136. // Registers that are commented are implemented after this alwasy statement, because they are e.g. reset with
  2137. //   RESET signal, set with some status signal and they are erased with writting '1' into them !!!
  2138. if (reset)
  2139. begin
  2140. /*status_bit15_11 ; status_bit8 ;*/ command_bit8 &lt;= 1'h0 ; command_bit6 &lt;= 1'h0 ; command_bit2_0 &lt;= 3'h0 ;