[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pci] PCI bursts
Hi,
I have trouble making the pci core to issue block reads on the pci bus
as pci initiator. The framen signal only goes low for one cycle (single
transfer).
I simulate two pci cores in my pci test bench in which they target each
other with consecutive address bursts. I have enabled pref_en and mrl_en
in w_img_ctrlX as stated on page 23 in rev 0.6 of pci_specification and
the w_baX bit0 is set to MEM space.
Is there an obligation of transfer type issued on the Wishbone bus to
get a burst on PCI? I use the CAB signal to issue double word transfers.
I only have this problem when issuing read. Write propagate smoothly.
Could anyone in detail explain how the CAB signal is used. It is not
described very thoroughly I drive it high when I issue STB and keep it
there until the (second) STB is acknowledged.
I also have a question about conf_space.v ~row: 1000
Shouldn't something like this be added for every Image or image reads
will not return prefetchable bit?
-> w_conf_data_out[3] = pci_img_ctrl1[1] & pci_am1[31] &
~pci_ba1[0]; //DANIEL
---
begin
case (w_conf_address_in[8])
1'b0 :
begin
case ({w_conf_address_in[7], w_conf_address_in[6]})
2'b00 :
begin
// PCI header - configuration space
case (w_conf_address_in[5:2])
4'h0:
begin
w_conf_data_out = { r_device_id, r_vendor_id } ;
w_reg_select_dec = 56'h00_0000_0000_0000 ; // Read-Only register
end
4'h1: // w_reg_select_dec bit 0
begin
w_conf_data_out = { status_bit15_11, r_status_bit10_9,
status_bit8, r_status_bit7, 1'h0, r_status_bit5,
5'h00, 7'h00, command_bit8, 1'h0,
command_bit6, 3'h0, command_bit2_0 } ;
w_reg_select_dec = 56'h00_0000_0000_0001 ;
end
4'h2:
begin
w_conf_data_out = { r_class_code, r_revision_id } ;
w_reg_select_dec = 56'h00_0000_0000_0000 ; // Read-Only register
end
4'h3: // w_reg_select_dec bit 1
begin
w_conf_data_out = { 8'h00, r_header_type, latency_timer,
cache_line_size_reg } ;
w_reg_select_dec = 56'h00_0000_0000_0002 ;
end
4'h4: // w_reg_select_dec bit 4
begin
w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] =
pci_ba0_bit31_12[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &
pci_am0[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
w_conf_data_out[0] = pci_ba0_bit0 & pci_am0[31];
w_reg_select_dec = 56'h00_0000_0000_0010 ; // The same for
another address
end
4'h5: // w_reg_select_dec bit 8
begin
w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] =
pci_ba1_bit31_12[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &
pci_am1[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
w_conf_data_out[3] = pci_img_ctrl1[1] & pci_am1[31] &
~pci_ba1[0]; //DANIEL
w_conf_data_out[0] = pci_ba1_bit0 & pci_am1[31];
w_reg_select_dec = 56'h00_0000_0000_0100 ; // The same for
another address
end
4'h6: // w_reg_select_dec bit 12
begin
w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] =
pci_ba2_bit31_12[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &
pci_am2[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
w_conf_data_out[0] = pci_ba2_bit0 & pci_am2[31];
w_reg_select_dec = 56'h00_0000_0000_1000 ; // The same for
another address
end
4'h7: // w_reg_select_dec bit 16
begin
w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] =
pci_ba3_bit31_12[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &
pci_am3[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
w_conf_data_out[(31-`PCI_NUM_OF_DEC_ADDR_LINES):1] = 0 ;
w_conf_data_out[0] = pci_ba3_bit0 & pci_am3[31];
w_reg_select_dec = 56'h00_0000_0001_0000 ; // The same for
another address
end
4'h8: // w_reg_select_dec bit 20
begin
w_conf_data_out[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] =
pci_ba4_bit31_12[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] &
pci_am4[31:(32-`PCI_NUM_OF_DEC_ADDR_LINES)] ;
w_conf_data_out[(3
---
Best regards,
Daniel
--
To unsubscribe from pci mailing list please visit http://www.opencores.org/mailinglists.shtml