Decoy signal

Purpose of this module:

  • Generate signal for the second AM
  • Level is 0 or 1, apply randomly on qbit(12,5ns)
  • Source of RNG is from second tRNG SwiftPro RNG

decoy_rng_fifos.v

Port descriptions

Signals nameInterfaceDirInit statusDescription
s_axis_tdata[127:0]s_axisI-tRNG data come from xdma_h2c stream
s_axis_tvalids_axisI-data valid indication from xdma_h2c stream
s_axis_treadys_axisO-ready signal from logic
s_axis_clkClockI250MHzClock of axistream
s_axis_tresetnResetI-Reset of axistream, active LOW
clk200ClockI200MHzClock for logic
tx_core_rstResetI-Using same reset with rng fifos in fastdac
rd_en_16-I-Enable signal at 10MHz, in clk200 domain
rd_en_4-I-Enable signal at 40MHz, in clk200 domain
de_rng_dout[3:0]-O-tRNG output at 40MHz

decoy.v

Port descriptions

Signals nameInterfaceDirInit statusDescription
s_axil signalss_axilIO-standard s_axil interface
s_axil_aclkClockI15MHzclock for axil interface
s_axil_aresetnResetI-reset for axil interface, active LOW
clk240ClockI240MHzclock to generate gate signal
clk80ClockI80MHzclock for fine delay this gate signal
clk200ClockI200MHzclock to generate gate signal
pps_i-I-PPS from WRS
decoy_rstResetI-reset for logic, active HIGH
rd_en_4-I-Enable signal at 40MHz, in clk200 domain
rng_value[3:0]-I-tRNG input at 40MHz
decoy_signal_n/p-O-decoy signal output to pins
decoy_signal-O-decoy signal output without delay
the others signals-O-for debug on ILA

User Parameters

ParameterValueDescription
C_S_Axil_Addr_Width12Address width of axil interface
C_S_Axil_Data_Width32Address width of axil interface
DELAY FORMATCOUNTDelay format for ODELAY3
DELAY TYPEVARIABLEDelay type for ODELAY3
DELAY VALUE50need to be between 45-65 taps for IDELAY3 calibrates correctly
REFCLK FRE300refclk for IDELAY3 and ODELAY3, default
UPDATE MODEASYNCupdate by logic control

Axil registers

  • Base address: 0x0001_6000
  • Offset address slv_reg(n) : 4*n

slv_reg0 - R/W Access - Triiger Control

BitsSignal nameHW WireAction/ValueDescription
31:1---Reserved 0
0reg_enable_oreg_enable_opull 0-1Enable register update

slv_reg1 - R/W Access - Configuration

BitsSignal nameHW WireAction/ValueDescription
31:4---Reserved 0
3:0tune_step_otune_step_o8 steps max in logicSet tune step for decoy signal, 1 step is 1 period of 240MHz

slv_reg2 - R/W Access - Triiger Control

BitsSignal nameHW WireAction/ValueDescription
31:3---Reserved 0
2trigger_enstep_slv2_otrigger_enstep_slv2_opull 0-1-0.Stay HIGH long enough
coresponding resolution
trigger fine delay slave 2
1trigger_enstep_slv1_otrigger_enstep_slv1_osame as slave 2trigger fine delay slave 1
0trigger_enstep_otrigger_enstep_osame as slave 2trigger fine delay master

slv_reg3 - R/W Access - Configuration

BitsSignal nameHW WireAction/ValueDescription
31:1---Reserved 0
0decoy_rng_mode_odecoy_rng_mode_o0: from dpram
1: from tRNG
Choose rng source

slv_reg5 - R/W Access - Configuration

BitsSignal nameHW WireAction/ValueDescription
31:15--Reserved 0
14:1decoy_params_80_oresolutionmax is 8192Set length of fine delay step on master ODELAY3
0decoy_params_80_oincrease_en1: increase
0: decrease
Set fine delay direction on master ODELAY3

slv_reg6 - R/W Access - Configuration

