Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
F
FMC DEL 1ns 4cha
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
2
Issues
2
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
image/svg+xml
Discourse
Discourse
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Projects
FMC DEL 1ns 4cha
Commits
41d6ec31
Commit
41d6ec31
authored
Oct 22, 2019
by
Tomasz Wlostowski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
testbench: wip
parent
11309c73
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
245 additions
and
255 deletions
+245
-255
fd_main_regs.vh
hdl/include/regs/fd_main_regs.vh
+11
-11
svec_vme_buffers.svh
hdl/include/vme64x_bfm/svec_vme_buffers.svh
+37
-1
Manifest.py
hdl/testbench/svec_wr_top/Manifest.py
+15
-8
fdelay_board.svh
hdl/testbench/svec_wr_top/fdelay_board.svh
+30
-30
main.sv
hdl/testbench/svec_wr_top/main.sv
+7
-5
simdrv_fine_delay.svh
hdl/testbench/svec_wr_top/simdrv_fine_delay.svh
+2
-18
wave.do
hdl/testbench/svec_wr_top/wave.do
+143
-182
No files found.
hdl/include/regs/fd_main_regs.vh
View file @
41d6ec31
...
...
@@ -12,7 +12,7 @@
`define FD_GCR_INPUT_EN_OFFSET 1
`define FD_GCR_INPUT_EN 32'h00000002
`define FD_GCR_DDR_LOCKED_OFFSET 2
`define FD_GCR_DDR_LOCKED 32'h0000
CAL
0004
`define FD_GCR_DDR_LOCKED 32'h00000004
`define FD_GCR_FMC_PRESENT_OFFSET 3
`define FD_GCR_FMC_PRESENT 32'h00000008
`define ADDR_FD_TCR 8'hc
...
...
@@ -55,12 +55,6 @@
`define FD_TDCSR_ALUTRIG 32'h00000080
`define FD_TDCSR_IDELAY_CE_OFFSET 8
`define FD_TDCSR_IDELAY_CE 32'h00000100
`define FD_TDCSR_IDELAY_RST_OFFSET 9
`define FD_TDCSR_IDELAY_RST 32'h00000200
`define FD_TDCSR_IDELAY_CAL_OFFSET 10
`define FD_TDCSR_IDELAY_CAL 32'h00000400
`define FD_TDCSR_IDELAY_INC_OFFSET 11
`define FD_TDCSR_IDELAY_INC 32'h00000800
`define ADDR_FD_CALR 8'h24
`define FD_CALR_CAL_PULSE_OFFSET 0
`define FD_CALR_CAL_PULSE 32'h00000001
...
...
@@ -163,28 +157,34 @@
`define ADDR_FD_TSBR_ADVANCE 8'h78
`define FD_TSBR_ADVANCE_ADV_OFFSET 0
`define FD_TSBR_ADVANCE_ADV 32'h00000001
`define ADDR_FD_EIC_IDR 8'h80
`define ADDR_FD_FMC_SLOT_ID 8'h7c
`define FD_FMC_SLOT_ID_SLOT_ID_OFFSET 0
`define FD_FMC_SLOT_ID_SLOT_ID 32'h0000000f
`define ADDR_FD_IODELAY_ADJ 8'h80
`define FD_IODELAY_ADJ_N_TAPS_OFFSET 0
`define FD_IODELAY_ADJ_N_TAPS 32'h0000003f
`define ADDR_FD_EIC_IDR 8'ha0
`define FD_EIC_IDR_TS_BUF_NOTEMPTY_OFFSET 0
`define FD_EIC_IDR_TS_BUF_NOTEMPTY 32'h00000001
`define FD_EIC_IDR_DMTD_SPLL_OFFSET 1
`define FD_EIC_IDR_DMTD_SPLL 32'h00000002
`define FD_EIC_IDR_SYNC_STATUS_OFFSET 2
`define FD_EIC_IDR_SYNC_STATUS 32'h00000004
`define ADDR_FD_EIC_IER 8'h
8
4
`define ADDR_FD_EIC_IER 8'h
a
4
`define FD_EIC_IER_TS_BUF_NOTEMPTY_OFFSET 0
`define FD_EIC_IER_TS_BUF_NOTEMPTY 32'h00000001
`define FD_EIC_IER_DMTD_SPLL_OFFSET 1
`define FD_EIC_IER_DMTD_SPLL 32'h00000002
`define FD_EIC_IER_SYNC_STATUS_OFFSET 2
`define FD_EIC_IER_SYNC_STATUS 32'h00000004
`define ADDR_FD_EIC_IMR 8'h
8
8
`define ADDR_FD_EIC_IMR 8'h
a
8
`define FD_EIC_IMR_TS_BUF_NOTEMPTY_OFFSET 0
`define FD_EIC_IMR_TS_BUF_NOTEMPTY 32'h00000001
`define FD_EIC_IMR_DMTD_SPLL_OFFSET 1
`define FD_EIC_IMR_DMTD_SPLL 32'h00000002
`define FD_EIC_IMR_SYNC_STATUS_OFFSET 2
`define FD_EIC_IMR_SYNC_STATUS 32'h00000004
`define ADDR_FD_EIC_ISR 8'h
8
c
`define ADDR_FD_EIC_ISR 8'h
a
c
`define FD_EIC_ISR_TS_BUF_NOTEMPTY_OFFSET 0
`define FD_EIC_ISR_TS_BUF_NOTEMPTY 32'h00000001
`define FD_EIC_ISR_DMTD_SPLL_OFFSET 1
...
...
hdl/include/vme64x_bfm/svec_vme_buffers.svh
View file @
41d6ec31
...
...
@@ -162,6 +162,16 @@ function automatic bit[5:0] _gen_ga(int slot);
return
{^
slot_id
,
~
slot_id
};
endfunction
// _gen_ga
function
automatic
bit
[
4
:
0
]
_
gen_ga_convention
(
int
slot
)
;
bit
[
4
:
0
]
slot_id
=
slot
;
return
{~
slot_id
};
endfunction
// _gen_ga
function
automatic
bit
_
gen_gap_convention
(
int
slot
)
;
bit
[
4
:
0
]
slot_id
=
slot
;
return
^
slot_id
;
endfunction
// _gen_ga
`define
WIRE_VME_PINS
(
slot_id
)
\
...
...
@@ -190,4 +200,30 @@ endfunction // _gen_ga
.
VME_ADDR_OE_N_o
(
VME_ADDR_OE_N
)
\ No newline at end of file
`define
WIRE_VME_PINS_CONVENTION
(
slot_id
)
\
.
VME_AS_n_i
(
VME_AS_n
),
\
.
VME_SYSRESET_n_i
(
VME_RST_n
),
\
.
VME_WRITE_n_i
(
VME_WRITE_n
),
\
.
VME_AM_i
(
VME_AM
),
\
.
VME_DS_n_i
(
VME_DS_n
),
\
.
VME_GA_i
(
_gen_ga_convention
(
slot_id
)),
\
.
VME_GAP_i
(
_gen_gap_convention
(
slot_id
)),
\
.
VME_BERR_o
(
VME_BERR
),
\
.
VME_DTACK_n_o
(
VME_DTACK_n
),
\
.
VME_RETRY_n_o
(
VME_RETRY_n
),
\
.
VME_RETRY_OE_o
(
VME_RETRY_OE
),
\
.
VME_LWORD_n_b
(
VME_LWORD_n
),
\
.
VME_ADDR_b
(
VME_ADDR
),
\
.
VME_DATA_b
(
VME_DATA
),
\
.
VME_IRQ_o
(
VME_IRQ_n
),
\
.
VME_IACK_n_i
(
VME_IACK_n
),
\
.
VME_IACKIN_n_i
(
VME_IACKIN_n
),
\
.
VME_IACKOUT_n_o
(
VME_IACKOUT_n
),
\
.
VME_DTACK_OE_o
(
VME_DTACK_OE
),
\
.
VME_DATA_DIR_o
(
VME_DATA_DIR
),
\
.
VME_DATA_OE_N_o
(
VME_DATA_OE_N
),
\
.
VME_ADDR_DIR_o
(
VME_ADDR_DIR
),
\
.
VME_ADDR_OE_N_o
(
VME_ADDR_OE_N
)
hdl/testbench/svec_wr_top/Manifest.py
View file @
41d6ec31
ctrls
=
[
"bank3_32b_32b"
]
action
=
"simulation"
target
=
"xilinx"
fetchto
=
"../../ip_cores"
sim_tool
=
"modelsim"
sim_top
=
"main"
include_dirs
=
[
"../../include/vme64x_bfm"
,
"../../include/wb"
,
"../../include"
,
"../../ip_cores/general-cores/modules/wishbone/wb_spi/"
,
"../../ip_cores/general-cores/modules/wishbone/wb_lm32/src/"
]
syn_device
=
"xc6slx45t"
sim_tool
=
"modelsim"
sim_top
=
"main"
top_module
=
"main"
files
=
[
"main.sv"
,
"buildinfo_pkg.vhd"
]
include_dirs
=
[
"../../include/wb"
,
"../../include/vme64x_bfm"
,
"../../include"
];
syn_device
=
"xc6slx150t"
files
=
[
"main.sv"
]
modules
=
{
"local"
:
[
"../../top/svec"
]
}
modules
=
{
"local"
:
[
"../../top/svec"
]}
#try:
exec
(
open
(
fetchto
+
"/general-cores/tools/gen_buildinfo.py"
)
.
read
())
#except:
# pass
hdl/testbench/svec_wr_top/fdelay_board.svh
View file @
41d6ec31
...
...
@@ -223,34 +223,34 @@ module fdelay_board (
endmodule
// main
`define
WIRE_FINE_DELAY_PINS
(
fmc_index
,
iface
)
\
.
f
d
``
fmc_index
``
_tdc_start_p_i
(
iface
.
core
.
tdc_start_p
),
\
.
f
d
``
fmc_index
``
_tdc_start_n_i
(
iface
.
core
.
tdc_start_n
),
\
.
f
d
``
fmc_index
``
_clk_ref_p_i
(
iface
.
core
.
clk_ref_p
),
\
.
f
d
``
fmc_index
``
_clk_ref_n_i
(
iface
.
core
.
clk_ref_n
),
\
.
f
d
``
fmc_index
``
_trig_a_i
(
iface
.
core
.
trig_a
),
\
.
f
d
``
fmc_index
``
_tdc_cal_pulse_o
(
iface
.
core
.
tdc_cal_pulse
),
\
.
f
d
``
fmc_index
``
_tdc_d_b
(
iface
.
core
.
tdc_d
),
\
.
f
d
``
fmc_index
``
_tdc_emptyf_i
(
iface
.
core
.
tdc_emptyf
),
\
.
f
d
``
fmc_index
``
_tdc_alutrigger_o
(
iface
.
core
.
tdc_alutrigger
),
\
.
f
d
``
fmc_index
``
_tdc_wr_n_o
(
iface
.
core
.
tdc_wr_n
),
\
.
f
d
``
fmc_index
``
_tdc_rd_n_o
(
iface
.
core
.
tdc_rd_n
),
\
.
f
d
``
fmc_index
``
_tdc_oe_n_o
(
iface
.
core
.
tdc_oe_n
),
\
.
f
d
``
fmc_index
``
_led_trig_o
(
iface
.
core
.
led_trig
),
\
.
f
d
``
fmc_index
``
_tdc_start_dis_o
(
iface
.
core
.
tdc_start_dis
),
\
.
f
d
``
fmc_index
``
_tdc_stop_dis_o
(
iface
.
core
.
tdc_stop_dis
),
\
.
f
d
``
fmc_index
``
_spi_cs_dac_n_o
(
iface
.
core
.
spi_cs_dac_n
),
\
.
f
d
``
fmc_index
``
_spi_cs_pll_n_o
(
iface
.
core
.
spi_cs_pll_n
),
\
.
f
d
``
fmc_index
``
_spi_cs_gpio_n_o
(
iface
.
core
.
spi_cs_gpio_n
),
\
.
f
d
``
fmc_index
``
_spi_sclk_o
(
iface
.
core
.
spi_sclk
),
\
.
f
d
``
fmc_index
``
_spi_mosi_o
(
iface
.
core
.
spi_mosi
),
\
.
f
d
``
fmc_index
``
_spi_miso_i
(
iface
.
core
.
spi_miso
),
\
.
f
d
``
fmc_index
``
_delay_len_o
(
iface
.
core
.
delay_len
),
\
.
f
d
``
fmc_index
``
_delay_val_o
(
iface
.
core
.
delay_val
),
\
.
f
d
``
fmc_index
``
_delay_pulse_o
(
iface
.
core
.
delay_pulse
),
\
.
f
d
``
fmc_index
``
_dmtd_clk_o
(
iface
.
core
.
dmtd_clk
),
\
.
f
d
``
fmc_index
``
_dmtd_fb_in_i
(
iface
.
core
.
dmtd_fb_in
),
\
.
f
d
``
fmc_index
``
_dmtd_fb_out_i
(
iface
.
core
.
dmtd_fb_out
),
\
.
f
d
``
fmc_index
``
_pll_status_i
(
iface
.
core
.
pll_status
),
\
.
f
d
``
fmc_index
``
_ext_rst_n_o
(
iface
.
core
.
ext_rst_n
),
\
.
f
d
``
fmc_index
``
_onewire_b
(
iface
.
core
.
onewire
)
.
f
mc
``
fmc_index
``
_fd
_tdc_start_p_i
(
iface
.
core
.
tdc_start_p
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_start_n_i
(
iface
.
core
.
tdc_start_n
),
\
.
f
mc
``
fmc_index
``
_fd
_clk_ref_p_i
(
iface
.
core
.
clk_ref_p
),
\
.
f
mc
``
fmc_index
``
_fd
_clk_ref_n_i
(
iface
.
core
.
clk_ref_n
),
\
.
f
mc
``
fmc_index
``
_fd
_trig_a_i
(
iface
.
core
.
trig_a
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_cal_pulse_o
(
iface
.
core
.
tdc_cal_pulse
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_d_b
(
iface
.
core
.
tdc_d
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_emptyf_i
(
iface
.
core
.
tdc_emptyf
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_alutrigger_o
(
iface
.
core
.
tdc_alutrigger
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_wr_n_o
(
iface
.
core
.
tdc_wr_n
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_rd_n_o
(
iface
.
core
.
tdc_rd_n
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_oe_n_o
(
iface
.
core
.
tdc_oe_n
),
\
.
f
mc
``
fmc_index
``
_fd
_led_trig_o
(
iface
.
core
.
led_trig
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_start_dis_o
(
iface
.
core
.
tdc_start_dis
),
\
.
f
mc
``
fmc_index
``
_fd
_tdc_stop_dis_o
(
iface
.
core
.
tdc_stop_dis
),
\
.
f
mc
``
fmc_index
``
_fd
_spi_cs_dac_n_o
(
iface
.
core
.
spi_cs_dac_n
),
\
.
f
mc
``
fmc_index
``
_fd
_spi_cs_pll_n_o
(
iface
.
core
.
spi_cs_pll_n
),
\
.
f
mc
``
fmc_index
``
_fd
_spi_cs_gpio_n_o
(
iface
.
core
.
spi_cs_gpio_n
),
\
.
f
mc
``
fmc_index
``
_fd
_spi_sclk_o
(
iface
.
core
.
spi_sclk
),
\
.
f
mc
``
fmc_index
``
_fd
_spi_mosi_o
(
iface
.
core
.
spi_mosi
),
\
.
f
mc
``
fmc_index
``
_fd
_spi_miso_i
(
iface
.
core
.
spi_miso
),
\
.
f
mc
``
fmc_index
``
_fd
_delay_len_o
(
iface
.
core
.
delay_len
),
\
.
f
mc
``
fmc_index
``
_fd
_delay_val_o
(
iface
.
core
.
delay_val
),
\
.
f
mc
``
fmc_index
``
_fd
_delay_pulse_o
(
iface
.
core
.
delay_pulse
),
\
.
f
mc
``
fmc_index
``
_fd
_dmtd_clk_o
(
iface
.
core
.
dmtd_clk
),
\
.
f
mc
``
fmc_index
``
_fd
_dmtd_fb_in_i
(
iface
.
core
.
dmtd_fb_in
),
\
.
f
mc
``
fmc_index
``
_fd
_dmtd_fb_out_i
(
iface
.
core
.
dmtd_fb_out
),
\
.
f
mc
``
fmc_index
``
_fd
_pll_status_i
(
iface
.
core
.
pll_status
),
\
.
f
mc
``
fmc_index
``
_fd
_ext_rst_n_o
(
iface
.
core
.
ext_rst_n
),
\
.
f
mc
``
fmc_index
``
_fd
_onewire_b
(
iface
.
core
.
onewire
)
hdl/testbench/svec_wr_top/main.sv
View file @
41d6ec31
...
...
@@ -105,7 +105,6 @@ module main;
`DECLARE_VME_BUFFERS
(
VME
.
slave
)
;
svec_top
#(
.
g_with_wr_phy
(
0
)
,
.
g_simulation
(
1
)
)
DUT
(
.
clk_125m_pllref_p_i
(
clk_125m
)
,
...
...
@@ -116,7 +115,7 @@ module main;
.
rst_n_i
(
rst_n
)
,
`WIRE_VME_PINS
(
8
)
,
`WIRE_VME_PINS
_CONVENTION
(
8
)
,
`WIRE_FINE_DELAY_PINS
(
0
,
I_fmc0
)
,
`WIRE_FINE_DELAY_PINS
(
1
,
I_fmc1
)
)
;
...
...
@@ -169,6 +168,7 @@ module main;
Timestamp
dly
,
t_start
;
CSimDrv_FineDelay
drv0
;
CSimDrv_FineDelay
drv1
;
uint64_t
d
;
#
20u
s
;
...
...
@@ -181,17 +181,19 @@ module main;
drv0
=
new
(
acc
,
'h80010000
)
;
drv0
.
init
()
;
drv1
=
new
(
acc
,
'h80020000
)
;
drv1
.
init
()
;
drv0
.
set_idelay_taps
(
30
)
;
drv0
.
set_idelay_taps
(
5
)
;
t_start
=
new
;
/*
t_start=new;
drv0.get_time(t_start);
t_start.coarse += 20000;
drv0.config_output(0, CSimDrv_FineDelay::PULSE_GEN, 1, t_start, 200000, 1001000, -1);
drv0.config_output(1, CSimDrv_FineDelay::PULSE_GEN, 1, t_start, 200000, 1001100, -1);
drv0.config_output(2, CSimDrv_FineDelay::PULSE_GEN, 1, t_start, 200000, 1001200, -1);
drv0
.
config_output
(
3
,
CSimDrv_FineDelay
::
PULSE_GEN
,
1
,
t_start
,
200000
,
1001300
,
-
1
)
;
drv0.config_output(3, CSimDrv_FineDelay::PULSE_GEN, 1, t_start, 200000, 1001300, -1);
*/
$
display
(
"Init done"
)
;
...
...
hdl/testbench/svec_wr_top/simdrv_fine_delay.svh
View file @
41d6ec31
...
...
@@ -42,26 +42,10 @@ class CSimDrv_FineDelay;
task
set_idelay_taps
(
int
taps
)
;
uint64_t
tdcsr
;
readl
(
`ADDR_FD_TDCSR
,
tdcsr
)
;
// calibrate the iodelay
writel
(
`ADDR_FD_TDCSR
,
tdcsr
|
`FD_TDCSR_IDELAY_CAL
)
;
#
3u
s
;
writel
(
`ADDR_FD_TDCSR
,
tdcsr
)
;
$
display
(
"Set IDELAY tap count = %d"
,
taps
)
;
$
display
(
"Set Idelay taps : %d
\n
"
,
taps
)
;
writel
(
`ADDR_FD_TDCSR
,
tdcsr
|
`FD_TDCSR_IDELAY_RST
)
;
writel
(
`ADDR_FD_TDCSR
,
tdcsr
|
`FD_TDCSR_IDELAY_INC
)
;
for
(
int
i
=
0
;
i
<
taps
;
i
++
)
begin
writel
(
`ADDR_FD_TDCSR
,
tdcsr
|
`FD_TDCSR_IDELAY_CE
|
`FD_TDCSR_IDELAY_INC
)
;
#
1u
s
;
end
writel
(
`ADDR_FD_IODELAY_ADJ
,
taps
)
;
endtask
// set_idelay_taps
...
...
hdl/testbench/svec_wr_top/wave.do
View file @
41d6ec31
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment