Skip to content
Snippets Groups Projects
Commit e2c0afd5 authored by Reinier van der Walle's avatar Reinier van der Walle
Browse files

Merge branch 'L2SDP-846b' into 'master'

Generate gains_1024_complex_16b14f_unit_*.hex files for subband weights unit...

Closes L2SDP-846

See merge request desp/hdl!306
parents e010829a 6efa58af
No related branches found
No related tags found
1 merge request!306Generate gains_1024_complex_16b14f_unit_*.hex files for subband weights unit...
Pipeline #42883 passed
Showing
with 12240 additions and 3 deletions
This diff is collapsed.
This diff is collapsed.
...@@ -22,9 +22,107 @@ ...@@ -22,9 +22,107 @@
# Purpose: Generate the hex files for RAM initialization in SDP designs # Purpose: Generate the hex files for RAM initialization in SDP designs
############################################################################### ###############################################################################
# The sdp_hex.py files are generated in sdp/python and have to be manually
# copied to the design directory in git:
# . applications/lofar2/designs/lofar2_unb2b_sdp_station/tb/data
# . applications/lofar2/designs/lofar2_unb2c_sdp_station/tb/data
# From there the revision hdllib.cfg will copy the files the project build
# data directory for quartus and for modelsim.
#
# The IntelHex module outputs the addresses as byte addresses that increment
# by 4 for every line. Instead the memory in synthesis requires the addresses
# as word addresses that increment by 1. For simulation generated file can be
# used tb/data. For synthesis the word addresses file needs to be used from
# src/data and can be obtained using the GUI:
#
# 1 Generate hex files with:
# > python sdp_hex.py
# Copy file to the tb/data/
# ==> equal diff (idem for unb2b)
# diff bf_unit_ss_wide_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/bf_unit_ss_wide_0.hex
# diff bf_unit_weights_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/bf_unit_weights_0.hex
# diff gains_1024_complex_16b13f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b13f_unit_0.hex
# diff gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_0.hex
#
# Remark: All index files are identical, because they all have the same
# defaults. So only need to convert index file 0.
# . Keep generated byte address file with index 0 in byte/
# . Keep converted word address file with index 0 in word/
#
# 2 Start Quartus GUI to convert byte address file into word addres hex file:
# Menu File --> Open one hex file
# . A prompt will pop up to enter the word size, enter 8 (default) -> OK.
# Menu Edit -> Memory Size Wizard
# . Enter word size 32 -> Next
# . Select Combine existing words
# . Keep number of words default (for gains_1024_complex ... .hex, it will be 1024) -> Finish
# . File -> Save As in temporary location word/ (do not create new project file)
# . File -> Close
# Copy hex files to src/data/ in:
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_0.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_1.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_2.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_3.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_4.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_5.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_6.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_7.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_8.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_9.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_10.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/tb/data/gains_1024_complex_16b14f_unit_11.hex
#
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_0.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_1.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_2.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_3.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_4.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_5.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_6.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_7.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_8.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_9.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_10.hex
# cp byte/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/tb/data/gains_1024_complex_16b14f_unit_11.hex
#
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_0.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_1.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_2.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_3.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_4.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_5.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_6.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_7.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_8.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_9.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_10.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2b_sdp_station/src/data/gains_1024_complex_16b14f_unit_11.hex
#
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_0.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_1.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_2.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_3.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_4.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_5.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_6.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_7.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_8.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_9.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_10.hex
# cp word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_11.hex
#
# diff word/bf_unit_ss_wide_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/bf_unit_ss_wide_0.hex
# diff word/bf_unit_weights_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/bf_unit_weights_0.hex
# diff word/gains_1024_complex_16b13f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b13f_unit_0.hex
# diff word/gains_1024_complex_16b14f_unit_0.hex ../../../../designs/lofar2_unb2c_sdp_station/src/data/gains_1024_complex_16b14f_unit_0.hex
#
# TODO: Try use the converted files from word/ also for simulation in tb/data,
# because there should be no difference between sim and synth.
from intelhex import IntelHex from intelhex import IntelHex
import struct import struct
# Subband select
for i in range(0,6): for i in range(0,6):
f = IntelHex() f = IntelHex()
for j in range(0,2*488): for j in range(0,2*488):
...@@ -33,6 +131,13 @@ for i in range(0,6): ...@@ -33,6 +131,13 @@ for i in range(0,6):
f.write_hex_file("bf_unit_ss_wide_"+str(i)+".hex", byte_count = 2) f.write_hex_file("bf_unit_ss_wide_"+str(i)+".hex", byte_count = 2)
# Weigths are 16b complex value so 4 byte words, Im in byte 0, 1 and Re in
# byte 2, 3, e.g.:
# 0 1 2 3
# 2**14 + 0j : 00 00 40 00 , 2**14 = 0x4000
# 2**13 + 0j : 00 00 20 00 , 2**13 = 0x2000
# BF weights
for i in range(0,12): for i in range(0,12):
f = IntelHex() f = IntelHex()
for j in range(0,2*488): for j in range(0,2*488):
...@@ -42,11 +147,22 @@ for i in range(0,12): ...@@ -42,11 +147,22 @@ for i in range(0,12):
f[4*j + 3] = 0x00 f[4*j + 3] = 0x00
f.write_hex_file("bf_unit_weights_"+str(i)+".hex", byte_count = 4) f.write_hex_file("bf_unit_weights_"+str(i)+".hex", byte_count = 4)
# Subband weights
for i in range(0,6): for i in range(0,6):
f = IntelHex() f = IntelHex()
for j in range(0,1024): for j in range(0,1024):
f[4*j] = 0x00 f[4*j] = 0x00
f[4*j + 1] = 0x00 f[4*j + 1] = 0x00
f[4*j + 2] = 0x20 f[4*j + 2] = 0x20
f[4*j + 3] = 0x00 f[4*j + 3] = 0x00
f.write_hex_file("gains_1024_complex_16b13f_unit_"+str(i)+".hex", byte_count = 4) f.write_hex_file("gains_1024_complex_16b13f_unit_"+str(i)+".hex", byte_count = 4)
for i in range(0,6):
f = IntelHex()
for j in range(0,1024):
f[4*j] = 0x00
f[4*j + 1] = 0x00
f[4*j + 2] = 0x40
f[4*j + 3] = 0x00
f.write_hex_file("gains_1024_complex_16b14f_unit_"+str(i)+".hex", byte_count = 4)
This diff is collapsed.
This diff is collapsed.
...@@ -115,8 +115,18 @@ END node_sdp_filterbank; ...@@ -115,8 +115,18 @@ END node_sdp_filterbank;
ARCHITECTURE str OF node_sdp_filterbank IS ARCHITECTURE str OF node_sdp_filterbank IS
-- FIR coeffs file is copied to build data/ dir by design revision hdllib.cfg
-- from: $HDL_WORK/libraries/dsp/filter/src/hex
CONSTANT c_coefs_file_prefix : STRING := "data/Coeffs16384Kaiser-quant_1wb"; CONSTANT c_coefs_file_prefix : STRING := "data/Coeffs16384Kaiser-quant_1wb";
CONSTANT c_gains_file_name : STRING := "data/gains_1024_complex_16b13f_unit"; -- Can be generated by src/python/sdp_hex.py
-- Subband gains file is copied to build data/ dir by design revision
-- hdllib.cfg from:
-- . applications/lofar2/designs/lofar2_unb2c_sdp_station/src/data/
-- . applications/lofar2/designs/lofar2_unb2c_sdp_station/src/data/
-- Subband gains file can be generated by sdp/src/python/sdp_hex.py
CONSTANT c_gains_file_name : STRING := "data/gains_1024_complex_" &
NATURAL'IMAGE(c_sdp_W_sub_weight) & "b" &
NATURAL'IMAGE(c_sdp_W_sub_weight_fraction) & "f_unit";
CONSTANT c_nof_masters : POSITIVE := 2; -- for M&C MM access and for statistics offload MM access CONSTANT c_nof_masters : POSITIVE := 2; -- for M&C MM access and for statistics offload MM access
......
...@@ -99,8 +99,11 @@ END node_sdp_oversampled_filterbank; ...@@ -99,8 +99,11 @@ END node_sdp_oversampled_filterbank;
ARCHITECTURE str OF node_sdp_oversampled_filterbank IS ARCHITECTURE str OF node_sdp_oversampled_filterbank IS
-- See node_sdp_filterbank for location and genetion of hex files
CONSTANT c_coefs_file_prefix : STRING := "data/Coeffs16384Kaiser-quant_1wb"; CONSTANT c_coefs_file_prefix : STRING := "data/Coeffs16384Kaiser-quant_1wb";
CONSTANT c_gains_file_name : STRING := "data/gains_1024_complex_16b13f_unit"; -- Can be generated by src/python/sdp_hex.py CONSTANT c_gains_file_name : STRING := "data/gains_1024_complex_" &
NATURAL'IMAGE(c_sdp_W_sub_weight) & "b" &
NATURAL'IMAGE(c_sdp_W_sub_weight_fraction) & "f_unit";
-- Use quantized subbands -- Use quantized subbands
CONSTANT c_subband_raw_dat_w : NATURAL := c_sdp_W_subband; CONSTANT c_subband_raw_dat_w : NATURAL := c_sdp_W_subband;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment