Skip to content

Commit d855783

Browse files
Merge pull request efabless#27 from ax3ghazy/conflict_warnings_fix
Fix for the synthesis warnings about iomem_rdata
2 parents a864212 + 75bd878 commit d855783

File tree

1 file changed

+33
-16
lines changed

1 file changed

+33
-16
lines changed

verilog/rtl/mprj_ctrl.v

Lines changed: 33 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ module mprj_ctrl #(
124124
wire xfer_sel;
125125
wire busy;
126126
wire [`MPRJ_IO_PADS-1:0] io_ctrl_sel;
127-
wire [31:0] iomem_rdata_pre;
127+
reg [31:0] iomem_rdata_pre;
128128

129129
wire [`MPRJ_IO_PADS-1:0] mgmt_gpio_in;
130130

@@ -165,23 +165,41 @@ module mprj_ctrl #(
165165

166166
assign selected = xfer_sel || pwr_data_sel || (|io_data_sel) || (|io_ctrl_sel);
167167

168-
assign iomem_rdata_pre = (selected == 0) ? 'b0 :
169-
(xfer_sel) ? {31'b0, busy} :
170-
(pwr_data_sel) ? {{(32-`MPRJ_PWR_PADS){1'b0}},
171-
pwr_ctrl_out} : 'bz;
172-
173-
generate
174-
for (i=0; i<IO_WORDS; i=i+1) begin
175-
assign iomem_rdata_pre = (io_data_sel[i]) ?
176-
{{(31-`rtop){1'b0}}, mgmt_gpio_in[`wtop:`wbot]} : 'bz;
177-
end
168+
wire [31:0] io_data_arr[0:IO_WORDS-1];
169+
wire [31:0] io_ctrl_arr[0:`MPRJ_IO_PADS-1];
170+
generate
171+
for (i=0; i<IO_WORDS; i=i+1) begin
172+
assign io_data_arr[i] = {{(31-`rtop){1'b0}}, mgmt_gpio_in[`wtop:`wbot]};
178173

179-
for (i=0; i<`MPRJ_IO_PADS; i=i+1) begin
180-
assign iomem_rdata_pre = (io_ctrl_sel[i]) ?
181-
{{(32-IO_CTRL_BITS){1'b0}}, io_ctrl[i]} : 'bz;
182-
end
174+
end
175+
for (i=0; i<`MPRJ_IO_PADS; i=i+1) begin
176+
assign io_ctrl_arr[i] = {{(32-IO_CTRL_BITS){1'b0}}, io_ctrl[i]};
177+
end
183178
endgenerate
184179

180+
181+
integer j;
182+
always @ * begin
183+
iomem_rdata_pre = 'b0;
184+
if (xfer_sel) begin
185+
iomem_rdata_pre = {31'b0, busy};
186+
end else if (pwr_data_sel) begin
187+
iomem_rdata_pre = {{(32-`MPRJ_PWR_PADS){1'b0}}, pwr_ctrl_out};
188+
end else if (|io_data_sel) begin
189+
for (j=0; j<IO_WORDS; j=j+1) begin
190+
if (io_data_sel[j]) begin
191+
iomem_rdata_pre = io_data_arr[j];
192+
end
193+
end
194+
end else begin
195+
for (j=0; j<`MPRJ_IO_PADS; j=j+1) begin
196+
if (io_ctrl_sel[j]) begin
197+
iomem_rdata_pre = io_ctrl_arr[j];
198+
end
199+
end
200+
end
201+
end
202+
185203
// General I/O transfer
186204

187205
always @(posedge clk) begin
@@ -207,7 +225,6 @@ module mprj_ctrl #(
207225
xfer_ctrl <= 0;
208226
pwr_ctrl_out <= 0;
209227
end else begin
210-
iomem_ready <= 0;
211228
if (iomem_valid && !iomem_ready && iomem_addr[31:8] == BASE_ADR[31:8]) begin
212229
if (xfer_sel) begin
213230
if (iomem_wstrb[0]) xfer_ctrl <= iomem_wdata[0];

0 commit comments

Comments
 (0)