blob: d4c42aec59ce227b7301d3fcff6adcbad87931e2 [file] [log] [blame]
// SPDX-FileCopyrightText: 2022 EE, UET Lahore
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// SPDX-License-Identifier: Apache-2.0
// SPDX-FileContributor: Created by Muhammad Tahir <mtahir@uet.edu.pk>
module IMem( // @[:@12666.2]
input clock, // @[:@12667.4]
input [8:0] io_addr, // @[:@12669.4]
output [31:0] io_rdata, // @[:@12669.4]
input [31:0] io_wdata, // @[:@12669.4]
input io_wr_en, // @[:@12669.4]
input io_cs // @[:@12669.4]
);
reg [31:0] imem [0:2047]; // @[imemory.scala 26:25:@12671.4]
reg [31:0] _RAND_0;
wire [31:0] imem__T_37_data; // @[imemory.scala 26:25:@12671.4]
wire [10:0] imem__T_37_addr; // @[imemory.scala 26:25:@12671.4]
wire [31:0] imem__T_36_data; // @[imemory.scala 26:25:@12671.4]
wire [10:0] imem__T_36_addr; // @[imemory.scala 26:25:@12671.4]
wire imem__T_36_mask; // @[imemory.scala 26:25:@12671.4]
wire imem__T_36_en; // @[imemory.scala 26:25:@12671.4]
wire _GEN_3; // @[imemory.scala 41:17:@12674.4]
wire [10:0] _GEN_6;
reg [10:0] imem__T_37_addr_pipe_0;
reg [31:0] _RAND_1;
assign imem__T_37_addr = imem__T_37_addr_pipe_0;
assign imem__T_37_data = imem[imem__T_37_addr]; // @[imemory.scala 26:25:@12671.4]
assign imem__T_36_data = io_wdata;
assign imem__T_36_addr = {{2'd0}, io_addr};
assign imem__T_36_mask = 1'h1;
assign imem__T_36_en = io_wr_en & io_cs;
assign _GEN_3 = 1'h1; // @[imemory.scala 41:17:@12674.4]
assign io_rdata = imem__T_37_data; // @[imemory.scala 45:12:@12679.4]
assign _GEN_6 = {{2'd0}, io_addr};
`ifdef RANDOMIZE_GARBAGE_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_INVALID_ASSIGN
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_REG_INIT
`define RANDOMIZE
`endif
`ifdef RANDOMIZE_MEM_INIT
`define RANDOMIZE
`endif
`ifndef RANDOM
`define RANDOM $random
`endif
`ifdef RANDOMIZE
integer initvar;
initial begin
`ifdef INIT_RANDOM
`INIT_RANDOM
`endif
`ifndef VERILATOR
#0.002 begin end
`endif
_RAND_0 = {1{`RANDOM}};
`ifdef RANDOMIZE_MEM_INIT
for (initvar = 0; initvar < 2048; initvar = initvar+1)
imem[initvar] = _RAND_0[31:0];
`endif // RANDOMIZE_MEM_INIT
`ifdef RANDOMIZE_REG_INIT
_RAND_1 = {1{`RANDOM}};
imem__T_37_addr_pipe_0 = _RAND_1[10:0];
`endif // RANDOMIZE_REG_INIT
end
`endif // RANDOMIZE
always @(posedge clock) begin
if(imem__T_36_en & imem__T_36_mask) begin
imem[imem__T_36_addr] <= imem__T_36_data; // @[imemory.scala 26:25:@12671.4]
end
if (_GEN_3) begin
imem__T_37_addr_pipe_0 <= _GEN_6;
end
end
endmodule