Skip to content
Snippets Groups Projects
Commit b9c9fb19 authored by BRONES Romain's avatar BRONES Romain
Browse files

fix simulation

* align memory access
* adapt to new rounding in filter
parent 3cfe14c0
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
Source diff could not be displayed: it is too large. Options to address this: view the blob.
......@@ -35,7 +35,7 @@ N_BPM=respmat.shape[1]*2
N_PSC=respmat.shape[0]
size=200
N_MM_RND=23
N_MM_RND=15
#############################################################################
# Generate data input
......@@ -66,6 +66,7 @@ trespmat = np.zeros((N_PSC, N_BPM), dtype="int64")
trespmat[:50,:122] = respmat[:50]
trespmat[50:,122:] = respmat[50:]
C_N_RND = 20
C_N_A_RND = 8
SUMSAT=36
......@@ -75,12 +76,6 @@ K_iC = 325
K_D = -3225
K_A = 1024
K_B = 0
K_iC = 1024
K_D = 0
## -----------------------
# Model computation
......@@ -92,15 +87,15 @@ mm=np.empty((N_PSC, size), dtype="int32")
for i in range(size):
# Stage 1 : matmul
_mm= np.matmul(oe[:,i].astype("int64"), trespmat.T, dtype='int64')
mm[:,i] = _mm>>N_MM_RND
mm[:,i] = np.round(_mm*2**-N_MM_RND).astype("int32")
# Step 3: correction computation
corr = np.zeros((N_PSC, size), dtype="int64")
_corr = mm[:,0].astype('i8')*K_A*K_iC
_corr = (np.round(mm[:,0].astype('i8')*K_A*2**-C_N_RND)*K_iC).astype("int64")
corr[:,0] = np.clip(np.round(_corr/2**C_N_RND), -2**15, 2**15-1).astype('i8')
for i in range(1,size):
_sum = mm[:,i].astype('i8')*K_A + mm[:,i-1].astype('i8')*K_B + corr[:,i-1]*K_D
_sum = (np.round(mm[:,i].astype('i8')*K_A*2**-C_N_RND)).astype('i8') + mm[:,i-1].astype('i8')*K_B + corr[:,i-1]*K_D
_corr = np.clip(_sum, -2**(SUMSAT-1), 2**(SUMSAT-1)-1)*K_iC
corr[:,i] = np.clip(np.round(_corr/2**C_N_RND), -2**15, 2**15-1)
......
......@@ -113,10 +113,12 @@ begin
Write(ManagerRec, f_addr(16#58#), f_data(C_NUMBPM));
-- Rst corr and threshold
Write(ManagerRec, f_addr(8), f_sdata(10));
Write(ManagerRec, f_addr(16#8#), f_sdata(10));
Write(ManagerRec, f_addr(16#C#), f_sdata(10));
-- Enable
Write(ManagerRec, f_addr(8), f_sdata(1));
Write(ManagerRec, f_addr(16#8#), f_sdata(1));
Write(ManagerRec, f_addr(16#C#), f_sdata(1));
log("+-- Writing orbit reference...", INFO);
......@@ -126,19 +128,19 @@ begin
for I in 0 to C_N_MM_BPM-1 loop
readline(read_file, line_v);
read(line_v, int_v);
Write(ManagerRec, f_addr(16#200#+I*4), f_sdata(int_v));
Write(ManagerRec, f_addr(16#400#+I*4), f_sdata(int_v));
end loop;
-- Y ref orbit
for I in 0 to C_N_MM_BPM-1 loop
readline(read_file, line_v);
read(line_v, int_v);
Write(ManagerRec, f_addr(16#400#+I*4), f_sdata(int_v));
Write(ManagerRec, f_addr(16#800#+I*4), f_sdata(int_v));
end loop;
file_close(read_file);
log("+-- Writing PSCID...", INFO);
for J in 0 to C_N_MM_PSC-1 loop
Write(ManagerRec, f_addr(16#800#+J*4), f_sdata(J+1));
Write(ManagerRec, f_addr(16#C00#+J*4), f_sdata(J+1));
end loop;
log("+-- Writing inv. resp. matrix coefficients...", INFO);
......@@ -149,7 +151,7 @@ begin
for I in 0 to C_N_MM_BPM-1 loop
readline(read_file, line_v);
read(line_v, int_v);
Write(ManagerRec, f_addr(16#C00#+J*512+I*4), f_sdata(int_v));
Write(ManagerRec, f_addr(16#1000#+J*512+I*4), f_sdata(int_v));
end loop;
end loop;
......
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