2 Commits
dodo ... main

Author SHA1 Message Date
d1a3b7cec9 Adjusts delay in monitoring script and adds clock frequency calculator
Increases the delay in the monitoring script from 1 second to 3 seconds to reduce resource strain during rapid file changes.

Introduces a new Python script for calculating optimal clock frequency settings based on input and target frequencies.
2025-04-26 10:25:43 +00:00
2a2789dda1 Adds auto-flashing script for bitstream updates
Introduces a Bash script to automate flashing bitstream files to devices.
Includes argument parsing, file monitoring, and error handling.
Enhances development workflow by streamlining device programming.
2025-04-25 16:22:32 +00:00
2 changed files with 112 additions and 0 deletions

83
autoflash.sh Executable file
View File

@@ -0,0 +1,83 @@
#!/bin/bash
# 🧠 Show help message
function show_help() {
echo "Usage: $0 [-d device] [-i index] TopModuleName"
echo
echo "Arguments:"
echo " -d <device> Name of the USB device (e.g., DOnbUsb), optional (default: DOnbUsb)"
echo " -i <index> Interface index, optional (default: 0)"
echo " TopModule Name of the top module (e.g., VGATimingGenerator)"
exit 1
}
# 🔧 Default values
DEVICE="DOnbUsb"
INDEX=0
# 🧩 Parse arguments
while [[ "$1" =~ ^- ]]; do
case "$1" in
-d)
shift
DEVICE="$1"
;;
-i)
shift
INDEX="$1"
;;
-h|--help)
show_help
;;
*)
echo "❌ Unknown option: $1"
show_help
;;
esac
shift
done
# 📛 Get top module name
TOPMODULE="$1"
if [ -z "$TOPMODULE" ]; then
echo "❌ Error: No top module specified."
show_help
fi
# 📂 Path to bitstream file
BITFILE="working/${TOPMODULE}.bit"
# 📡 Flashing function
function flash_bitstream() {
echo "⚡ Flashing bitstream to device $DEVICE, index $INDEX..."
yes Y | djtgcfg prog -d "$DEVICE" -i "$INDEX" -f "$BITFILE"
}
# 🧹 Cleanup on Ctrl+C
function cleanup() {
echo
echo "👋 Terminated. Auto-flashing is no longer active."
exit 0
}
trap cleanup SIGINT
# 🔍 Initial check
if [ -f "$BITFILE" ]; then
echo "📦 Bitstream file $BITFILE found. Starting initial flash..."
flash_bitstream
echo "✅ Initial flash completed. Waiting for changes..."
else
echo "⚠️ Bitstream file $BITFILE does not exist yet. Waiting for initial creation..."
fi
echo "👂 Monitoring $BITFILE for changes... (Press Ctrl+C to exit)"
# ♻️ Infinite watch loop
while true; do
inotifywait -e close_write "$BITFILE" >/dev/null 2>&1
echo "🌀 Change detected. Waiting 3 second..."
sleep 3
flash_bitstream
echo "✅ Done. Waiting for next change..."
done

29
clkfx.py Normal file
View File

@@ -0,0 +1,29 @@
def find_best_clkfx(input_freq, target_freq):
best_m = 0
best_d = 0
best_error = float('inf')
best_output = 0
for m in range(2, 33): # CLKFX_MULTIPLY 2..32
for d in range(1, 33): # CLKFX_DIVIDE 1..32
output_freq = input_freq * m / d
error = abs(output_freq - target_freq)
if error < best_error:
best_error = error
best_m = m
best_d = d
best_output = output_freq
relative_error = (best_error / target_freq) * 100
print(f"Beste Werte:")
print(f" CLKFX_MULTIPLY => {best_m}")
print(f" CLKFX_DIVIDE => {best_d}")
print(f"Erzeugte Frequenz: {best_output:.6f} MHz")
print(f"Abweichung: {best_error:.6f} MHz ({relative_error:.3f}%)")
if __name__ == "__main__":
input_freq = float(input("Eingangsfrequenz (MHz): "))
target_freq = float(input("Ziel-Frequenz (MHz): "))
find_best_clkfx(input_freq, target_freq)