📄 pci_conf_space.v
字号:
//////////////////////////////////////////////////////////////////////
//// ////
//// File name: pci_conf_space.v ////
//// ////
//// This file is part of the "PCI bridge" project ////
//// http://www.opencores.org/cores/pci/ ////
//// ////
//// Author(s): ////
//// - tadej@opencores.org ////
//// - Tadej Markovic ////
//// ////
//// All additional information is avaliable in the README.txt ////
//// file. ////
//// ////
//// ////
//////////////////////////////////////////////////////////////////////
//// ////
//// Copyright (C) 2000 Tadej Markovic, tadej@opencores.org ////
//// ////
//// This source file may be used and distributed without ////
//// restriction provided that this copyright statement is not ////
//// removed from the file and that any derivative work contains ////
//// the original copyright notice and the associated disclaimer. ////
//// ////
//// This source file is free software; you can redistribute it ////
//// and/or modify it under the terms of the GNU Lesser General ////
//// Public License as published by the Free Software Foundation; ////
//// either version 2.1 of the License, or (at your option) any ////
//// later version. ////
//// ////
//// This source is distributed in the hope that it will be ////
//// useful, but WITHOUT ANY WARRANTY; without even the implied ////
//// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR ////
//// PURPOSE. See the GNU Lesser General Public License for more ////
//// details. ////
//// ////
//// You should have received a copy of the GNU Lesser General ////
//// Public License along with this source; if not, download it ////
//// from http://www.opencores.org/lgpl.shtml ////
//// ////
//////////////////////////////////////////////////////////////////////
//
// CVS Revision History
//
// $Log: pci_conf_space.v,v $
// Revision 1.10 2004/08/19 16:04:53 mihad
// Removed some unused signals.
//
// Revision 1.9 2004/08/19 15:27:34 mihad
// Changed minimum pci image size to 256 bytes because
// of some PC system problems with size of IO images.
//
// Revision 1.8 2004/07/07 12:45:01 mihad
// Added SubsystemVendorID, SubsystemID, MAXLatency, MinGnt defines.
// Enabled value loading from serial EEPROM for all of the above + VendorID and DeviceID registers.
//
// Revision 1.7 2004/01/24 11:54:18 mihad
// Update! SPOCI Implemented!
//
// Revision 1.6 2003/12/28 09:54:48 fr2201
// def_wb_imagex_addr_map defined correctly
//
// Revision 1.5 2003/12/28 09:20:00 fr2201
// Reset values for PCI, WB defined (PCI_TAx,WB_BAx,WB_TAx,WB_AMx,WB_BAx_MEM_IO)
//
// Revision 1.4 2003/12/19 11:11:30 mihad
// Compact PCI Hot Swap support added.
// New testcases added.
// Specification updated.
// Test application changed to support WB B3 cycles.
//
// Revision 1.3 2003/08/14 13:06:02 simons
// synchronizer_flop replaced with pci_synchronizer_flop, artisan ram instance updated.
//
// Revision 1.2 2003/03/26 13:16:18 mihad
// Added the reset value parameter to the synchronizer flop module.
// Added resets to all synchronizer flop instances.
// Repaired initial sync value in fifos.
//
// Revision 1.1 2003/01/27 16:49:31 mihad
// Changed module and file names. Updated scripts accordingly. FIFO synchronizations changed.
//
// Revision 1.4 2002/08/13 11:03:53 mihad
// 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
//
// Revision 1.3 2002/02/01 15:25:12 mihad
// Repaired a few bugs, updated specification, added test bench files and design document
//
// Revision 1.2 2001/10/05 08:14:28 mihad
// Updated all files with inclusion of timescale file for simulation purposes.
//
// Revision 1.1.1.1 2001/10/02 15:33:46 mihad
// New project directory structure
//
//
`include "pci_constants.v"
// synopsys translate_off
`include "timescale.v"
// synopsys translate_on
/*-----------------------------------------------------------------------------------------------------------
w_ prefix is a sign for Write (and read) side of Dual-Port registers
r_ prefix is a sign for Read only side of Dual-Port registers
In the first line there are DATA and ADDRESS ports, in the second line there are write enable and read
enable signals with chip-select (conf_hit) for config. space.
In the third line there are output signlas from Command register of the PCI configuration header !!!
In the fourth line there are input signals to Status register of the PCI configuration header !!!
In the fifth line there is output from Latency Timer & r_Interrupt pin registers of the PCI conf. header !!!
Following are IMAGE specific registers, from which PCI_BASE_ADDR registers are the same as base address
registers from the PCI conf. header !!!
-----------------------------------------------------------------------------------------------------------*/
// normal R/W address, data and control
module pci_conf_space
( w_conf_address_in, w_conf_data_in, w_conf_data_out, r_conf_address_in, r_conf_data_out,
w_we_i, w_re, r_re, w_byte_en_in, w_clock, reset, pci_clk, wb_clk,
// outputs from command register of the PCI header
serr_enable, perr_response, pci_master_enable, memory_space_enable, io_space_enable,
// inputs to status register of the PCI header
perr_in, serr_in, master_abort_recv, target_abort_recv, target_abort_set, master_data_par_err,
// output from cache_line_size, latency timer and r_interrupt_pin register of the PCI header
cache_line_size_to_pci, cache_line_size_to_wb, cache_lsize_not_zero_to_wb,
latency_tim,
// output from all pci IMAGE registers
pci_base_addr0, pci_base_addr1, pci_base_addr2, pci_base_addr3, pci_base_addr4, pci_base_addr5,
pci_memory_io0, pci_memory_io1, pci_memory_io2, pci_memory_io3, pci_memory_io4, pci_memory_io5,
pci_addr_mask0, pci_addr_mask1, pci_addr_mask2, pci_addr_mask3, pci_addr_mask4, pci_addr_mask5,
pci_tran_addr0, pci_tran_addr1, pci_tran_addr2, pci_tran_addr3, pci_tran_addr4, pci_tran_addr5,
pci_img_ctrl0, pci_img_ctrl1, pci_img_ctrl2, pci_img_ctrl3, pci_img_ctrl4, pci_img_ctrl5,
// input to pci error control and status register, error address and error data registers
pci_error_be, pci_error_bc, pci_error_rty_exp, pci_error_es, pci_error_sig, pci_error_addr,
pci_error_data,
// output from all wishbone IMAGE registers
wb_base_addr0, wb_base_addr1, wb_base_addr2, wb_base_addr3, wb_base_addr4, wb_base_addr5,
wb_memory_io0, wb_memory_io1, wb_memory_io2, wb_memory_io3, wb_memory_io4, wb_memory_io5,
wb_addr_mask0, wb_addr_mask1, wb_addr_mask2, wb_addr_mask3, wb_addr_mask4, wb_addr_mask5,
wb_tran_addr0, wb_tran_addr1, wb_tran_addr2, wb_tran_addr3, wb_tran_addr4, wb_tran_addr5,
wb_img_ctrl0, wb_img_ctrl1, wb_img_ctrl2, wb_img_ctrl3, wb_img_ctrl4, wb_img_ctrl5,
// input to wb error control and status register, error address and error data registers
wb_error_be, wb_error_bc, wb_error_rty_exp, wb_error_es, wb_error_sig, wb_error_addr, wb_error_data,
// output from conf. cycle generation register (sddress), int. control register & interrupt output
config_addr, icr_soft_res, int_out,
// input to interrupt status register
isr_sys_err_int, isr_par_err_int, isr_int_prop,
pci_init_complete_out, wb_init_complete_out
`ifdef PCI_CPCI_HS_IMPLEMENT
,
pci_cpci_hs_enum_oe_o, pci_cpci_hs_led_oe_o, pci_cpci_hs_es_i
`endif
`ifdef PCI_SPOCI
,
spoci_scl_oe_o, spoci_sda_i, spoci_sda_oe_o
`endif
) ;
/*###########################################################################################################
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
Input and output ports
======================
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
###########################################################################################################*/
// output data
output [31 : 0] w_conf_data_out ;
output [31 : 0] r_conf_data_out ;
reg [31 : 0] w_conf_data_out ;
`ifdef NO_CNF_IMAGE
`else
reg [31 : 0] r_conf_data_out ;
`endif
// input data
input [31 : 0] w_conf_data_in ;
wire [31 : 0] w_conf_pdata_reduced ; // reduced data written into PCI image registers
wire [31 : 0] w_conf_wdata_reduced ; // reduced data written into WB image registers
// input address
input [11 : 0] w_conf_address_in ;
input [11 : 0] r_conf_address_in ;
// input control signals
input w_we_i ;
input w_re ;
input r_re ;
input [3 : 0] w_byte_en_in ;
input w_clock ;
input reset ;
input pci_clk ;
input wb_clk ;
// PCI header outputs from command register
output serr_enable ;
output perr_response ;
output pci_master_enable ;
output memory_space_enable ;
output io_space_enable ;
// PCI header inputs to status register
input perr_in ;
input serr_in ;
input master_abort_recv ;
input target_abort_recv ;
input target_abort_set ;
input master_data_par_err ;
// PCI header output from cache_line_size, latency timer and interrupt pin
output [7 : 0] cache_line_size_to_pci ; // sinchronized to PCI clock
output [7 : 0] cache_line_size_to_wb ; // sinchronized to WB clock
output cache_lsize_not_zero_to_wb ; // used in WBU and PCIU
output [7 : 0] latency_tim ;
//output [2 : 0] int_pin ; // only 3 LSbits are important!
// PCI output from image registers
`ifdef GUEST
output [31:12] pci_base_addr0 ;
`endif
`ifdef HOST
`ifdef NO_CNF_IMAGE
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr0 ;
`else
output [31:12] pci_base_addr0 ;
`endif
`endif
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr1 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr2 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr3 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr4 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_base_addr5 ;
output pci_memory_io0 ;
output pci_memory_io1 ;
output pci_memory_io2 ;
output pci_memory_io3 ;
output pci_memory_io4 ;
output pci_memory_io5 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask0 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask1 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask2 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask3 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask4 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_addr_mask5 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr0 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr1 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr2 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr3 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr4 ;
output [31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] pci_tran_addr5 ;
output [2 : 1] pci_img_ctrl0 ;
output [2 : 1] pci_img_ctrl1 ;
output [2 : 1] pci_img_ctrl2 ;
output [2 : 1] pci_img_ctrl3 ;
output [2 : 1] pci_img_ctrl4 ;
output [2 : 1] pci_img_ctrl5 ;
// PCI input to pci error control and status register, error address and error data registers
input [3 : 0] pci_error_be ;
input [3 : 0] pci_error_bc ;
input pci_error_rty_exp ;
input pci_error_es ;
input pci_error_sig ;
input [31 : 0] pci_error_addr ;
input [31 : 0] pci_error_data ;
// WISHBONE output from image registers
output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr0 ;
output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr1 ;
output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr2 ;
output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr3 ;
output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr4 ;
output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_base_addr5 ;
output wb_memory_io0 ;
output wb_memory_io1 ;
output wb_memory_io2 ;
output wb_memory_io3 ;
output wb_memory_io4 ;
output wb_memory_io5 ;
output [31:(32-`WB_NUM_OF_DEC_ADDR_LINES)] wb_addr_mask0 ;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -