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

📄 pci_target32_interface.v

📁 这是用pci-wishbone核和16450串口核在xilinx的fpga上实现的串口程序
💻 V
📖 第 1 页 / 共 3 页
字号:
/*==================================================================================================================Configuration space signals - from and to registers==================================================================================================================*/// BUS for reading and writing to configuration space registersoutput	[11:0]	conf_addr_out ;	// address to configuration space when there is access to itoutput	[31:0]	conf_data_out ;	// data to configuration space - for writing to registersinput	[31:0]	conf_data_in ;	// data from configuration space - for reading from registersoutput	[3:0]	conf_be_out ;	// byte enables used for correct writing to configuration spaceoutput			conf_we_out ;	// write enable control signal - 1 for writing / 0 for nothingoutput			conf_re_out ;	// read enable control signal - 1 for reading / 0 for nothing// Inputs for image control registersinput			mem_enable_in ;	// allowed access to memory mapped imageinput			io_enable_in ;	// allowed access to io mapped image// Inputs needed for determining if image is assigned to memory or io space with pre-fetch and address translationinput			mem_io_addr_space0_in ;	// bit-0 in pci_base_addr0 registerinput			mem_io_addr_space1_in ;	// bit-0 in pci_base_addr1 registerinput			mem_io_addr_space2_in ;	// bit-0 in pci_base_addr2 registerinput			mem_io_addr_space3_in ;	// bit-0 in pci_base_addr3 registerinput			mem_io_addr_space4_in ;	// bit-0 in pci_base_addr4 registerinput			mem_io_addr_space5_in ;	// bit-0 in pci_base_addr5 registerinput			pre_fetch_en0_in ;	// bit-1 in pci_image_ctr0 registerinput			pre_fetch_en1_in ;	// bit-1 in pci_image_ctr1 registerinput			pre_fetch_en2_in ;	// bit-1 in pci_image_ctr2 registerinput			pre_fetch_en3_in ;	// bit-1 in pci_image_ctr3 registerinput			pre_fetch_en4_in ;	// bit-1 in pci_image_ctr4 registerinput			pre_fetch_en5_in ;	// bit-1 in pci_image_ctr5 register// Input from image registers - register values needed for decoder to work properlyinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_base_addr0_in ;	// base address from base address registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_base_addr1_in ; // base address from base address registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_base_addr2_in ; // base address from base address registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_base_addr3_in ; // base address from base address registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_base_addr4_in ; // base address from base address registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_base_addr5_in ; // base address from base address registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_addr_mask0_in ; // masking of base address from address mask registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_addr_mask1_in ; // masking of base address from address mask registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_addr_mask2_in ; // masking of base address from address mask registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_addr_mask3_in ; // masking of base address from address mask registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_addr_mask4_in ; // masking of base address from address mask registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_addr_mask5_in ; // masking of base address from address mask registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_tran_addr0_in ; // translation address from address translation registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_tran_addr1_in ; // translation address from address translation registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_tran_addr2_in ; // translation address from address translation registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_tran_addr3_in ; // translation address from address translation registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_tran_addr4_in ; // translation address from address translation registerinput	[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)]	pci_tran_addr5_in ; // translation address from address translation registerinput			addr_tran_en0_in ;	// address translation enable bitinput			addr_tran_en1_in ;	// address translation enable bitinput			addr_tran_en2_in ;	// address translation enable bitinput			addr_tran_en3_in ;	// address translation enable bitinput			addr_tran_en4_in ;	// address translation enable bitinput			addr_tran_en5_in ;	// address translation enable bit/*==================================================================================================================END of input / output PORT DEFINITONS !!!==================================================================================================================*/// address output from address multiplexerreg		[31:0]	address ;// prefetch enable for access to selected image spacereg				pre_fetch_en ;// Input addresses and image hits from address decoders - addresses are multiplexed to address`ifdef			HOST	`ifdef		NO_CNF_IMAGE		`ifdef	PCI_IMAGE0	// if PCI bridge is HOST and IMAGE0 is assigned as general image spacewire			hit0_in ;wire	[31:0]	address0_in ;wire			pre_fetch_en0 = pre_fetch_en0_in ;		`elsewire			hit0_in		= 1'b0 ;wire	[31:0]	address0_in	= 32'h0 ;wire			pre_fetch_en0 = 1'b0 ;		`endif	`elsewire			hit0_in ;wire	[31:0]	address0_in ;wire			pre_fetch_en0 = pre_fetch_en0_in ;	`endif`else // GUESTwire			hit0_in ;wire	[31:0]	address0_in ;wire			pre_fetch_en0 = pre_fetch_en0_in ;`endifwire			hit1_in ;wire	[31:0]	address1_in ;wire			pre_fetch_en1 = pre_fetch_en1_in ;`ifdef		PCI_IMAGE2wire			hit2_in ;wire	[31:0]	address2_in ;wire			pre_fetch_en2 = pre_fetch_en2_in ;`elsewire			hit2_in		= 1'b0 ;wire	[31:0]	address2_in	= 32'h0 ;wire			pre_fetch_en2 = 1'b0 ;`endif`ifdef		PCI_IMAGE3wire			hit3_in ;wire	[31:0]	address3_in ;wire			pre_fetch_en3 = pre_fetch_en3_in ;`elsewire			hit3_in		= 1'b0 ;wire	[31:0]	address3_in	= 32'h0 ;wire			pre_fetch_en3 = 1'b0 ;`endif`ifdef		PCI_IMAGE4wire			hit4_in ;wire	[31:0]	address4_in ;wire			pre_fetch_en4 = pre_fetch_en4_in ;`elsewire			hit4_in		= 1'b0 ;wire	[31:0]	address4_in	= 32'h0 ;wire			pre_fetch_en4 = 1'b0 ;`endif`ifdef		PCI_IMAGE5wire			hit5_in ;wire	[31:0]	address5_in ;wire			pre_fetch_en5 = pre_fetch_en5_in ;`elsewire			hit5_in		= 1'b0 ;wire	[31:0]	address5_in	= 32'h0 ;wire			pre_fetch_en5 = 1'b0 ;`endif// Include address decoders`ifdef			HOST	`ifdef		NO_CNF_IMAGE		`ifdef	PCI_IMAGE0	// if PCI bridge is HOST and IMAGE0 is assigned as general image space	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder0				   (.hit			(hit0_in),					.addr_out		(address0_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr0_in),					.mask_addr		(pci_addr_mask0_in),					.tran_addr		(pci_tran_addr0_in),					.at_en			(addr_tran_en0_in),					.mem_io_space	(mem_io_addr_space0_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;		`endif	`else	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder0				   (.hit			(hit0_in),					.addr_out		(address0_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr0_in),					.mask_addr		(pci_addr_mask0_in),					.tran_addr		(pci_tran_addr0_in),					.at_en			(addr_tran_en0_in),					.mem_io_space	(mem_io_addr_space0_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;	`endif`else // GUEST	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder0				   (.hit			(hit0_in),					.addr_out		(address0_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr0_in),					.mask_addr		(pci_addr_mask0_in),					.tran_addr		(pci_tran_addr0_in),					.at_en			(addr_tran_en0_in),					.mem_io_space	(mem_io_addr_space0_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;`endif	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder1				   (.hit			(hit1_in),					.addr_out		(address1_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr1_in),					.mask_addr		(pci_addr_mask1_in),					.tran_addr		(pci_tran_addr1_in),					.at_en			(addr_tran_en1_in),					.mem_io_space	(mem_io_addr_space1_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;`ifdef		PCI_IMAGE2	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder2				   (.hit			(hit2_in),					.addr_out		(address2_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr2_in),					.mask_addr		(pci_addr_mask2_in),					.tran_addr		(pci_tran_addr2_in),					.at_en			(addr_tran_en2_in),					.mem_io_space	(mem_io_addr_space2_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;`endif`ifdef		PCI_IMAGE3	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder3				   (.hit			(hit3_in),					.addr_out		(address3_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr3_in),					.mask_addr		(pci_addr_mask3_in),					.tran_addr		(pci_tran_addr3_in),					.at_en			(addr_tran_en3_in),					.mem_io_space	(mem_io_addr_space3_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;`endif`ifdef		PCI_IMAGE4	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder4				   (.hit			(hit4_in),					.addr_out		(address4_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr4_in),					.mask_addr		(pci_addr_mask4_in),					.tran_addr		(pci_tran_addr4_in),					.at_en			(addr_tran_en4_in),					.mem_io_space	(mem_io_addr_space4_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;`endif`ifdef		PCI_IMAGE5	pci_pci_decoder   #(`PCI_NUM_OF_DEC_ADDR_LINES) decoder5				   (.hit			(hit5_in),					.addr_out		(address5_in),					.addr_in		(address_in),					.bc_in			(bc_in),					.base_addr		(pci_base_addr5_in),					.mask_addr		(pci_addr_mask5_in),					.tran_addr		(pci_tran_addr5_in),					.at_en			(addr_tran_en5_in),					.mem_io_space	(mem_io_addr_space5_in),					.mem_en			(mem_enable_in),					.io_en			(io_enable_in)					) ;`endif// Internal signals for image hit determinationreg				addr_claim ;// address claim signal is asinchronous set for addr_claim_out signal to PCI Target SM// Determining if image 0 is assigned to configuration space or as normal pci to wb access!//   if normal access is allowed to configuration space, then hit0 is hit0_conf`ifdef		HOST	`ifdef	NO_CNF_IMAGE			parameter	hit0_conf = 1'b0 ;	`else			parameter	hit0_conf = 1'b1 ;	// if normal access is allowed to configuration space, then hit0 is hit0_conf	`endif`else // GUEST			parameter	hit0_conf = 1'b1 ;	// if normal access is allowed to configuration space, then hit0 is hit0_conf`endif// Logic with address mux, determining if address is still in the same image space and if it is prefetced or notalways@(hit5_in or     hit4_in or     hit3_in or     hit2_in or     hit1_in or     hit0_in or		address5_in or address4_in or address3_in or address2_in or address1_in or address0_in or		pre_fetch_en5 or		pre_fetch_en4 or		pre_fetch_en3 or		pre_fetch_en2 or		pre_fetch_en1 or		pre_fetch_en0		)begin	addr_claim <= (hit5_in || hit4_in) || (hit3_in || hit2_in || hit1_in || hit0_in) ;	case ({hit5_in, hit4_in, hit3_in, hit2_in, hit0_in})	5'b10000 :	begin		address <= address5_in ;		pre_fetch_en <= pre_fetch_en5 ;	end	5'b01000 :	begin		address <= address4_in ;		pre_fetch_en <= pre_fetch_en4 ;	end	5'b00100 :	begin		address <= address3_in ;		pre_fetch_en <= pre_fetch_en3 ;	end	5'b00010 :	begin		address <= address2_in ;		pre_fetch_en <= pre_fetch_en2 ;	end	5'b00001 :	begin		address <= address0_in ;		pre_fetch_en <= pre_fetch_en0 ;	end	default	: // IMAGE 1 is always included into PCI bridge	begin		address <= address1_in ;		pre_fetch_en <= pre_fetch_en1 ;	end	endcaseend

⌨️ 快捷键说明

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