BitsSignal nameHW WireAction/ValueDescription
31--Reserved 0
30:17decoy_params_slv_oresolution_slv2max is 8192Set length of fine delay step on slave 2 ODELAY3
16decoy_params_slv_oincrease_en_slv21: increase
0: decrease
Set fine delay direction on slave 2 ODELAY3
14:1decoy_params_slv_oresolution_slv1max is 8192Set length of fine delay step on slave 1 ODELAY3
0decoy_params_slv_oincrease_en_slv11: increase
0: decrease
Set fine delay direction on slave 1 ODELAY3

slv_reg7 - R/W Access - Configuration

BitsSignal nameHW WireAction/ValueDescription
31:6---Reserved 0
5:0decoy_dpram_max
_addr_rng_int
decoy_dpram_max
_addr_rng_int
max is 64Set max read address for rng dpram

Write to dpram from axil

Writing to dpram from axil registers.

  • Base address: 0x0001_6000
  • Dpram offset: 4096
  • Write register(n) to dpram at: 0x0001_6000 + 4096 + 4*n
  • Each register is 32 bits

Generate signal

These are the functions to generate the signal

def decoy_reset():
    Write(0x00012000 + 20,0x01)
    time.sleep(2)
    Write(0x00012000 + 20,0x00)

Test_Decoy() function writing data for fake rng dpram and choosing rng mode.

  • Max address for dpram is 64
  • Rng mode : 0 for fake, 1 for tRNG
  • Start decoy_rng.service to if choosing tRNG mode
def Test_Decoy():
    #dpram_rng_max_addr
    Write(0x00016000 + 28, 0x10)
    #Write data to rng_dpram
    Base_seq0 = 0x00016000 + 1024
    rngseq0 = 0x00000031
    rngseq1 = 0x00000002
    Write(Base_seq0, rngseq0)
    Write(Base_seq0+4, rngseq1)
    #Write rng mode
    Write(0x00016000 + 12, 0x0)
    #enable regs values
    Write(0x00016000 , 0x0)
    Write(0x00016000 , 0x1)

Delays

Use these functions to add tune and fine delays for decoy signal. The principles is the same with TTL gate signal

  • Tune step delay is 4.3ns, 8 steps
  • Fine step delay is adjustable, maximum apro 1,4ns to 1,65ns for each master/slave
def de_calculate_delay(fine, inc):
    fine_clock_num = fine*16
    transfer = fine_clock_num<<1|inc
    transfer_bin = bin(transfer)
    transfer_hex = hex(transfer)
    return transfer_hex
def de_write_delay_master(tune, fine, inc):
    #Write tune delay
    Write(0x00016000 + 4, tune)
    #Write fine delay master 
    transfer = de_calculate_delay(fine, inc)
    Write(0x00016000 + 20,transfer)
def de_write_delay_slaves(fine1, inc1, fine2, inc2):
    Base_Add = 0x00016000 + 24
    transfer = (fine2*16)<<17|inc2<<16|(fine1*16)<<1|inc1
    Write(Base_Add, hex(transfer))
def de_params_en():
    #enable regs values
    Write(0x00016000 , 0x0)
    Write(0x00016000 , 0x1)
def de_trigger_fine_master():
    Base_Add = 0x00016000 + 8
    Write(Base_Add, 0x0)
    Write(Base_Add, 0x1)
    time.sleep(0.02)
    Write(Base_Add, 0x0)
    print("Trigger master done")
def de_trigger_fine_slv1():
    Base_Add = 0x00016000 + 8
    Write(Base_Add, 0x0)
    Write(Base_Add, 0x2)
    time.sleep(0.02)
    Write(Base_Add, 0x0)
    print("Trigger slave1 done")
def de_trigger_fine_slv2():
    Base_Add = 0x00016000 + 8
    Write(Base_Add, 0x0)
    Write(Base_Add, 0x4)
    time.sleep(0.02)
    Write(Base_Add, 0x0)
    print("Trigger slave2 done")