Line 1... |
Line 1... |
//===========================================================================
|
//===========================================================================
|
// $Id: pci_behaviorial_target.v,v 1.3 2002-03-21 07:35:50 mihad Exp $
|
// $Id: pci_behaviorial_target.v,v 1.4 2002-08-13 11:03:51 mihad Exp $
|
//
|
//
|
// Copyright 2001 Blue Beaver. All Rights Reserved.
|
// Copyright 2001 Blue Beaver. All Rights Reserved.
|
//
|
//
|
// Summary: A PCI Behaviorial Target. This module receives commands over
|
// Summary: A PCI Behaviorial Target. This module receives commands over
|
// the PCI Bus. The PCI Master encodes commands in the middle
|
// the PCI Bus. The PCI Master encodes commands in the middle
|
Line 592... |
Line 592... |
endtask
|
endtask
|
|
|
// Drive SRAM Data onto AD bus, and increment Read Pointer
|
// Drive SRAM Data onto AD bus, and increment Read Pointer
|
task Fetch_SRAM_Data_For_Read_Onto_AD_Bus;
|
task Fetch_SRAM_Data_For_Read_Onto_AD_Bus;
|
output [PCI_BUS_DATA_RANGE:0] target_read_data;
|
output [PCI_BUS_DATA_RANGE:0] target_read_data;
|
|
reg fetch_from0 ;
|
begin
|
begin
|
Read_Test_Device_SRAM (hold_target_address[11:2], ~cbe_l_now, target_read_data[PCI_BUS_DATA_RANGE:0]);
|
fetch_from0 = (hold_target_command == PCI_COMMAND_INTERRUPT_ACKNOWLEDGE) ;
|
|
Read_Test_Device_SRAM (fetch_from0 ? 0 : hold_target_address[11:2], ~cbe_l_now, target_read_data[PCI_BUS_DATA_RANGE:0]);
|
hold_target_address[11:2] = hold_target_address[11:2] + 10'h001; // addr++
|
hold_target_address[11:2] = hold_target_address[11:2] + 10'h001; // addr++
|
end
|
end
|
endtask
|
endtask
|
|
|
// The target is able to execute Delayed Reads,
|
// The target is able to execute Delayed Reads,
|
Line 1435... |
Line 1437... |
& (ad_now[1:0] == 2'b00) )
|
& (ad_now[1:0] == 2'b00) )
|
begin
|
begin
|
Execute_Target_PCI_Ref (`TEST_TARGET_DOING_CONFIG_WRITE,
|
Execute_Target_PCI_Ref (`TEST_TARGET_DOING_CONFIG_WRITE,
|
saw_fast_back_to_back);
|
saw_fast_back_to_back);
|
end
|
end
|
else if (~frame_prev & frame_now & Target_En
|
else if (~frame_prev & frame_now & Target_En &
|
`ifdef SIMULTANEOUS_MASTER_TARGET
|
(
|
// Don't check for reads to self
|
(cbe_l_now[PCI_BUS_CBE_RANGE:0] == PCI_COMMAND_INTERRUPT_ACKNOWLEDGE) |
|
`else // SIMULTANEOUS_MASTER_TARGET
|
(
|
// Check for, and don't respond to, reads to self
|
(
|
`endif //SIMULTANEOUS_MASTER_TARGET
|
(cbe_l_now[PCI_BUS_CBE_RANGE:0] == PCI_COMMAND_MEMORY_READ)
|
& ( (cbe_l_now[PCI_BUS_CBE_RANGE:0] == PCI_COMMAND_MEMORY_READ)
|
|
| (cbe_l_now[PCI_BUS_CBE_RANGE:0] == PCI_COMMAND_MEMORY_READ_MULTIPLE)
|
| (cbe_l_now[PCI_BUS_CBE_RANGE:0] == PCI_COMMAND_MEMORY_READ_MULTIPLE)
|
| (cbe_l_now[PCI_BUS_CBE_RANGE:0] == PCI_COMMAND_MEMORY_READ_LINE) )
|
| (cbe_l_now[PCI_BUS_CBE_RANGE:0] == PCI_COMMAND_MEMORY_READ_LINE)
|
& ( (ad_now[`PCI_BASE_ADDR0_MATCH_RANGE] == BAR0[`PCI_BASE_ADDR0_MATCH_RANGE])
|
)
|
|
&
|
|
(
|
|
(ad_now[`PCI_BASE_ADDR0_MATCH_RANGE] == BAR0[`PCI_BASE_ADDR0_MATCH_RANGE])
|
`ifdef PCI_BASE_ADDR1_MATCH_ENABLE
|
`ifdef PCI_BASE_ADDR1_MATCH_ENABLE
|
| (ad_now[`PCI_BASE_ADDR1_MATCH_RANGE] == BAR1[`PCI_BASE_ADDR1_MATCH_RANGE])
|
| (ad_now[`PCI_BASE_ADDR1_MATCH_RANGE] == BAR1[`PCI_BASE_ADDR1_MATCH_RANGE])
|
`endif // PCI_BASE_ADDR1_MATCH_ENABLE
|
`endif // PCI_BASE_ADDR1_MATCH_ENABLE
|
) )
|
)
|
|
)
|
|
)
|
|
)
|
begin
|
begin
|
Execute_Target_PCI_Ref (`TEST_TARGET_DOING_SRAM_READ,
|
Execute_Target_PCI_Ref (`TEST_TARGET_DOING_SRAM_READ,
|
saw_fast_back_to_back);
|
saw_fast_back_to_back);
|
end
|
end
|
else if (~frame_prev & frame_now & (idsel_now == 1'b1)
|
else if (~frame_prev & frame_now & (idsel_now == 1'b1)
|