@@ -52,8 +52,10 @@ interface Registers;
52
52
interface ReadOnly # ( I2cBusy1) i2c_busy1;
53
53
interface Vector # ( 16 , ReadOnly # ( PortStatus)) mod_statuses;
54
54
interface Vector # ( 16 , Reg # ( PortControl)) mod_controls;
55
- interface Reg # ( PowerEn0) power_en0;
56
- interface Reg # ( PowerEn1) power_en1;
55
+ interface Reg # ( SwPowerEn0) sw_power_en0;
56
+ interface Reg # ( SwPowerEn1) sw_power_en1;
57
+ interface ReadOnly # ( PowerEn0) power_en0;
58
+ interface ReadOnly # ( PowerEn1) power_en1;
57
59
interface ReadOnly # ( PowerGood0) power_good0;
58
60
interface ReadOnly # ( PowerGood1) power_good1;
59
61
interface ReadOnly # ( PowerGoodTimeout0) power_good_timeout0;
@@ -90,6 +92,8 @@ module mkQsfpModulesTop #(Parameters parameters) (QsfpModulesTop);
90
92
Reg # ( I2cBcast0) i2c_bcast0 < - mkReg( defaultValue) ;
91
93
Reg # ( I2cBcast1) i2c_bcast1 < - mkReg( defaultValue) ;
92
94
Reg # ( I2cCtrl) i2c_ctrl < - mkDReg( defaultValue) ;
95
+ Reg # ( SwPowerEn0) sw_power_en0 < - mkReg( defaultValue) ;
96
+ Reg # ( SwPowerEn1) sw_power_en1 < - mkReg( defaultValue) ;
93
97
Reg # ( PowerEn0) power_en0 < - mkReg( defaultValue) ;
94
98
Reg # ( PowerEn1) power_en1 < - mkReg( defaultValue) ;
95
99
Reg # ( ModResetl0) mod_resetl0 < - mkReg( defaultValue) ;
@@ -105,9 +109,9 @@ module mkQsfpModulesTop #(Parameters parameters) (QsfpModulesTop);
105
109
Vector # ( 16 , Reg # ( Bool )) i2c_broadcast_enabled_r < - replicateM( mkReg( False )) ;
106
110
107
111
// Vectorize all the low speed module signals mapping into local registers.
108
- Vector # ( 16 , Bit # ( 1 )) power_en_bits =
109
- unpack( { pack( power_en1 ) , pack( power_en0 ) } ) ;
110
- Vector # ( 16 , Reg # ( Bit # ( 1 ))) power_en_bits_r < - replicateM( mkReg( 1 )) ;
112
+ Vector # ( 16 , Bit # ( 1 )) sw_power_en_bits =
113
+ unpack( { pack( sw_power_en1 ) , pack( sw_power_en0 ) } ) ;
114
+ Vector # ( 16 , Reg # ( Bit # ( 1 ))) sw_power_en_bits_r < - replicateM( mkReg( 1 )) ;
111
115
112
116
Vector # ( 16 , Bit # ( 1 )) resetl_bits =
113
117
unpack( { pack( mod_resetl1) , pack( mod_resetl0) } ) ;
@@ -117,7 +121,7 @@ module mkQsfpModulesTop #(Parameters parameters) (QsfpModulesTop);
117
121
unpack( { pack( mod_lpmode1) , pack( mod_lpmode0) } ) ;
118
122
Vector # ( 16 , Reg # ( Bit # ( 1 ))) lpmode_bits_r < - replicateM( mkReg( 1 )) ;
119
123
120
-
124
+ Vector # ( 16 , Reg # ( Bit # ( 1 ))) power_en_bits_r < - replicateM ( mkReg ( 0 )) ;
121
125
Vector # ( 16 , Reg # ( Bit # ( 1 ))) pg_bits_r < - replicateM( mkReg( 0 )) ;
122
126
Vector # ( 16 , Reg # ( Bit # ( 1 ))) pg_timeout_bits_r < - replicateM( mkReg( 0 )) ;
123
127
Vector # ( 16 , Reg # ( Bit # ( 1 ))) pg_lost_bits_r < - replicateM( mkReg( 0 )) ;
@@ -134,15 +138,16 @@ module mkQsfpModulesTop #(Parameters parameters) (QsfpModulesTop);
134
138
(* fire_when_enabled *)
135
139
rule do_module_regs;
136
140
for ( int i = 0 ; i < 16 ; i = i + 1 ) begin
137
- // control
138
- power_en_bits_r [ i] <= power_en_bits [ i] ;
139
- resetl_bits_r[ i] <= resetl_bits[ i] ;
140
- lpmode_bits_r[ i] <= lpmode_bits[ i] ;
141
+ // software control
142
+ sw_power_en_bits_r [ i] <= sw_power_en_bits [ i] ;
143
+ resetl_bits_r[ i] <= resetl_bits[ i] ;
144
+ lpmode_bits_r[ i] <= lpmode_bits[ i] ;
141
145
142
146
// pin state readbacks
143
- pg_bits_r[ i] <= pack( qsfp_ports[ i] .pg) ;
144
- modprsl_bits_r[ i] <= pack( qsfp_ports[ i] .modprsl) ;
145
- intl_bits_r[ i] <= pack( qsfp_ports[ i] .intl) ;
147
+ power_en_bits_r[ i] <= pack( qsfp_ports[ i] .pins.power_en) ;
148
+ pg_bits_r[ i] <= pack( qsfp_ports[ i] .pg) ;
149
+ modprsl_bits_r[ i] <= pack( qsfp_ports[ i] .modprsl) ;
150
+ intl_bits_r[ i] <= pack( qsfp_ports[ i] .intl) ;
146
151
147
152
// fault state readbacks
148
153
pg_timeout_bits_r[ i] <= pack( qsfp_ports[ i] .pg_timeout) ;
@@ -159,7 +164,7 @@ module mkQsfpModulesTop #(Parameters parameters) (QsfpModulesTop);
159
164
// software controlled bits
160
165
mkConnection( qsfp_ports[ i] .resetl, resetl_bits_r[ i] ) ;
161
166
mkConnection( qsfp_ports[ i] .lpmode, lpmode_bits_r[ i] ) ;
162
- mkConnection( qsfp_ports[ i] .power_en , power_en_bits_r [ i] ) ;
167
+ mkConnection( qsfp_ports[ i] .sw_power_en , sw_power_en_bits_r [ i] ) ;
163
168
164
169
// tick fan out
165
170
mkConnection( qsfp_ports[ i] .tick_1ms, tick_1ms_) ;
@@ -201,12 +206,16 @@ module mkQsfpModulesTop #(Parameters parameters) (QsfpModulesTop);
201
206
map( QsfpModuleController:: get_status, qsfp_ports) ;
202
207
interface mod_controls =
203
208
map( QsfpModuleController:: get_control, qsfp_ports) ;
204
- interface Reg power_en0 = power_en0 ;
205
- interface Reg power_en1 = power_en1 ;
209
+ interface Reg sw_power_en0 = sw_power_en0 ;
210
+ interface Reg sw_power_en1 = sw_power_en1 ;
206
211
interface Reg mod_resetl0 = mod_resetl0;
207
212
interface Reg mod_resetl1 = mod_resetl1;
208
213
interface Reg mod_lpmode0 = mod_lpmode0;
209
214
interface Reg mod_lpmode1 = mod_lpmode1;
215
+ interface ReadOnly power_en0 =
216
+ valueToReadOnly( unpack( pack( map( readReg, power_en_bits_r)) [ 7 : 0 ] )) ;
217
+ interface ReadOnly power_en1 =
218
+ valueToReadOnly( unpack( pack( map( readReg, power_en_bits_r)) [ 15 : 8 ] )) ;
210
219
interface ReadOnly power_good0 =
211
220
valueToReadOnly( unpack( pack( map( readReg, pg_bits_r)) [ 7 : 0 ] )) ;
212
221
interface ReadOnly power_good1 =
0 commit comments