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
Tags 1.2.0
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