|
|
import numpy as np
|
|
|
|
|
|
from test_fft.register_addresses_fft_test import *
|
|
|
|
|
|
from __main__ import RMAPPlugin0
|
|
|
|
|
|
def print_custom( value ):
|
|
|
print value
|
|
|
RMAPPlugin0.ProcessPendingEvents()
|
|
|
|
|
|
def read_SM_Re( nbFrequencyBins, address_MEM_OUT_SM ):
|
|
|
currentComp_re = np.zeros( nbFrequencyBins )
|
|
|
if address_MEM_OUT_SM == address_MEM_OUT_SM_0:
|
|
|
mask_REN = mask_REN_FIFO_0
|
|
|
elif address_MEM_OUT_SM == address_MEM_OUT_SM_1:
|
|
|
mask_REN = mask_REN_FIFO_1
|
|
|
else:
|
|
|
print_custom( "ERR *** read_SM_Re *** unexpected address_MEM_OUT_SM" )
|
|
|
for frequencyBin in range(nbFrequencyBins):
|
|
|
# read Re
|
|
|
RMAPPlugin0.Write( address_CTRL_SM, [mask_REN] )
|
|
|
val = RMAPPlugin0.Read( address_MEM_OUT_SM, 1)
|
|
|
currentComp_re[frequencyBin] = val[0]
|
|
|
RMAPPlugin0.ProcessPendingEvents()
|
|
|
return currentComp_re
|
|
|
|
|
|
def read_SM_Re_Im( nbFrequencyBins, address_MEM_OUT_SM ):
|
|
|
currentComp_re = np.zeros( nbFrequencyBins )
|
|
|
currentComp_im = np.zeros( nbFrequencyBins )
|
|
|
if address_MEM_OUT_SM == address_MEM_OUT_SM_0:
|
|
|
mask_REN = mask_REN_FIFO_0
|
|
|
elif address_MEM_OUT_SM == address_MEM_OUT_SM_1:
|
|
|
mask_REN = mask_REN_FIFO_1
|
|
|
else:
|
|
|
print_custom( "ERR *** read_SM_Re_Im *** unexpected address_MEM_OUT_SM" )
|
|
|
for frequencyBin in range(nbFrequencyBins):
|
|
|
# read Re
|
|
|
RMAPPlugin0.Write( address_CTRL_SM, [mask_REN] )
|
|
|
val = RMAPPlugin0.Read( address_MEM_OUT_SM, 1)
|
|
|
currentComp_re[frequencyBin] = val[0]
|
|
|
# read Im
|
|
|
RMAPPlugin0.Write( address_CTRL_SM, [mask_REN] )
|
|
|
val = RMAPPlugin0.Read( address_MEM_OUT_SM, 1)
|
|
|
currentComp_im[frequencyBin] = val[0]
|
|
|
RMAPPlugin0.ProcessPendingEvents()
|
|
|
return (currentComp_re, currentComp_im)
|
|
|
|
|
|
def is_MEM_OUT_SM_Empty( ):
|
|
|
ret = 0
|
|
|
sm_reg = RMAPPlugin0.Read( address_CTRL_SM, 1)
|
|
|
MEM_OUT_SM_Empty = (sm_reg[0] & 0x00000030) >> 4
|
|
|
if MEM_OUT_SM_Empty == 0x3:
|
|
|
ret = 1
|
|
|
return ret
|
|
|
|
|
|
def is_MEM_OUT_SM_Full( ):
|
|
|
ret = 0
|
|
|
sm_reg = RMAPPlugin0.Read( address_CTRL_SM, 1)
|
|
|
MEM_OUT_SM_Full = (sm_reg[0] & 0x0000000c) >> 2
|
|
|
if MEM_OUT_SM_Full != 0x0:
|
|
|
ret = 1
|
|
|
return ret
|
|
|
|
|
|
def is_MEM_OUT_SM_Full_FIFO_0( ):
|
|
|
ret = 0
|
|
|
sm_reg = RMAPPlugin0.Read( address_CTRL_SM, 1)
|
|
|
MEM_OUT_SM_Full = (sm_reg[0] & 0x00000004) >> 2
|
|
|
if MEM_OUT_SM_Full == 0x01:
|
|
|
ret = 1
|
|
|
return ret
|
|
|
|
|
|
def is_MEM_OUT_SM_Full_FIFO_1( ):
|
|
|
ret = 0
|
|
|
sm_reg = RMAPPlugin0.Read( address_CTRL_SM, 1)
|
|
|
MEM_OUT_SM_Full = (sm_reg[0] & 0x00000008) >> 3
|
|
|
if MEM_OUT_SM_Full == 0x01:
|
|
|
ret = 1
|
|
|
return ret
|
|
|
|
|
|
def wait_for_FIFO_0_Full():
|
|
|
counter = 0
|
|
|
while ( is_MEM_OUT_SM_Full_FIFO_0() == 0 ):
|
|
|
print_custom( "FIFO_0 not full " + str(counter) )
|
|
|
counter = counter + 1
|
|
|
if counter == 10:
|
|
|
break
|
|
|
|
|
|
def wait_for_FIFO_1_Full():
|
|
|
counter = 0
|
|
|
while ( is_MEM_OUT_SM_Full_FIFO_1() == 0 ):
|
|
|
print_custom( "FIFO_1 not full " + str(counter))
|
|
|
counter = counter + 1
|
|
|
if counter == 10:
|
|
|
break
|
|
|
|
|
|
def wait_for_FIFO_Full( fifo ):
|
|
|
if fifo == 0:
|
|
|
wait_for_FIFO_0_Full()
|
|
|
elif fifo == 1:
|
|
|
wait_for_FIFO_1_Full()
|
|
|
else:
|
|
|
print_custom( "ERR *** wait_for_FIFO_Full *** unexpted value for parameter [fifo]" )
|
|
|
|
|
|
def wait_for_FIFO_0_or_1_Full():
|
|
|
counter = 0
|
|
|
sm_reg = RMAPPlugin0.Read( address_CTRL_SM, 1)
|
|
|
MEM_OUT_SM_Full = (sm_reg[0] & 0x0000000c) >> 2
|
|
|
while ( MEM_OUT_SM_Full == 0 ):
|
|
|
print_custom( "FIFO 0 or 1 not full " + str(counter))
|
|
|
counter = counter + 1
|
|
|
if counter == 10:
|
|
|
break
|
|
|
sm_reg = RMAPPlugin0.Read( address_CTRL_SM, 1)
|
|
|
MEM_OUT_SM_Full = (sm_reg[0] & 0x0000000c) >> 2
|
|
|
RMAPPlugin0.ProcessPendingEvents()
|
|
|
|
|
|
def print_reg_sm( ):
|
|
|
sm_reg = RMAPPlugin0.Read( address_CTRL_SM, 1)
|
|
|
out_ren = (sm_reg[0] & 0x00000003)
|
|
|
MEM_OUT_SM_Full = (sm_reg[0] & 0x0000000c) >> 2
|
|
|
MEM_OUT_SM_Empty = (sm_reg[0] & 0x00000030) >> 4
|
|
|
MEM_OUT_SM_Full_s= (sm_reg[0] & 0x00000040) >> 6
|
|
|
print "sm_reg = " + bin( sm_reg[0] & 0x7f ) \
|
|
|
+ ", out_ren = " + bin( out_ren ) \
|
|
|
+ ", MEM_OUT_SM_Full = " + bin( MEM_OUT_SM_Full ) \
|
|
|
+ ", MEM_OUT_SM_Empty = " + bin( MEM_OUT_SM_Empty ) \
|
|
|
+ ", MEM_OUT_SM_Full_s = " + bin( MEM_OUT_SM_Full_s )
|
|
|
RMAPPlugin0.ProcessPendingEvents()
|