Skip to content

Commit 3f32891

Browse files
committed
mii/rgmii: Allow to put delay on data rather than clock
1 parent 3e1cd26 commit 3f32891

File tree

3 files changed

+37
-8
lines changed

3 files changed

+37
-8
lines changed

lib/nsl_mii/rgmii/gmii_to_rgmii.vhd

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ use nsl_io.diff.all;
1010

1111
entity gmii_to_rgmii is
1212
generic(
13-
clock_delay_ps_c: natural := 0
13+
clock_delay_ps_c: natural := 0;
14+
data_delay_ps_c: natural := 0
1415
);
1516
port(
1617
gmii_clk_i : in std_ulogic;
@@ -24,6 +25,7 @@ architecture beh of gmii_to_rgmii is
2425

2526
signal ddr_io_txd : std_ulogic_vector(11 downto 0);
2627
signal rgmii_group : work.rgmii.rgmii_io_group_t;
28+
signal data_ddr_s: std_ulogic_vector(4 downto 0);
2729

2830
begin
2931

@@ -41,11 +43,22 @@ begin
4143
port map(
4244
clock_i => to_diff(gmii_clk_i),
4345
d_i => ddr_io_txd,
44-
dd_o(3 downto 0) => rgmii_group.d,
45-
dd_o(4) => rgmii_group.ctl,
46+
dd_o(4 downto 0) => data_ddr_s,
4647
dd_o(5) => rgmii_group.c
4748
);
4849

50+
data_delay: nsl_io.delay.output_bus_delay_fixed
51+
generic map(
52+
width_c => 5,
53+
delay_ps_c => data_delay_ps_c,
54+
is_ddr_c => true
55+
)
56+
port map(
57+
data_i => data_ddr_s,
58+
data_o(0) => rgmii_group.ctl,
59+
data_o(1 to 4) => rgmii_group.d
60+
);
61+
4962
clock_delay: nsl_io.delay.output_delay_fixed
5063
generic map(
5164
delay_ps_c => clock_delay_ps_c

lib/nsl_mii/rgmii/rgmii.pkg.vhd

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ package rgmii is
123123

124124
component gmii_to_rgmii is
125125
generic(
126-
clock_delay_ps_c: natural := 0
126+
clock_delay_ps_c: natural := 0;
127+
data_delay_ps_c: natural := 0
127128
);
128129
port(
129130
gmii_clk_i : in std_ulogic;
@@ -135,7 +136,8 @@ package rgmii is
135136

136137
component rgmii_to_gmii is
137138
generic(
138-
clock_delay_ps_c: natural := 0
139+
clock_delay_ps_c: natural := 0;
140+
data_delay_ps_c: natural := 0
139141
);
140142
port(
141143
rgmii_i : in rgmii_io_group_t;

lib/nsl_mii/rgmii/rgmii_to_gmii.vhd

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ use nsl_io.diff.all;
1010

1111
entity rgmii_to_gmii is
1212
generic(
13-
clock_delay_ps_c: natural := 0
13+
clock_delay_ps_c: natural := 0;
14+
data_delay_ps_c: natural := 0
1415
);
1516
port(
1617
rgmii_i : in work.rgmii.rgmii_io_group_t;
@@ -26,6 +27,7 @@ architecture beh of rgmii_to_gmii is
2627
signal gmii_s : work.gmii.gmii_io_group_t;
2728
signal clock_s : std_ulogic;
2829
signal diff_clock_s : diff_pair;
30+
signal data_delayed_s: std_ulogic_vector(4 downto 0);
2931

3032
begin
3133

@@ -47,15 +49,27 @@ begin
4749
);
4850

4951
diff_clock_s <= swap(to_diff(clock_s));
52+
53+
data_delay: nsl_io.delay.input_bus_delay_fixed
54+
generic map(
55+
width_c => 5,
56+
delay_ps_c => data_delay_ps_c,
57+
is_ddr_c => true
58+
)
59+
port map(
60+
data_i(0) => rgmii_s.ctl,
61+
data_i(1 to 4) => rgmii_s.d,
62+
data_o => data_delayed_s
63+
);
5064

65+
5166
ddr_input: nsl_io.ddr.ddr_bus_input
5267
generic map(
5368
ddr_width => 5
5469
)
5570
port map(
5671
clock_i => diff_clock_s,
57-
dd_i(3 downto 0) => rgmii_s.d,
58-
dd_i(4) => rgmii_s.ctl,
72+
dd_i => data_delayed_s,
5973
d_o(3 downto 0) => gmii_s.data(3 downto 0),
6074
d_o(4) => gmii_s.en,
6175
d_o(8 downto 5) => gmii_s.data(7 downto 4),

0 commit comments

Comments
 (0)