Keywords: FSL, bus, asynchronous, time, group, MicroBlaze, uBlaze, MB, FIFO, first, in, first, out
When using the FSL bus on my MicroBlaze system, I receive warnings and errors similar to the following:
"WARNING:Xst:2170 - Unit sum_data_0_to_microblaze_0 : the following signal(s) form a combinatorial loop: sum_data_0_to_microblaze_0/Using_FIFO.Async_FIFO_Gen.Use_Control.Use_DPRAM1.Async_FIFO_I1/Direction_0_or0000.
WARNING:Xst:2170 - Unit microblaze_0_to_ccx2mb_0 : the following signal(s) form a combinatorial loop: microblaze_0_to_sum_data_0/Using_FIFO.Async_FIFO_Gen.Use_Control.Use_DPRAM1.Async_FIFO_I1/Direction_0_or0000.
Optimizing unit <system> ...
Mapping all equations...
ERROR:Xst:1617 - Processing TIMESPEC TS_ASYNC_FIFO_sum_data_0_to_microblaze_0: user TIMEGRP 'sum_data_0_to_microblaze_0_fsl' must be previously defined in FROM/TO constraint.
ERROR:Xst:1489 - Constraint annotation failed."
A problem was found in one of the FSL core's supporting files. To work around the problem:
1. Open C:\Xilinx\10.1\EDK\hw\XilinxProcessorIPLib\pcores\fsl_v20_v2_11_a\data\fsl_v20_v2_1_0.tcl in a text editor.
2. Insert the following line between lines 79 and 80:
set use_control [xget_hw_parameter_value $mhsinst "C_USE_CONTROL" ]
3. Replace lines 97 - 98 (98 - 99 after the new line insertion):
From
puts $outputFile "INST \"${name_lower}/Using_FIFO.Async_FIFO_Gen.Use_Control.Use_DPRAM1.Async_FIFO_I1/Mram*\" TNM = \"${name_lower}_fsl\"; "
puts $outputFile "TIMESPEC \"TS_ASYNC_FIFO_$name_lower\" = FROM \"${name_lower}_fsl\" TO FFS $read_clock_period ps; "
With
if {($use_control == 1)} {
puts $outputFile "INST \"${name_lower}/Using_FIFO.Async_FIFO_Gen.Use_Control.Use_DPRAM1.Async_FIFO_I1/Mram*\" TNM = \"${name_lower}_fsl\"; "
puts $outputFile "TIMESPEC \"TS_ASYNC_FIFO_$name_lower\" = FROM \"${name_lower}_fsl\" TO FFS $read_clock_period ps; "
} else {
puts $outputFile "INST \"${name_lower}/Using_FIFO.Async_FIFO_Gen.Use_Data.Use_DPRAM0.Async_FIFO_I1/Mram*\" TNM = \"${name_lower}_fsl\"; "
puts $outputFile "TIMESPEC \"TS_ASYNC_FIFO_$name_lower\" = FROM \"${name_lower}_fsl\" TO FFS $read_clock_period ps; "
}
4. Save and close the file.