2025-01-30 12:16:11 +01:00
#!/bin/bash
#################################################################################################################
2025-02-09 02:45:30 +01:00
# Define the test configurations (CONTROLLER_CLK_PERIOD, DDR3_CLK_PERIOD, ODELAY_SUPPORTED, LANES_OPTION, ADD_BUS_DELAY, BIST_MODE)
2025-01-30 12:16:11 +01:00
TESTS = (
# with bus delay
2025-02-09 02:45:30 +01:00
"12_000 3_000 1 EIGHT_LANES 1 1" # DDR3-666
"10_000 2_500 1 EIGHT_LANES 1 1" # DDR3-800
"6_000 1_500 1 EIGHT_LANES 1 2" # DDR3-1333 write dm is weird (two happens at same time???)
"5_000 1_250 1 EIGHT_LANES 1 2" # DDR3-1600
2025-01-30 12:16:11 +01:00
# No bus delays
2025-02-09 02:45:30 +01:00
"12_000 3_000 1 EIGHT_LANES 0 2"
"10_000 2_500 1 EIGHT_LANES 0 2"
"6_000 1_500 1 EIGHT_LANES 0 1"
"5_000 1_250 1 EIGHT_LANES 0 1"
2025-01-30 12:16:11 +01:00
# x16
2025-02-09 02:45:30 +01:00
"12_000 3_000 1 TWO_LANES 1 1"
"10_000 2_500 1 TWO_LANES 1 1"
"6_000 1_500 1 TWO_LANES 1 2"
"5_000 1_250 1 TWO_LANES 1 2"
2025-01-30 12:16:11 +01:00
# no odelay
2025-02-09 02:45:30 +01:00
"12_000 3_000 0 TWO_LANES 0 2"
"10_000 2_500 0 TWO_LANES 0 2"
"6_000 1_500 0 TWO_LANES 0 1"
"5_000 1_250 0 TWO_LANES 0 1"
2025-01-30 12:16:11 +01:00
)
#################################################################################################################
# Define the files to modify
FILENAME = "../ddr3_dimm_micron_sim.sv"
DEFINES_FILE = "../sim_defines.vh"
PARAMETERS_FILE = "../8192Mb_ddr3_parameters.vh"
# Check if the main file exists
if [ [ ! -f " $FILENAME " ] ] ; then
echo " Error: File ' $FILENAME ' does not exist. "
exit 1
fi
# Check if the defines file exists
if [ [ ! -f " $DEFINES_FILE " ] ] ; then
echo " Error: File ' $DEFINES_FILE ' does not exist. "
exit 1
fi
# Check if the parameters file exists
if [ [ ! -f " $PARAMETERS_FILE " ] ] ; then
echo " Error: File ' $PARAMETERS_FILE ' does not exist. "
exit 1
fi
#################################################################################################################
# Loop over each test configuration
index = 1
2025-05-25 03:03:16 +02:00
rm -f *.log
2025-01-30 12:16:11 +01:00
for TEST in " ${ TESTS [@] } " ; do
# Parse the test configuration into individual variables
2025-02-09 02:45:30 +01:00
read -r CONTROLLER_CLK_PERIOD DDR3_CLK_PERIOD ODELAY_SUPPORTED LANES_OPTION ADD_BUS_DELAY BIST_MODE <<< " $TEST "
2025-01-30 12:16:11 +01:00
# Record the start time
start_time = $( date +%s)
start_time_am_pm = $( date +"%I:%M %p" ) # Time in AM-PM format
# Print the current test configuration with the start time
2025-02-09 02:45:30 +01:00
echo " $index . Running test with CONTROLLER_CLK_PERIOD= $CONTROLLER_CLK_PERIOD , DDR3_CLK_PERIOD= $DDR3_CLK_PERIOD , ODELAY_SUPPORTED= $ODELAY_SUPPORTED , LANES_OPTION= $LANES_OPTION , ADD_BUS_DELAY= $ADD_BUS_DELAY , BIST_MODE= $BIST_MODE "
2025-01-30 12:16:11 +01:00
echo " Test started at: $start_time_am_pm "
# Use sed to perform the replacements in the main file
sed -i \
-e " s/CONTROLLER_CLK_PERIOD = [0-9_]\+/CONTROLLER_CLK_PERIOD = $CONTROLLER_CLK_PERIOD / " \
-e " s/DDR3_CLK_PERIOD = [0-9_]\+/DDR3_CLK_PERIOD = $DDR3_CLK_PERIOD / " \
-e " s/ODELAY_SUPPORTED = [01]/ODELAY_SUPPORTED = $ODELAY_SUPPORTED / " \
2025-02-09 02:45:30 +01:00
-e " s/BIST_MODE = [0-2]/BIST_MODE = $BIST_MODE / " \
2025-01-30 12:16:11 +01:00
" $FILENAME "
# Modify the sim_defines.vh file based on LANES_OPTION
if [ [ " $LANES_OPTION " = = "TWO_LANES" ] ] ; then
sed -i \
-e "s|^//\(\`define TWO_LANES_x8\)|\1|" \
-e "s|^\(\`define EIGHT_LANES_x8\)|//\1|" \
" $DEFINES_FILE "
elif [ [ " $LANES_OPTION " = = "EIGHT_LANES" ] ] ; then
sed -i \
-e "s|^//\(\`define EIGHT_LANES_x8\)|\1|" \
-e "s|^\(\`define TWO_LANES_x8\)|//\1|" \
" $DEFINES_FILE "
else
echo "Error: Invalid LANES_OPTION value. Choose either 'TWO_LANES' or 'EIGHT_LANES'."
exit 1
fi
# Modify the parameters file based on ADD_BUS_DELAY
if [ [ " $ADD_BUS_DELAY " = = "1" ] ] ; then
sed -i \
-e "s|BUS_DELAY = [0-9]\+|BUS_DELAY = 100|" \
-e "s|FLY_BY_DELAY_LANE_0 = [0-9]\+|FLY_BY_DELAY_LANE_0 = 0|" \
-e "s|FLY_BY_DELAY_LANE_1 = [0-9]\+|FLY_BY_DELAY_LANE_1 = 50|" \
-e "s|FLY_BY_DELAY_LANE_2 = [0-9]\+|FLY_BY_DELAY_LANE_2 = 100|" \
-e "s|FLY_BY_DELAY_LANE_3 = [0-9]\+|FLY_BY_DELAY_LANE_3 = 150|" \
-e "s|FLY_BY_DELAY_LANE_4 = [0-9]\+|FLY_BY_DELAY_LANE_4 = 200|" \
-e "s|FLY_BY_DELAY_LANE_5 = [0-9]\+|FLY_BY_DELAY_LANE_5 = 250|" \
-e "s|FLY_BY_DELAY_LANE_6 = [0-9]\+|FLY_BY_DELAY_LANE_6 = 300|" \
-e "s|FLY_BY_DELAY_LANE_7 = [0-9]\+|FLY_BY_DELAY_LANE_7 = 350|" \
" $PARAMETERS_FILE "
else
sed -i \
-e "s|BUS_DELAY = [0-9]\+|BUS_DELAY = 0|" \
-e "s|FLY_BY_DELAY_LANE_0 = [0-9]\+|FLY_BY_DELAY_LANE_0 = 0|" \
-e "s|FLY_BY_DELAY_LANE_1 = [0-9]\+|FLY_BY_DELAY_LANE_1 = 0|" \
-e "s|FLY_BY_DELAY_LANE_2 = [0-9]\+|FLY_BY_DELAY_LANE_2 = 0|" \
-e "s|FLY_BY_DELAY_LANE_3 = [0-9]\+|FLY_BY_DELAY_LANE_3 = 0|" \
-e "s|FLY_BY_DELAY_LANE_4 = [0-9]\+|FLY_BY_DELAY_LANE_4 = 0|" \
-e "s|FLY_BY_DELAY_LANE_5 = [0-9]\+|FLY_BY_DELAY_LANE_5 = 0|" \
-e "s|FLY_BY_DELAY_LANE_6 = [0-9]\+|FLY_BY_DELAY_LANE_6 = 0|" \
-e "s|FLY_BY_DELAY_LANE_7 = [0-9]\+|FLY_BY_DELAY_LANE_7 = 0|" \
" $PARAMETERS_FILE "
fi
# Run the simulation script with the respective log file
2025-02-09 02:45:30 +01:00
LOG_FILE = " ./test_ ${ CONTROLLER_CLK_PERIOD } _ddr3_ ${ DDR3_CLK_PERIOD } _odelay_ ${ ODELAY_SUPPORTED } _lanes_ ${ LANES_OPTION ,, } _bus_delay_ ${ ADD_BUS_DELAY } _bist_ ${ BIST_MODE } .log "
2025-01-30 12:16:11 +01:00
# ./ddr3_dimm_micron_sim.sh >> "$LOG_FILE"
2025-02-09 02:45:30 +01:00
# add timeout if simulation takes too long
timeout 3h ./ddr3_dimm_micron_sim.sh >> " $LOG_FILE " 2>& 1
2025-01-30 12:16:11 +01:00
EXIT_CODE = $? # Capture exit code immediately
if [ $EXIT_CODE -eq 124 ] ; then
echo " Error: Simulation timed out after 1 hour!" | tee -a " $LOG_FILE "
fi
# Record the end time and calculate the duration in minutes
end_time = $( date +%s)
duration = $(( end_time - start_time))
minutes = $(( duration / 60 ))
seconds = $(( duration % 60 ))
# Report the results
echo " Test completed. Duration: ${ minutes } m ${ seconds } s. Results saved to ' $LOG_FILE '. "
echo ""
# Increment the index
( ( index++) )
done
#################################################################################################################