OpenCores
URL https://opencores.org/ocsvn/an-fpga-implementation-of-low-latency-noc-based-mpsoc/an-fpga-implementation-of-low-latency-noc-based-mpsoc/trunk

Subversion Repositories an-fpga-implementation-of-low-latency-noc-based-mpsoc

[/] [an-fpga-implementation-of-low-latency-noc-based-mpsoc/] [trunk/] [mpsoc/] [rtl/] [src_peripheral/] [ram/] [byte_enabled_generic_ram.sv] - Blame information for rev 48

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 48 alirezamon
// Quartus II SystemVerilog Template
2
//
3
// True Dual-Port RAM with different read/write addresses and single read/write clock
4
// and with a control for writing single bytes into the memory word; byte enable
5
 
6
// Read during write produces old data on ports A and B and old data on mixed ports
7
// For device families that do not support this mode (e.g. Stratix V) the ram is not inferred
8
 
9
// synthesis translate_off
10
`timescale 1ns / 1ps
11
// synthesis translate_on
12
 
13
 
14
module byte_enabled_true_dual_port_ram  #(
15
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v format
16
                parameter INITIAL_EN= "NO",
17
                parameter int
18
                BYTE_WIDTH = 8,
19
                ADDRESS_WIDTH = 6,
20
                BYTES = 4,
21
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
22
)
23
(
24
        input [ADDRESS_WIDTH-1:0] addr1,
25
        input [ADDRESS_WIDTH-1:0] addr2,
26
        input [BYTES-1:0] be1,
27
        input [BYTES-1:0] be2,
28
        input [DATA_WIDTH_R-1:0] data_in1,
29
        input [DATA_WIDTH_R-1:0] data_in2,
30
        input we1, we2, clk,
31
        output [DATA_WIDTH_R-1:0] data_out1,
32
        output [DATA_WIDTH_R-1:0] data_out2
33
);
34
 
35
generate
36
if (BYTES==1) begin : byte_en1
37
        byte_enabled_true_dual_port_ram_1
38
                #(
39
                .BYTE_WIDTH(BYTE_WIDTH),
40
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
41
                 .INITIAL_EN(INITIAL_EN),
42
                 .INIT_FILE(INIT_FILE)
43
        )
44
        ram_inst
45
        (
46
                .addr1(addr1),
47
                .addr2(addr2),
48
                .be1(be1),
49
                .be2(be2),
50
                .data_in1(data_in1),
51
                .data_in2(data_in2),
52
                .we1(we1),
53
                .we2(we2),
54
                .clk(clk),
55
                .data_out1(data_out1),
56
                .data_out2(data_out2)
57
        );
58
end
59
if (BYTES==2) begin : byte_en2
60
        byte_enabled_true_dual_port_ram_2
61
                #(
62
                .BYTE_WIDTH(BYTE_WIDTH),
63
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
64
                 .INITIAL_EN(INITIAL_EN),
65
                 .INIT_FILE(INIT_FILE)
66
        )
67
        ram_inst
68
        (
69
                .addr1(addr1),
70
                .addr2(addr2),
71
                .be1(be1),
72
                .be2(be2),
73
                .data_in1(data_in1),
74
                .data_in2(data_in2),
75
                .we1(we1),
76
                .we2(we2),
77
                .clk(clk),
78
                .data_out1(data_out1),
79
                .data_out2(data_out2)
80
        );
81
end
82
if (BYTES==3) begin : byte_en3
83
        byte_enabled_true_dual_port_ram_3
84
                #(
85
                .BYTE_WIDTH(BYTE_WIDTH),
86
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
87
                 .INITIAL_EN(INITIAL_EN),
88
                 .INIT_FILE(INIT_FILE)
89
        )
90
        ram_inst
91
        (
92
                .addr1(addr1),
93
                .addr2(addr2),
94
                .be1(be1),
95
                .be2(be2),
96
                .data_in1(data_in1),
97
                .data_in2(data_in2),
98
                .we1(we1),
99
                .we2(we2),
100
                .clk(clk),
101
                .data_out1(data_out1),
102
                .data_out2(data_out2)
103
        );
104
end
105
if (BYTES==4) begin : byte_en4
106
        byte_enabled_true_dual_port_ram_4
107
                #(
108
                .BYTE_WIDTH(BYTE_WIDTH),
109
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
110
                 .INITIAL_EN(INITIAL_EN),
111
                 .INIT_FILE(INIT_FILE)
112
        )
113
        ram_inst
114
        (
115
                .addr1(addr1),
116
                .addr2(addr2),
117
                .be1(be1),
118
                .be2(be2),
119
                .data_in1(data_in1),
120
                .data_in2(data_in2),
121
                .we1(we1),
122
                .we2(we2),
123
                .clk(clk),
124
                .data_out1(data_out1),
125
                .data_out2(data_out2)
126
        );
127
end
128
if (BYTES==5) begin : byte_en5
129
        byte_enabled_true_dual_port_ram_5
130
                #(
131
                .BYTE_WIDTH(BYTE_WIDTH),
132
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
133
                 .INITIAL_EN(INITIAL_EN),
134
                 .INIT_FILE(INIT_FILE)
135
        )
136
        ram_inst
137
        (
138
                .addr1(addr1),
139
                .addr2(addr2),
140
                .be1(be1),
141
                .be2(be2),
142
                .data_in1(data_in1),
143
                .data_in2(data_in2),
144
                .we1(we1),
145
                .we2(we2),
146
                .clk(clk),
147
                .data_out1(data_out1),
148
                .data_out2(data_out2)
149
        );
150
end
151
if (BYTES==6) begin : byte_en6
152
        byte_enabled_true_dual_port_ram_6
153
                #(
154
                .BYTE_WIDTH(BYTE_WIDTH),
155
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
156
                 .INITIAL_EN(INITIAL_EN),
157
                 .INIT_FILE(INIT_FILE)
158
        )
159
        ram_inst
160
        (
161
                .addr1(addr1),
162
                .addr2(addr2),
163
                .be1(be1),
164
                .be2(be2),
165
                .data_in1(data_in1),
166
                .data_in2(data_in2),
167
                .we1(we1),
168
                .we2(we2),
169
                .clk(clk),
170
                .data_out1(data_out1),
171
                .data_out2(data_out2)
172
        );
173
end
174
if (BYTES==7) begin : byte_en7
175
        byte_enabled_true_dual_port_ram_7
176
                #(
177
                .BYTE_WIDTH(BYTE_WIDTH),
178
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
179
                 .INITIAL_EN(INITIAL_EN),
180
                 .INIT_FILE(INIT_FILE)
181
        )
182
        ram_inst
183
        (
184
                .addr1(addr1),
185
                .addr2(addr2),
186
                .be1(be1),
187
                .be2(be2),
188
                .data_in1(data_in1),
189
                .data_in2(data_in2),
190
                .we1(we1),
191
                .we2(we2),
192
                .clk(clk),
193
                .data_out1(data_out1),
194
                .data_out2(data_out2)
195
        );
196
end
197
if (BYTES==8) begin : byte_en8
198
        byte_enabled_true_dual_port_ram_8
199
                #(
200
                .BYTE_WIDTH(BYTE_WIDTH),
201
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
202
                 .INITIAL_EN(INITIAL_EN),
203
                 .INIT_FILE(INIT_FILE)
204
        )
205
        ram_inst
206
        (
207
                .addr1(addr1),
208
                .addr2(addr2),
209
                .be1(be1),
210
                .be2(be2),
211
                .data_in1(data_in1),
212
                .data_in2(data_in2),
213
                .we1(we1),
214
                .we2(we2),
215
                .clk(clk),
216
                .data_out1(data_out1),
217
                .data_out2(data_out2)
218
        );
219
end
220
if (BYTES==9) begin : byte_en9
221
        byte_enabled_true_dual_port_ram_9
222
                #(
223
                .BYTE_WIDTH(BYTE_WIDTH),
224
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
225
                 .INITIAL_EN(INITIAL_EN),
226
                 .INIT_FILE(INIT_FILE)
227
        )
228
        ram_inst
229
        (
230
                .addr1(addr1),
231
                .addr2(addr2),
232
                .be1(be1),
233
                .be2(be2),
234
                .data_in1(data_in1),
235
                .data_in2(data_in2),
236
                .we1(we1),
237
                .we2(we2),
238
                .clk(clk),
239
                .data_out1(data_out1),
240
                .data_out2(data_out2)
241
        );
242
end
243
if (BYTES==10) begin : byte_en10
244
        byte_enabled_true_dual_port_ram_10
245
                #(
246
                .BYTE_WIDTH(BYTE_WIDTH),
247
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
248
                 .INITIAL_EN(INITIAL_EN),
249
                 .INIT_FILE(INIT_FILE)
250
        )
251
        ram_inst
252
        (
253
                .addr1(addr1),
254
                .addr2(addr2),
255
                .be1(be1),
256
                .be2(be2),
257
                .data_in1(data_in1),
258
                .data_in2(data_in2),
259
                .we1(we1),
260
                .we2(we2),
261
                .clk(clk),
262
                .data_out1(data_out1),
263
                .data_out2(data_out2)
264
        );
265
end
266
if (BYTES==11) begin : byte_en11
267
        byte_enabled_true_dual_port_ram_11
268
                #(
269
                .BYTE_WIDTH(BYTE_WIDTH),
270
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
271
                 .INITIAL_EN(INITIAL_EN),
272
                 .INIT_FILE(INIT_FILE)
273
        )
274
        ram_inst
275
        (
276
                .addr1(addr1),
277
                .addr2(addr2),
278
                .be1(be1),
279
                .be2(be2),
280
                .data_in1(data_in1),
281
                .data_in2(data_in2),
282
                .we1(we1),
283
                .we2(we2),
284
                .clk(clk),
285
                .data_out1(data_out1),
286
                .data_out2(data_out2)
287
        );
288
end
289
if (BYTES==12) begin : byte_en12
290
        byte_enabled_true_dual_port_ram_12
291
                #(
292
                .BYTE_WIDTH(BYTE_WIDTH),
293
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
294
                 .INITIAL_EN(INITIAL_EN),
295
                 .INIT_FILE(INIT_FILE)
296
        )
297
        ram_inst
298
        (
299
                .addr1(addr1),
300
                .addr2(addr2),
301
                .be1(be1),
302
                .be2(be2),
303
                .data_in1(data_in1),
304
                .data_in2(data_in2),
305
                .we1(we1),
306
                .we2(we2),
307
                .clk(clk),
308
                .data_out1(data_out1),
309
                .data_out2(data_out2)
310
        );
311
end
312
if (BYTES==13) begin : byte_en13
313
        byte_enabled_true_dual_port_ram_13
314
                #(
315
                .BYTE_WIDTH(BYTE_WIDTH),
316
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
317
                 .INITIAL_EN(INITIAL_EN),
318
                 .INIT_FILE(INIT_FILE)
319
        )
320
        ram_inst
321
        (
322
                .addr1(addr1),
323
                .addr2(addr2),
324
                .be1(be1),
325
                .be2(be2),
326
                .data_in1(data_in1),
327
                .data_in2(data_in2),
328
                .we1(we1),
329
                .we2(we2),
330
                .clk(clk),
331
                .data_out1(data_out1),
332
                .data_out2(data_out2)
333
        );
334
end
335
if (BYTES==14) begin : byte_en14
336
        byte_enabled_true_dual_port_ram_14
337
                #(
338
                .BYTE_WIDTH(BYTE_WIDTH),
339
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
340
                 .INITIAL_EN(INITIAL_EN),
341
                 .INIT_FILE(INIT_FILE)
342
        )
343
        ram_inst
344
        (
345
                .addr1(addr1),
346
                .addr2(addr2),
347
                .be1(be1),
348
                .be2(be2),
349
                .data_in1(data_in1),
350
                .data_in2(data_in2),
351
                .we1(we1),
352
                .we2(we2),
353
                .clk(clk),
354
                .data_out1(data_out1),
355
                .data_out2(data_out2)
356
        );
357
end
358
if (BYTES==15) begin : byte_en15
359
        byte_enabled_true_dual_port_ram_15
360
                #(
361
                .BYTE_WIDTH(BYTE_WIDTH),
362
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
363
                 .INITIAL_EN(INITIAL_EN),
364
                 .INIT_FILE(INIT_FILE)
365
        )
366
        ram_inst
367
        (
368
                .addr1(addr1),
369
                .addr2(addr2),
370
                .be1(be1),
371
                .be2(be2),
372
                .data_in1(data_in1),
373
                .data_in2(data_in2),
374
                .we1(we1),
375
                .we2(we2),
376
                .clk(clk),
377
                .data_out1(data_out1),
378
                .data_out2(data_out2)
379
        );
380
end
381
endgenerate
382
endmodule:  byte_enabled_true_dual_port_ram
383
 
384
module byte_enabled_true_dual_port_ram_1        #(
385
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
386
                parameter INITIAL_EN= "NO",
387
                parameter int
388
                BYTE_WIDTH = 8,
389
                ADDRESS_WIDTH = 6,
390
                BYTES = 1,
391
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
392
)
393
(
394
        input [ADDRESS_WIDTH-1:0] addr1,
395
        input [ADDRESS_WIDTH-1:0] addr2,
396
        input [BYTES-1:0] be1,
397
        input [BYTES-1:0] be2,
398
        input [DATA_WIDTH_R-1:0] data_in1,
399
        input [DATA_WIDTH_R-1:0] data_in2,
400
        input we1, we2, clk,
401
        output [DATA_WIDTH_R-1:0] data_out1,
402
        output [DATA_WIDTH_R-1:0] data_out2
403
);
404
 
405
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
406
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
407
 
408
genvar i;
409
generate
410
for (i=0;i
411
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
412
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
413
end
414
endgenerate
415
 
416
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
417
 
418
        // model the RAM with two dimensional packed array
419
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
420
 
421
        generate
422
                if (INITIAL_EN ==  "YES") begin : init
423
                   initial $readmemh(INIT_FILE,ram);
424
                end
425
        endgenerate
426
 
427
        reg [DATA_WIDTH_R-1:0] data_reg1;
428
        reg [DATA_WIDTH_R-1:0] data_reg2;
429
 
430
        // port A
431
        integer k;
432
 
433
        always@(posedge clk)
434
        begin
435
                if(we1) begin
436
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
437
 
438
                end
439
        data_reg1 <= ram[addr1];
440
        end
441
 
442
        assign data_out1 = data_reg1;
443
 
444
        // port B
445
        always@(posedge clk)
446
        begin
447
                if(we2) begin
448
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
449
 
450
 
451
                end
452
        data_reg2 <= ram[addr2];
453
        end
454
 
455
        assign data_out2 = data_reg2;
456
 
457
endmodule : byte_enabled_true_dual_port_ram_1
458
 
459
module byte_enabled_true_dual_port_ram_2        #(
460
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
461
                parameter INITIAL_EN= "NO",
462
                parameter int
463
                BYTE_WIDTH = 8,
464
                ADDRESS_WIDTH = 6,
465
                BYTES = 2,
466
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
467
)
468
(
469
        input [ADDRESS_WIDTH-1:0] addr1,
470
        input [ADDRESS_WIDTH-1:0] addr2,
471
        input [BYTES-1:0] be1,
472
        input [BYTES-1:0] be2,
473
        input [DATA_WIDTH_R-1:0] data_in1,
474
        input [DATA_WIDTH_R-1:0] data_in2,
475
        input we1, we2, clk,
476
        output [DATA_WIDTH_R-1:0] data_out1,
477
        output [DATA_WIDTH_R-1:0] data_out2
478
);
479
 
480
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
481
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
482
 
483
genvar i;
484
generate
485
for (i=0;i
486
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
487
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
488
end
489
endgenerate
490
 
491
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
492
 
493
        // model the RAM with two dimensional packed array
494
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
495
 
496
        generate
497
                if (INITIAL_EN ==  "YES") begin : init
498
                   initial $readmemh(INIT_FILE,ram);
499
                end
500
        endgenerate
501
 
502
        reg [DATA_WIDTH_R-1:0] data_reg1;
503
        reg [DATA_WIDTH_R-1:0] data_reg2;
504
 
505
        // port A
506
        integer k;
507
 
508
        always@(posedge clk)
509
        begin
510
                if(we1) begin
511
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
512
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
513
 
514
                end
515
        data_reg1 <= ram[addr1];
516
        end
517
 
518
        assign data_out1 = data_reg1;
519
 
520
        // port B
521
        always@(posedge clk)
522
        begin
523
                if(we2) begin
524
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
525
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
526
 
527
 
528
                end
529
        data_reg2 <= ram[addr2];
530
        end
531
 
532
        assign data_out2 = data_reg2;
533
 
534
endmodule : byte_enabled_true_dual_port_ram_2
535
 
536
module byte_enabled_true_dual_port_ram_3        #(
537
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
538
                parameter INITIAL_EN= "NO",
539
                parameter int
540
                BYTE_WIDTH = 8,
541
                ADDRESS_WIDTH = 6,
542
                BYTES = 3,
543
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
544
)
545
(
546
        input [ADDRESS_WIDTH-1:0] addr1,
547
        input [ADDRESS_WIDTH-1:0] addr2,
548
        input [BYTES-1:0] be1,
549
        input [BYTES-1:0] be2,
550
        input [DATA_WIDTH_R-1:0] data_in1,
551
        input [DATA_WIDTH_R-1:0] data_in2,
552
        input we1, we2, clk,
553
        output [DATA_WIDTH_R-1:0] data_out1,
554
        output [DATA_WIDTH_R-1:0] data_out2
555
);
556
 
557
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
558
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
559
 
560
genvar i;
561
generate
562
for (i=0;i
563
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
564
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
565
end
566
endgenerate
567
 
568
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
569
 
570
        // model the RAM with two dimensional packed array
571
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
572
 
573
        generate
574
                if (INITIAL_EN ==  "YES") begin : init
575
                   initial $readmemh(INIT_FILE,ram);
576
                end
577
        endgenerate
578
 
579
        reg [DATA_WIDTH_R-1:0] data_reg1;
580
        reg [DATA_WIDTH_R-1:0] data_reg2;
581
 
582
        // port A
583
        integer k;
584
 
585
        always@(posedge clk)
586
        begin
587
                if(we1) begin
588
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
589
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
590
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
591
 
592
                end
593
        data_reg1 <= ram[addr1];
594
        end
595
 
596
        assign data_out1 = data_reg1;
597
 
598
        // port B
599
        always@(posedge clk)
600
        begin
601
                if(we2) begin
602
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
603
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
604
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
605
 
606
 
607
                end
608
        data_reg2 <= ram[addr2];
609
        end
610
 
611
        assign data_out2 = data_reg2;
612
 
613
endmodule : byte_enabled_true_dual_port_ram_3
614
 
615
module byte_enabled_true_dual_port_ram_4        #(
616
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
617
                parameter INITIAL_EN= "NO",
618
                parameter int
619
                BYTE_WIDTH = 8,
620
                ADDRESS_WIDTH = 6,
621
                BYTES = 4,
622
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
623
)
624
(
625
        input [ADDRESS_WIDTH-1:0] addr1,
626
        input [ADDRESS_WIDTH-1:0] addr2,
627
        input [BYTES-1:0] be1,
628
        input [BYTES-1:0] be2,
629
        input [DATA_WIDTH_R-1:0] data_in1,
630
        input [DATA_WIDTH_R-1:0] data_in2,
631
        input we1, we2, clk,
632
        output [DATA_WIDTH_R-1:0] data_out1,
633
        output [DATA_WIDTH_R-1:0] data_out2
634
);
635
 
636
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
637
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
638
 
639
genvar i;
640
generate
641
for (i=0;i
642
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
643
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
644
end
645
endgenerate
646
 
647
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
648
 
649
        // model the RAM with two dimensional packed array
650
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
651
 
652
        generate
653
                if (INITIAL_EN ==  "YES") begin : init
654
                   initial $readmemh(INIT_FILE,ram);
655
                end
656
        endgenerate
657
 
658
        reg [DATA_WIDTH_R-1:0] data_reg1;
659
        reg [DATA_WIDTH_R-1:0] data_reg2;
660
 
661
        // port A
662
        integer k;
663
 
664
        always@(posedge clk)
665
        begin
666
                if(we1) begin
667
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
668
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
669
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
670
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
671
 
672
                end
673
        data_reg1 <= ram[addr1];
674
        end
675
 
676
        assign data_out1 = data_reg1;
677
 
678
        // port B
679
        always@(posedge clk)
680
        begin
681
                if(we2) begin
682
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
683
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
684
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
685
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
686
 
687
 
688
                end
689
        data_reg2 <= ram[addr2];
690
        end
691
 
692
        assign data_out2 = data_reg2;
693
 
694
endmodule : byte_enabled_true_dual_port_ram_4
695
 
696
module byte_enabled_true_dual_port_ram_5        #(
697
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
698
                parameter INITIAL_EN= "NO",
699
                parameter int
700
                BYTE_WIDTH = 8,
701
                ADDRESS_WIDTH = 6,
702
                BYTES = 5,
703
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
704
)
705
(
706
        input [ADDRESS_WIDTH-1:0] addr1,
707
        input [ADDRESS_WIDTH-1:0] addr2,
708
        input [BYTES-1:0] be1,
709
        input [BYTES-1:0] be2,
710
        input [DATA_WIDTH_R-1:0] data_in1,
711
        input [DATA_WIDTH_R-1:0] data_in2,
712
        input we1, we2, clk,
713
        output [DATA_WIDTH_R-1:0] data_out1,
714
        output [DATA_WIDTH_R-1:0] data_out2
715
);
716
 
717
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
718
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
719
 
720
genvar i;
721
generate
722
for (i=0;i
723
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
724
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
725
end
726
endgenerate
727
 
728
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
729
 
730
        // model the RAM with two dimensional packed array
731
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
732
 
733
        generate
734
                if (INITIAL_EN ==  "YES") begin : init
735
                   initial $readmemh(INIT_FILE,ram);
736
                end
737
        endgenerate
738
 
739
        reg [DATA_WIDTH_R-1:0] data_reg1;
740
        reg [DATA_WIDTH_R-1:0] data_reg2;
741
 
742
        // port A
743
        integer k;
744
 
745
        always@(posedge clk)
746
        begin
747
                if(we1) begin
748
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
749
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
750
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
751
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
752
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
753
 
754
                end
755
        data_reg1 <= ram[addr1];
756
        end
757
 
758
        assign data_out1 = data_reg1;
759
 
760
        // port B
761
        always@(posedge clk)
762
        begin
763
                if(we2) begin
764
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
765
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
766
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
767
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
768
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
769
 
770
 
771
                end
772
        data_reg2 <= ram[addr2];
773
        end
774
 
775
        assign data_out2 = data_reg2;
776
 
777
endmodule : byte_enabled_true_dual_port_ram_5
778
 
779
module byte_enabled_true_dual_port_ram_6        #(
780
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
781
                parameter INITIAL_EN= "NO",
782
                parameter int
783
                BYTE_WIDTH = 8,
784
                ADDRESS_WIDTH = 6,
785
                BYTES = 6,
786
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
787
)
788
(
789
        input [ADDRESS_WIDTH-1:0] addr1,
790
        input [ADDRESS_WIDTH-1:0] addr2,
791
        input [BYTES-1:0] be1,
792
        input [BYTES-1:0] be2,
793
        input [DATA_WIDTH_R-1:0] data_in1,
794
        input [DATA_WIDTH_R-1:0] data_in2,
795
        input we1, we2, clk,
796
        output [DATA_WIDTH_R-1:0] data_out1,
797
        output [DATA_WIDTH_R-1:0] data_out2
798
);
799
 
800
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
801
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
802
 
803
genvar i;
804
generate
805
for (i=0;i
806
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
807
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
808
end
809
endgenerate
810
 
811
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
812
 
813
        // model the RAM with two dimensional packed array
814
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
815
 
816
        generate
817
                if (INITIAL_EN ==  "YES") begin : init
818
                   initial $readmemh(INIT_FILE,ram);
819
                end
820
        endgenerate
821
 
822
        reg [DATA_WIDTH_R-1:0] data_reg1;
823
        reg [DATA_WIDTH_R-1:0] data_reg2;
824
 
825
        // port A
826
        integer k;
827
 
828
        always@(posedge clk)
829
        begin
830
                if(we1) begin
831
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
832
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
833
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
834
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
835
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
836
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
837
 
838
                end
839
        data_reg1 <= ram[addr1];
840
        end
841
 
842
        assign data_out1 = data_reg1;
843
 
844
        // port B
845
        always@(posedge clk)
846
        begin
847
                if(we2) begin
848
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
849
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
850
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
851
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
852
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
853
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
854
 
855
 
856
                end
857
        data_reg2 <= ram[addr2];
858
        end
859
 
860
        assign data_out2 = data_reg2;
861
 
862
endmodule : byte_enabled_true_dual_port_ram_6
863
 
864
module byte_enabled_true_dual_port_ram_7        #(
865
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
866
                parameter INITIAL_EN= "NO",
867
                parameter int
868
                BYTE_WIDTH = 8,
869
                ADDRESS_WIDTH = 6,
870
                BYTES = 7,
871
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
872
)
873
(
874
        input [ADDRESS_WIDTH-1:0] addr1,
875
        input [ADDRESS_WIDTH-1:0] addr2,
876
        input [BYTES-1:0] be1,
877
        input [BYTES-1:0] be2,
878
        input [DATA_WIDTH_R-1:0] data_in1,
879
        input [DATA_WIDTH_R-1:0] data_in2,
880
        input we1, we2, clk,
881
        output [DATA_WIDTH_R-1:0] data_out1,
882
        output [DATA_WIDTH_R-1:0] data_out2
883
);
884
 
885
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
886
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
887
 
888
genvar i;
889
generate
890
for (i=0;i
891
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
892
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
893
end
894
endgenerate
895
 
896
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
897
 
898
        // model the RAM with two dimensional packed array
899
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
900
 
901
        generate
902
                if (INITIAL_EN ==  "YES") begin : init
903
                   initial $readmemh(INIT_FILE,ram);
904
                end
905
        endgenerate
906
 
907
        reg [DATA_WIDTH_R-1:0] data_reg1;
908
        reg [DATA_WIDTH_R-1:0] data_reg2;
909
 
910
        // port A
911
        integer k;
912
 
913
        always@(posedge clk)
914
        begin
915
                if(we1) begin
916
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
917
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
918
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
919
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
920
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
921
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
922
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
923
 
924
                end
925
        data_reg1 <= ram[addr1];
926
        end
927
 
928
        assign data_out1 = data_reg1;
929
 
930
        // port B
931
        always@(posedge clk)
932
        begin
933
                if(we2) begin
934
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
935
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
936
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
937
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
938
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
939
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
940
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
941
 
942
 
943
                end
944
        data_reg2 <= ram[addr2];
945
        end
946
 
947
        assign data_out2 = data_reg2;
948
 
949
endmodule : byte_enabled_true_dual_port_ram_7
950
 
951
module byte_enabled_true_dual_port_ram_8        #(
952
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
953
                parameter INITIAL_EN= "NO",
954
                parameter int
955
                BYTE_WIDTH = 8,
956
                ADDRESS_WIDTH = 6,
957
                BYTES = 8,
958
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
959
)
960
(
961
        input [ADDRESS_WIDTH-1:0] addr1,
962
        input [ADDRESS_WIDTH-1:0] addr2,
963
        input [BYTES-1:0] be1,
964
        input [BYTES-1:0] be2,
965
        input [DATA_WIDTH_R-1:0] data_in1,
966
        input [DATA_WIDTH_R-1:0] data_in2,
967
        input we1, we2, clk,
968
        output [DATA_WIDTH_R-1:0] data_out1,
969
        output [DATA_WIDTH_R-1:0] data_out2
970
);
971
 
972
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
973
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
974
 
975
genvar i;
976
generate
977
for (i=0;i
978
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
979
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
980
end
981
endgenerate
982
 
983
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
984
 
985
        // model the RAM with two dimensional packed array
986
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
987
 
988
        generate
989
                if (INITIAL_EN ==  "YES") begin : init
990
                   initial $readmemh(INIT_FILE,ram);
991
                end
992
        endgenerate
993
 
994
        reg [DATA_WIDTH_R-1:0] data_reg1;
995
        reg [DATA_WIDTH_R-1:0] data_reg2;
996
 
997
        // port A
998
        integer k;
999
 
1000
        always@(posedge clk)
1001
        begin
1002
                if(we1) begin
1003
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1004
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1005
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1006
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1007
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1008
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1009
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1010
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1011
 
1012
                end
1013
        data_reg1 <= ram[addr1];
1014
        end
1015
 
1016
        assign data_out1 = data_reg1;
1017
 
1018
        // port B
1019
        always@(posedge clk)
1020
        begin
1021
                if(we2) begin
1022
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1023
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1024
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1025
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1026
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1027
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1028
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1029
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1030
 
1031
 
1032
                end
1033
        data_reg2 <= ram[addr2];
1034
        end
1035
 
1036
        assign data_out2 = data_reg2;
1037
 
1038
endmodule : byte_enabled_true_dual_port_ram_8
1039
 
1040
module byte_enabled_true_dual_port_ram_9        #(
1041
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1042
                parameter INITIAL_EN= "NO",
1043
                parameter int
1044
                BYTE_WIDTH = 8,
1045
                ADDRESS_WIDTH = 6,
1046
                BYTES = 9,
1047
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1048
)
1049
(
1050
        input [ADDRESS_WIDTH-1:0] addr1,
1051
        input [ADDRESS_WIDTH-1:0] addr2,
1052
        input [BYTES-1:0] be1,
1053
        input [BYTES-1:0] be2,
1054
        input [DATA_WIDTH_R-1:0] data_in1,
1055
        input [DATA_WIDTH_R-1:0] data_in2,
1056
        input we1, we2, clk,
1057
        output [DATA_WIDTH_R-1:0] data_out1,
1058
        output [DATA_WIDTH_R-1:0] data_out2
1059
);
1060
 
1061
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
1062
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
1063
 
1064
genvar i;
1065
generate
1066
for (i=0;i
1067
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1068
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1069
end
1070
endgenerate
1071
 
1072
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
1073
 
1074
        // model the RAM with two dimensional packed array
1075
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
1076
 
1077
        generate
1078
                if (INITIAL_EN ==  "YES") begin : init
1079
                   initial $readmemh(INIT_FILE,ram);
1080
                end
1081
        endgenerate
1082
 
1083
        reg [DATA_WIDTH_R-1:0] data_reg1;
1084
        reg [DATA_WIDTH_R-1:0] data_reg2;
1085
 
1086
        // port A
1087
        integer k;
1088
 
1089
        always@(posedge clk)
1090
        begin
1091
                if(we1) begin
1092
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1093
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1094
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1095
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1096
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1097
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1098
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1099
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1100
                if(be1[8]) ram[addr1][8] <= data_in_sep1[8];
1101
 
1102
                end
1103
        data_reg1 <= ram[addr1];
1104
        end
1105
 
1106
        assign data_out1 = data_reg1;
1107
 
1108
        // port B
1109
        always@(posedge clk)
1110
        begin
1111
                if(we2) begin
1112
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1113
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1114
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1115
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1116
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1117
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1118
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1119
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1120
                if(be2[8]) ram[addr2][8] <= data_in_sep2[8];
1121
 
1122
 
1123
                end
1124
        data_reg2 <= ram[addr2];
1125
        end
1126
 
1127
        assign data_out2 = data_reg2;
1128
 
1129
endmodule : byte_enabled_true_dual_port_ram_9
1130
 
1131
module byte_enabled_true_dual_port_ram_10       #(
1132
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1133
                parameter INITIAL_EN= "NO",
1134
                parameter int
1135
                BYTE_WIDTH = 8,
1136
                ADDRESS_WIDTH = 6,
1137
                BYTES = 10,
1138
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1139
)
1140
(
1141
        input [ADDRESS_WIDTH-1:0] addr1,
1142
        input [ADDRESS_WIDTH-1:0] addr2,
1143
        input [BYTES-1:0] be1,
1144
        input [BYTES-1:0] be2,
1145
        input [DATA_WIDTH_R-1:0] data_in1,
1146
        input [DATA_WIDTH_R-1:0] data_in2,
1147
        input we1, we2, clk,
1148
        output [DATA_WIDTH_R-1:0] data_out1,
1149
        output [DATA_WIDTH_R-1:0] data_out2
1150
);
1151
 
1152
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
1153
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
1154
 
1155
genvar i;
1156
generate
1157
for (i=0;i
1158
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1159
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1160
end
1161
endgenerate
1162
 
1163
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
1164
 
1165
        // model the RAM with two dimensional packed array
1166
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
1167
 
1168
        generate
1169
                if (INITIAL_EN ==  "YES") begin : init
1170
                   initial $readmemh(INIT_FILE,ram);
1171
                end
1172
        endgenerate
1173
 
1174
        reg [DATA_WIDTH_R-1:0] data_reg1;
1175
        reg [DATA_WIDTH_R-1:0] data_reg2;
1176
 
1177
        // port A
1178
        integer k;
1179
 
1180
        always@(posedge clk)
1181
        begin
1182
                if(we1) begin
1183
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1184
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1185
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1186
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1187
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1188
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1189
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1190
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1191
                if(be1[8]) ram[addr1][8] <= data_in_sep1[8];
1192
                if(be1[9]) ram[addr1][9] <= data_in_sep1[9];
1193
 
1194
                end
1195
        data_reg1 <= ram[addr1];
1196
        end
1197
 
1198
        assign data_out1 = data_reg1;
1199
 
1200
        // port B
1201
        always@(posedge clk)
1202
        begin
1203
                if(we2) begin
1204
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1205
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1206
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1207
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1208
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1209
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1210
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1211
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1212
                if(be2[8]) ram[addr2][8] <= data_in_sep2[8];
1213
                if(be2[9]) ram[addr2][9] <= data_in_sep2[9];
1214
 
1215
 
1216
                end
1217
        data_reg2 <= ram[addr2];
1218
        end
1219
 
1220
        assign data_out2 = data_reg2;
1221
 
1222
endmodule : byte_enabled_true_dual_port_ram_10
1223
 
1224
module byte_enabled_true_dual_port_ram_11       #(
1225
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1226
                parameter INITIAL_EN= "NO",
1227
                parameter int
1228
                BYTE_WIDTH = 8,
1229
                ADDRESS_WIDTH = 6,
1230
                BYTES = 11,
1231
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1232
)
1233
(
1234
        input [ADDRESS_WIDTH-1:0] addr1,
1235
        input [ADDRESS_WIDTH-1:0] addr2,
1236
        input [BYTES-1:0] be1,
1237
        input [BYTES-1:0] be2,
1238
        input [DATA_WIDTH_R-1:0] data_in1,
1239
        input [DATA_WIDTH_R-1:0] data_in2,
1240
        input we1, we2, clk,
1241
        output [DATA_WIDTH_R-1:0] data_out1,
1242
        output [DATA_WIDTH_R-1:0] data_out2
1243
);
1244
 
1245
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
1246
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
1247
 
1248
genvar i;
1249
generate
1250
for (i=0;i
1251
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1252
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1253
end
1254
endgenerate
1255
 
1256
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
1257
 
1258
        // model the RAM with two dimensional packed array
1259
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
1260
 
1261
        generate
1262
                if (INITIAL_EN ==  "YES") begin : init
1263
                   initial $readmemh(INIT_FILE,ram);
1264
                end
1265
        endgenerate
1266
 
1267
        reg [DATA_WIDTH_R-1:0] data_reg1;
1268
        reg [DATA_WIDTH_R-1:0] data_reg2;
1269
 
1270
        // port A
1271
        integer k;
1272
 
1273
        always@(posedge clk)
1274
        begin
1275
                if(we1) begin
1276
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1277
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1278
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1279
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1280
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1281
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1282
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1283
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1284
                if(be1[8]) ram[addr1][8] <= data_in_sep1[8];
1285
                if(be1[9]) ram[addr1][9] <= data_in_sep1[9];
1286
                if(be1[10]) ram[addr1][10] <= data_in_sep1[10];
1287
 
1288
                end
1289
        data_reg1 <= ram[addr1];
1290
        end
1291
 
1292
        assign data_out1 = data_reg1;
1293
 
1294
        // port B
1295
        always@(posedge clk)
1296
        begin
1297
                if(we2) begin
1298
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1299
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1300
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1301
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1302
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1303
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1304
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1305
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1306
                if(be2[8]) ram[addr2][8] <= data_in_sep2[8];
1307
                if(be2[9]) ram[addr2][9] <= data_in_sep2[9];
1308
                if(be2[10]) ram[addr2][10] <= data_in_sep2[10];
1309
 
1310
 
1311
                end
1312
        data_reg2 <= ram[addr2];
1313
        end
1314
 
1315
        assign data_out2 = data_reg2;
1316
 
1317
endmodule : byte_enabled_true_dual_port_ram_11
1318
 
1319
module byte_enabled_true_dual_port_ram_12       #(
1320
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1321
                parameter INITIAL_EN= "NO",
1322
                parameter int
1323
                BYTE_WIDTH = 8,
1324
                ADDRESS_WIDTH = 6,
1325
                BYTES = 12,
1326
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1327
)
1328
(
1329
        input [ADDRESS_WIDTH-1:0] addr1,
1330
        input [ADDRESS_WIDTH-1:0] addr2,
1331
        input [BYTES-1:0] be1,
1332
        input [BYTES-1:0] be2,
1333
        input [DATA_WIDTH_R-1:0] data_in1,
1334
        input [DATA_WIDTH_R-1:0] data_in2,
1335
        input we1, we2, clk,
1336
        output [DATA_WIDTH_R-1:0] data_out1,
1337
        output [DATA_WIDTH_R-1:0] data_out2
1338
);
1339
 
1340
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
1341
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
1342
 
1343
genvar i;
1344
generate
1345
for (i=0;i
1346
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1347
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1348
end
1349
endgenerate
1350
 
1351
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
1352
 
1353
        // model the RAM with two dimensional packed array
1354
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
1355
 
1356
        generate
1357
                if (INITIAL_EN ==  "YES") begin : init
1358
                   initial $readmemh(INIT_FILE,ram);
1359
                end
1360
        endgenerate
1361
 
1362
        reg [DATA_WIDTH_R-1:0] data_reg1;
1363
        reg [DATA_WIDTH_R-1:0] data_reg2;
1364
 
1365
        // port A
1366
        integer k;
1367
 
1368
        always@(posedge clk)
1369
        begin
1370
                if(we1) begin
1371
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1372
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1373
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1374
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1375
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1376
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1377
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1378
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1379
                if(be1[8]) ram[addr1][8] <= data_in_sep1[8];
1380
                if(be1[9]) ram[addr1][9] <= data_in_sep1[9];
1381
                if(be1[10]) ram[addr1][10] <= data_in_sep1[10];
1382
                if(be1[11]) ram[addr1][11] <= data_in_sep1[11];
1383
 
1384
                end
1385
        data_reg1 <= ram[addr1];
1386
        end
1387
 
1388
        assign data_out1 = data_reg1;
1389
 
1390
        // port B
1391
        always@(posedge clk)
1392
        begin
1393
                if(we2) begin
1394
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1395
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1396
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1397
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1398
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1399
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1400
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1401
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1402
                if(be2[8]) ram[addr2][8] <= data_in_sep2[8];
1403
                if(be2[9]) ram[addr2][9] <= data_in_sep2[9];
1404
                if(be2[10]) ram[addr2][10] <= data_in_sep2[10];
1405
                if(be2[11]) ram[addr2][11] <= data_in_sep2[11];
1406
 
1407
 
1408
                end
1409
        data_reg2 <= ram[addr2];
1410
        end
1411
 
1412
        assign data_out2 = data_reg2;
1413
 
1414
endmodule : byte_enabled_true_dual_port_ram_12
1415
 
1416
module byte_enabled_true_dual_port_ram_13       #(
1417
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1418
                parameter INITIAL_EN= "NO",
1419
                parameter int
1420
                BYTE_WIDTH = 8,
1421
                ADDRESS_WIDTH = 6,
1422
                BYTES = 13,
1423
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1424
)
1425
(
1426
        input [ADDRESS_WIDTH-1:0] addr1,
1427
        input [ADDRESS_WIDTH-1:0] addr2,
1428
        input [BYTES-1:0] be1,
1429
        input [BYTES-1:0] be2,
1430
        input [DATA_WIDTH_R-1:0] data_in1,
1431
        input [DATA_WIDTH_R-1:0] data_in2,
1432
        input we1, we2, clk,
1433
        output [DATA_WIDTH_R-1:0] data_out1,
1434
        output [DATA_WIDTH_R-1:0] data_out2
1435
);
1436
 
1437
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
1438
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
1439
 
1440
genvar i;
1441
generate
1442
for (i=0;i
1443
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1444
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1445
end
1446
endgenerate
1447
 
1448
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
1449
 
1450
        // model the RAM with two dimensional packed array
1451
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
1452
 
1453
        generate
1454
                if (INITIAL_EN ==  "YES") begin : init
1455
                   initial $readmemh(INIT_FILE,ram);
1456
                end
1457
        endgenerate
1458
 
1459
        reg [DATA_WIDTH_R-1:0] data_reg1;
1460
        reg [DATA_WIDTH_R-1:0] data_reg2;
1461
 
1462
        // port A
1463
        integer k;
1464
 
1465
        always@(posedge clk)
1466
        begin
1467
                if(we1) begin
1468
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1469
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1470
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1471
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1472
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1473
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1474
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1475
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1476
                if(be1[8]) ram[addr1][8] <= data_in_sep1[8];
1477
                if(be1[9]) ram[addr1][9] <= data_in_sep1[9];
1478
                if(be1[10]) ram[addr1][10] <= data_in_sep1[10];
1479
                if(be1[11]) ram[addr1][11] <= data_in_sep1[11];
1480
                if(be1[12]) ram[addr1][12] <= data_in_sep1[12];
1481
 
1482
                end
1483
        data_reg1 <= ram[addr1];
1484
        end
1485
 
1486
        assign data_out1 = data_reg1;
1487
 
1488
        // port B
1489
        always@(posedge clk)
1490
        begin
1491
                if(we2) begin
1492
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1493
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1494
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1495
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1496
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1497
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1498
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1499
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1500
                if(be2[8]) ram[addr2][8] <= data_in_sep2[8];
1501
                if(be2[9]) ram[addr2][9] <= data_in_sep2[9];
1502
                if(be2[10]) ram[addr2][10] <= data_in_sep2[10];
1503
                if(be2[11]) ram[addr2][11] <= data_in_sep2[11];
1504
                if(be2[12]) ram[addr2][12] <= data_in_sep2[12];
1505
 
1506
 
1507
                end
1508
        data_reg2 <= ram[addr2];
1509
        end
1510
 
1511
        assign data_out2 = data_reg2;
1512
 
1513
endmodule : byte_enabled_true_dual_port_ram_13
1514
 
1515
module byte_enabled_true_dual_port_ram_14       #(
1516
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1517
                parameter INITIAL_EN= "NO",
1518
                parameter int
1519
                BYTE_WIDTH = 8,
1520
                ADDRESS_WIDTH = 6,
1521
                BYTES = 14,
1522
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1523
)
1524
(
1525
        input [ADDRESS_WIDTH-1:0] addr1,
1526
        input [ADDRESS_WIDTH-1:0] addr2,
1527
        input [BYTES-1:0] be1,
1528
        input [BYTES-1:0] be2,
1529
        input [DATA_WIDTH_R-1:0] data_in1,
1530
        input [DATA_WIDTH_R-1:0] data_in2,
1531
        input we1, we2, clk,
1532
        output [DATA_WIDTH_R-1:0] data_out1,
1533
        output [DATA_WIDTH_R-1:0] data_out2
1534
);
1535
 
1536
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
1537
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
1538
 
1539
genvar i;
1540
generate
1541
for (i=0;i
1542
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1543
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1544
end
1545
endgenerate
1546
 
1547
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
1548
 
1549
        // model the RAM with two dimensional packed array
1550
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
1551
 
1552
 
1553
        generate
1554
                if (INITIAL_EN ==  "YES") begin : init
1555
                   initial $readmemh(INIT_FILE,ram);
1556
                end
1557
        endgenerate
1558
 
1559
        reg [DATA_WIDTH_R-1:0] data_reg1;
1560
        reg [DATA_WIDTH_R-1:0] data_reg2;
1561
 
1562
        // port A
1563
        integer k;
1564
 
1565
        always@(posedge clk)
1566
        begin
1567
                if(we1) begin
1568
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1569
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1570
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1571
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1572
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1573
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1574
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1575
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1576
                if(be1[8]) ram[addr1][8] <= data_in_sep1[8];
1577
                if(be1[9]) ram[addr1][9] <= data_in_sep1[9];
1578
                if(be1[10]) ram[addr1][10] <= data_in_sep1[10];
1579
                if(be1[11]) ram[addr1][11] <= data_in_sep1[11];
1580
                if(be1[12]) ram[addr1][12] <= data_in_sep1[12];
1581
                if(be1[13]) ram[addr1][13] <= data_in_sep1[13];
1582
 
1583
                end
1584
        data_reg1 <= ram[addr1];
1585
        end
1586
 
1587
        assign data_out1 = data_reg1;
1588
 
1589
        // port B
1590
        always@(posedge clk)
1591
        begin
1592
                if(we2) begin
1593
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1594
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1595
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1596
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1597
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1598
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1599
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1600
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1601
                if(be2[8]) ram[addr2][8] <= data_in_sep2[8];
1602
                if(be2[9]) ram[addr2][9] <= data_in_sep2[9];
1603
                if(be2[10]) ram[addr2][10] <= data_in_sep2[10];
1604
                if(be2[11]) ram[addr2][11] <= data_in_sep2[11];
1605
                if(be2[12]) ram[addr2][12] <= data_in_sep2[12];
1606
                if(be2[13]) ram[addr2][13] <= data_in_sep2[13];
1607
 
1608
 
1609
                end
1610
        data_reg2 <= ram[addr2];
1611
        end
1612
 
1613
        assign data_out2 = data_reg2;
1614
 
1615
endmodule : byte_enabled_true_dual_port_ram_14
1616
 
1617
module byte_enabled_true_dual_port_ram_15       #(
1618
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1619
                parameter INITIAL_EN= "NO",
1620
                parameter int
1621
                BYTE_WIDTH = 8,
1622
                ADDRESS_WIDTH = 6,
1623
                BYTES = 15,
1624
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1625
)
1626
(
1627
        input [ADDRESS_WIDTH-1:0] addr1,
1628
        input [ADDRESS_WIDTH-1:0] addr2,
1629
        input [BYTES-1:0] be1,
1630
        input [BYTES-1:0] be2,
1631
        input [DATA_WIDTH_R-1:0] data_in1,
1632
        input [DATA_WIDTH_R-1:0] data_in2,
1633
        input we1, we2, clk,
1634
        output [DATA_WIDTH_R-1:0] data_out1,
1635
        output [DATA_WIDTH_R-1:0] data_out2
1636
);
1637
 
1638
wire [BYTE_WIDTH-1      :       0] data_in_sep1[BYTES-1 :       0];
1639
wire [BYTE_WIDTH-1      :       0] data_in_sep2[BYTES-1 :       0];
1640
 
1641
genvar i;
1642
generate
1643
for (i=0;i
1644
        assign data_in_sep1[i]=data_in1[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1645
        assign data_in_sep2[i]=data_in2[(i+1)*BYTE_WIDTH-1      :       i*BYTE_WIDTH];
1646
end
1647
endgenerate
1648
 
1649
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
1650
 
1651
        // model the RAM with two dimensional packed array
1652
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
1653
 
1654
        generate
1655
                if (INITIAL_EN ==  "YES") begin : init
1656
                   initial $readmemh(INIT_FILE,ram);
1657
                end
1658
        endgenerate
1659
 
1660
        reg [DATA_WIDTH_R-1:0] data_reg1;
1661
        reg [DATA_WIDTH_R-1:0] data_reg2;
1662
 
1663
        // port A
1664
        integer k;
1665
 
1666
        always@(posedge clk)
1667
        begin
1668
                if(we1) begin
1669
                if(be1[0]) ram[addr1][0] <= data_in_sep1[0];
1670
                if(be1[1]) ram[addr1][1] <= data_in_sep1[1];
1671
                if(be1[2]) ram[addr1][2] <= data_in_sep1[2];
1672
                if(be1[3]) ram[addr1][3] <= data_in_sep1[3];
1673
                if(be1[4]) ram[addr1][4] <= data_in_sep1[4];
1674
                if(be1[5]) ram[addr1][5] <= data_in_sep1[5];
1675
                if(be1[6]) ram[addr1][6] <= data_in_sep1[6];
1676
                if(be1[7]) ram[addr1][7] <= data_in_sep1[7];
1677
                if(be1[8]) ram[addr1][8] <= data_in_sep1[8];
1678
                if(be1[9]) ram[addr1][9] <= data_in_sep1[9];
1679
                if(be1[10]) ram[addr1][10] <= data_in_sep1[10];
1680
                if(be1[11]) ram[addr1][11] <= data_in_sep1[11];
1681
                if(be1[12]) ram[addr1][12] <= data_in_sep1[12];
1682
                if(be1[13]) ram[addr1][13] <= data_in_sep1[13];
1683
                if(be1[14]) ram[addr1][14] <= data_in_sep1[14];
1684
 
1685
                end
1686
        data_reg1 <= ram[addr1];
1687
        end
1688
 
1689
        assign data_out1 = data_reg1;
1690
 
1691
        // port B
1692
        always@(posedge clk)
1693
        begin
1694
                if(we2) begin
1695
                if(be2[0]) ram[addr2][0] <= data_in_sep2[0];
1696
                if(be2[1]) ram[addr2][1] <= data_in_sep2[1];
1697
                if(be2[2]) ram[addr2][2] <= data_in_sep2[2];
1698
                if(be2[3]) ram[addr2][3] <= data_in_sep2[3];
1699
                if(be2[4]) ram[addr2][4] <= data_in_sep2[4];
1700
                if(be2[5]) ram[addr2][5] <= data_in_sep2[5];
1701
                if(be2[6]) ram[addr2][6] <= data_in_sep2[6];
1702
                if(be2[7]) ram[addr2][7] <= data_in_sep2[7];
1703
                if(be2[8]) ram[addr2][8] <= data_in_sep2[8];
1704
                if(be2[9]) ram[addr2][9] <= data_in_sep2[9];
1705
                if(be2[10]) ram[addr2][10] <= data_in_sep2[10];
1706
                if(be2[11]) ram[addr2][11] <= data_in_sep2[11];
1707
                if(be2[12]) ram[addr2][12] <= data_in_sep2[12];
1708
                if(be2[13]) ram[addr2][13] <= data_in_sep2[13];
1709
                if(be2[14]) ram[addr2][14] <= data_in_sep2[14];
1710
 
1711
 
1712
                end
1713
        data_reg2 <= ram[addr2];
1714
        end
1715
 
1716
        assign data_out2 = data_reg2;
1717
 
1718
endmodule : byte_enabled_true_dual_port_ram_15
1719
 
1720
module byte_enabled_single_port_ram     #(
1721
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
1722
                parameter INITIAL_EN= "NO",
1723
                parameter int
1724
                BYTE_WIDTH = 8,
1725
                ADDRESS_WIDTH = 6,
1726
                BYTES = 4,
1727
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
1728
)
1729
(
1730
        input [ADDRESS_WIDTH-1:0] addr,
1731
        input [BYTES-1:0] be,
1732
        input [DATA_WIDTH_R-1:0] data_in,
1733
        input we, clk,
1734
        output [DATA_WIDTH_R-1:0] data_out
1735
 
1736
);
1737
 
1738
generate
1739
if (BYTES==1) begin : byte_en1
1740
        byte_enabled_single_port_ram_1
1741
                #(
1742
                .BYTE_WIDTH(BYTE_WIDTH),
1743
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1744
                 .INITIAL_EN(INITIAL_EN),
1745
                 .INIT_FILE(INIT_FILE)
1746
        )
1747
        ram_inst
1748
        (
1749
                .addr(addr),
1750
                .be(be),
1751
                .data_in(data_in),
1752
                .we(we),
1753
                .clk(clk),
1754
                .data_out(data_out)
1755
 
1756
        );
1757
end
1758
if (BYTES==2) begin : byte_en2
1759
        byte_enabled_single_port_ram_2
1760
                #(
1761
                .BYTE_WIDTH(BYTE_WIDTH),
1762
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1763
                 .INITIAL_EN(INITIAL_EN),
1764
                 .INIT_FILE(INIT_FILE)
1765
        )
1766
        ram_inst
1767
        (
1768
                .addr(addr),
1769
                .be(be),
1770
                .data_in(data_in),
1771
                .we(we),
1772
                .clk(clk),
1773
                .data_out(data_out)
1774
 
1775
        );
1776
end
1777
if (BYTES==3) begin : byte_en3
1778
        byte_enabled_single_port_ram_3
1779
                #(
1780
                .BYTE_WIDTH(BYTE_WIDTH),
1781
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1782
                 .INITIAL_EN(INITIAL_EN),
1783
                 .INIT_FILE(INIT_FILE)
1784
        )
1785
        ram_inst
1786
        (
1787
                .addr(addr),
1788
                .be(be),
1789
                .data_in(data_in),
1790
                .we(we),
1791
                .clk(clk),
1792
                .data_out(data_out)
1793
 
1794
        );
1795
end
1796
if (BYTES==4) begin : byte_en4
1797
        byte_enabled_single_port_ram_4
1798
                #(
1799
                .BYTE_WIDTH(BYTE_WIDTH),
1800
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1801
                 .INITIAL_EN(INITIAL_EN),
1802
                 .INIT_FILE(INIT_FILE)
1803
        )
1804
        ram_inst
1805
        (
1806
                .addr(addr),
1807
                .be(be),
1808
                .data_in(data_in),
1809
                .we(we),
1810
                .clk(clk),
1811
                .data_out(data_out)
1812
 
1813
        );
1814
end
1815
if (BYTES==5) begin : byte_en5
1816
        byte_enabled_single_port_ram_5
1817
                #(
1818
                .BYTE_WIDTH(BYTE_WIDTH),
1819
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1820
                 .INITIAL_EN(INITIAL_EN),
1821
                 .INIT_FILE(INIT_FILE)
1822
        )
1823
        ram_inst
1824
        (
1825
                .addr(addr),
1826
                .be(be),
1827
                .data_in(data_in),
1828
                .we(we),
1829
                .clk(clk),
1830
                .data_out(data_out)
1831
 
1832
        );
1833
end
1834
if (BYTES==6) begin : byte_en6
1835
        byte_enabled_single_port_ram_6
1836
                #(
1837
                .BYTE_WIDTH(BYTE_WIDTH),
1838
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1839
                 .INITIAL_EN(INITIAL_EN),
1840
                 .INIT_FILE(INIT_FILE)
1841
        )
1842
        ram_inst
1843
        (
1844
                .addr(addr),
1845
                .be(be),
1846
                .data_in(data_in),
1847
                .we(we),
1848
                .clk(clk),
1849
                .data_out(data_out)
1850
 
1851
        );
1852
end
1853
if (BYTES==7) begin : byte_en7
1854
        byte_enabled_single_port_ram_7
1855
                #(
1856
                .BYTE_WIDTH(BYTE_WIDTH),
1857
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1858
                 .INITIAL_EN(INITIAL_EN),
1859
                 .INIT_FILE(INIT_FILE)
1860
        )
1861
        ram_inst
1862
        (
1863
                .addr(addr),
1864
                .be(be),
1865
                .data_in(data_in),
1866
                .we(we),
1867
                .clk(clk),
1868
                .data_out(data_out)
1869
 
1870
        );
1871
end
1872
if (BYTES==8) begin : byte_en8
1873
        byte_enabled_single_port_ram_8
1874
                #(
1875
                .BYTE_WIDTH(BYTE_WIDTH),
1876
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1877
                 .INITIAL_EN(INITIAL_EN),
1878
                 .INIT_FILE(INIT_FILE)
1879
        )
1880
        ram_inst
1881
        (
1882
                .addr(addr),
1883
                .be(be),
1884
                .data_in(data_in),
1885
                .we(we),
1886
                .clk(clk),
1887
                .data_out(data_out)
1888
 
1889
        );
1890
end
1891
if (BYTES==9) begin : byte_en9
1892
        byte_enabled_single_port_ram_9
1893
                #(
1894
                .BYTE_WIDTH(BYTE_WIDTH),
1895
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1896
                 .INITIAL_EN(INITIAL_EN),
1897
                 .INIT_FILE(INIT_FILE)
1898
        )
1899
        ram_inst
1900
        (
1901
                .addr(addr),
1902
                .be(be),
1903
                .data_in(data_in),
1904
                .we(we),
1905
                .clk(clk),
1906
                .data_out(data_out)
1907
 
1908
        );
1909
end
1910
if (BYTES==10) begin : byte_en10
1911
        byte_enabled_single_port_ram_10
1912
                #(
1913
                .BYTE_WIDTH(BYTE_WIDTH),
1914
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1915
                 .INITIAL_EN(INITIAL_EN),
1916
                 .INIT_FILE(INIT_FILE)
1917
        )
1918
        ram_inst
1919
        (
1920
                .addr(addr),
1921
                .be(be),
1922
                .data_in(data_in),
1923
                .we(we),
1924
                .clk(clk),
1925
                .data_out(data_out)
1926
 
1927
        );
1928
end
1929
if (BYTES==11) begin : byte_en11
1930
        byte_enabled_single_port_ram_11
1931
                #(
1932
                .BYTE_WIDTH(BYTE_WIDTH),
1933
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1934
                 .INITIAL_EN(INITIAL_EN),
1935
                 .INIT_FILE(INIT_FILE)
1936
        )
1937
        ram_inst
1938
        (
1939
                .addr(addr),
1940
                .be(be),
1941
                .data_in(data_in),
1942
                .we(we),
1943
                .clk(clk),
1944
                .data_out(data_out)
1945
 
1946
        );
1947
end
1948
if (BYTES==12) begin : byte_en12
1949
        byte_enabled_single_port_ram_12
1950
                #(
1951
                .BYTE_WIDTH(BYTE_WIDTH),
1952
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1953
                 .INITIAL_EN(INITIAL_EN),
1954
                 .INIT_FILE(INIT_FILE)
1955
        )
1956
        ram_inst
1957
        (
1958
                .addr(addr),
1959
                .be(be),
1960
                .data_in(data_in),
1961
                .we(we),
1962
                .clk(clk),
1963
                .data_out(data_out)
1964
 
1965
        );
1966
end
1967
if (BYTES==13) begin : byte_en13
1968
        byte_enabled_single_port_ram_13
1969
                #(
1970
                .BYTE_WIDTH(BYTE_WIDTH),
1971
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1972
                 .INITIAL_EN(INITIAL_EN),
1973
                 .INIT_FILE(INIT_FILE)
1974
        )
1975
        ram_inst
1976
        (
1977
                .addr(addr),
1978
                .be(be),
1979
                .data_in(data_in),
1980
                .we(we),
1981
                .clk(clk),
1982
                .data_out(data_out)
1983
 
1984
        );
1985
end
1986
if (BYTES==14) begin : byte_en14
1987
        byte_enabled_single_port_ram_14
1988
                #(
1989
                .BYTE_WIDTH(BYTE_WIDTH),
1990
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
1991
                 .INITIAL_EN(INITIAL_EN),
1992
                 .INIT_FILE(INIT_FILE)
1993
        )
1994
        ram_inst
1995
        (
1996
                .addr(addr),
1997
                .be(be),
1998
                .data_in(data_in),
1999
                .we(we),
2000
                .clk(clk),
2001
                .data_out(data_out)
2002
 
2003
        );
2004
end
2005
if (BYTES==15) begin : byte_en15
2006
        byte_enabled_single_port_ram_15
2007
                #(
2008
                .BYTE_WIDTH(BYTE_WIDTH),
2009
                .ADDRESS_WIDTH(ADDRESS_WIDTH),
2010
                 .INITIAL_EN(INITIAL_EN),
2011
                 .INIT_FILE(INIT_FILE)
2012
        )
2013
        ram_inst
2014
        (
2015
                .addr(addr),
2016
                .be(be),
2017
                .data_in(data_in),
2018
                .we(we),
2019
                .clk(clk),
2020
                .data_out(data_out)
2021
 
2022
        );
2023
end
2024
endgenerate
2025
endmodule : byte_enabled_single_port_ram
2026
 
2027
module byte_enabled_single_port_ram_1   #(
2028
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2029
                parameter INITIAL_EN= "NO",
2030
                parameter int
2031
                BYTE_WIDTH = 8,
2032
                ADDRESS_WIDTH = 6,
2033
                BYTES = 1,
2034
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2035
)
2036
(
2037
        input [ADDRESS_WIDTH-1:0] addr,
2038
        input [BYTES-1:0] be,
2039
        input [DATA_WIDTH_R-1:0] data_in,
2040
        input  we, clk,
2041
        output [DATA_WIDTH_R-1:0] data_out
2042
 
2043
);
2044
 
2045
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2046
 
2047
 
2048
genvar i;
2049
generate
2050
for (i=0;i
2051
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2052
 
2053
end
2054
endgenerate
2055
 
2056
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2057
 
2058
        // model the RAM with two dimensional packed array
2059
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2060
 
2061
        generate
2062
                if (INITIAL_EN ==  "YES") begin : init
2063
                   initial $readmemh(INIT_FILE,ram);
2064
                end
2065
        endgenerate
2066
 
2067
        reg [DATA_WIDTH_R-1:0] data_reg;
2068
 
2069
 
2070
        // port A
2071
        integer k;
2072
 
2073
        always@(posedge clk)
2074
        begin
2075
                if(we) begin
2076
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2077
 
2078
                end
2079
        data_reg <= ram[addr];
2080
        end
2081
 
2082
        assign data_out = data_reg;
2083
 
2084
endmodule : byte_enabled_single_port_ram_1
2085
 
2086
module byte_enabled_single_port_ram_2   #(
2087
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2088
                parameter INITIAL_EN= "NO",
2089
                parameter int
2090
                BYTE_WIDTH = 8,
2091
                ADDRESS_WIDTH = 6,
2092
                BYTES = 2,
2093
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2094
)
2095
(
2096
        input [ADDRESS_WIDTH-1:0] addr,
2097
        input [BYTES-1:0] be,
2098
        input [DATA_WIDTH_R-1:0] data_in,
2099
        input  we, clk,
2100
        output [DATA_WIDTH_R-1:0] data_out
2101
 
2102
);
2103
 
2104
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2105
 
2106
 
2107
genvar i;
2108
generate
2109
for (i=0;i
2110
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2111
 
2112
end
2113
endgenerate
2114
 
2115
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2116
 
2117
        // model the RAM with two dimensional packed array
2118
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2119
 
2120
        generate
2121
                if (INITIAL_EN ==  "YES") begin : init
2122
                   initial $readmemh(INIT_FILE,ram);
2123
                end
2124
        endgenerate
2125
 
2126
        reg [DATA_WIDTH_R-1:0] data_reg;
2127
 
2128
 
2129
        // port A
2130
        integer k;
2131
 
2132
        always@(posedge clk)
2133
        begin
2134
                if(we) begin
2135
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2136
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2137
 
2138
                end
2139
        data_reg <= ram[addr];
2140
        end
2141
 
2142
        assign data_out = data_reg;
2143
 
2144
endmodule : byte_enabled_single_port_ram_2
2145
 
2146
module byte_enabled_single_port_ram_3   #(
2147
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2148
                parameter INITIAL_EN= "NO",
2149
                parameter int
2150
                BYTE_WIDTH = 8,
2151
                ADDRESS_WIDTH = 6,
2152
                BYTES = 3,
2153
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2154
)
2155
(
2156
        input [ADDRESS_WIDTH-1:0] addr,
2157
        input [BYTES-1:0] be,
2158
        input [DATA_WIDTH_R-1:0] data_in,
2159
        input  we, clk,
2160
        output [DATA_WIDTH_R-1:0] data_out
2161
 
2162
);
2163
 
2164
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2165
 
2166
 
2167
genvar i;
2168
generate
2169
for (i=0;i
2170
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2171
 
2172
end
2173
endgenerate
2174
 
2175
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2176
 
2177
        // model the RAM with two dimensional packed array
2178
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2179
 
2180
        generate
2181
                if (INITIAL_EN ==  "YES") begin : init
2182
                   initial $readmemh(INIT_FILE,ram);
2183
                end
2184
        endgenerate
2185
 
2186
        reg [DATA_WIDTH_R-1:0] data_reg;
2187
 
2188
 
2189
        // port A
2190
        integer k;
2191
 
2192
        always@(posedge clk)
2193
        begin
2194
                if(we) begin
2195
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2196
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2197
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2198
 
2199
                end
2200
        data_reg <= ram[addr];
2201
        end
2202
 
2203
        assign data_out = data_reg;
2204
 
2205
endmodule : byte_enabled_single_port_ram_3
2206
 
2207
module byte_enabled_single_port_ram_4   #(
2208
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2209
                parameter INITIAL_EN= "NO",
2210
                parameter int
2211
                BYTE_WIDTH = 8,
2212
                ADDRESS_WIDTH = 6,
2213
                BYTES = 4,
2214
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2215
)
2216
(
2217
        input [ADDRESS_WIDTH-1:0] addr,
2218
        input [BYTES-1:0] be,
2219
        input [DATA_WIDTH_R-1:0] data_in,
2220
        input  we, clk,
2221
        output [DATA_WIDTH_R-1:0] data_out
2222
 
2223
);
2224
 
2225
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2226
 
2227
 
2228
genvar i;
2229
generate
2230
for (i=0;i
2231
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2232
 
2233
end
2234
endgenerate
2235
 
2236
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2237
 
2238
        // model the RAM with two dimensional packed array
2239
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2240
 
2241
        generate
2242
                if (INITIAL_EN ==  "YES") begin : init
2243
                   initial $readmemh(INIT_FILE,ram);
2244
                end
2245
        endgenerate
2246
 
2247
        reg [DATA_WIDTH_R-1:0] data_reg;
2248
 
2249
 
2250
        // port A
2251
        integer k;
2252
 
2253
        always@(posedge clk)
2254
        begin
2255
                if(we) begin
2256
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2257
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2258
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2259
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2260
 
2261
                end
2262
        data_reg <= ram[addr];
2263
        end
2264
 
2265
        assign data_out = data_reg;
2266
 
2267
endmodule : byte_enabled_single_port_ram_4
2268
 
2269
module byte_enabled_single_port_ram_5   #(
2270
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2271
                parameter INITIAL_EN= "NO",
2272
                parameter int
2273
                BYTE_WIDTH = 8,
2274
                ADDRESS_WIDTH = 6,
2275
                BYTES = 5,
2276
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2277
)
2278
(
2279
        input [ADDRESS_WIDTH-1:0] addr,
2280
        input [BYTES-1:0] be,
2281
        input [DATA_WIDTH_R-1:0] data_in,
2282
        input  we, clk,
2283
        output [DATA_WIDTH_R-1:0] data_out
2284
 
2285
);
2286
 
2287
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2288
 
2289
 
2290
genvar i;
2291
generate
2292
for (i=0;i
2293
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2294
 
2295
end
2296
endgenerate
2297
 
2298
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2299
 
2300
        // model the RAM with two dimensional packed array
2301
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2302
 
2303
        generate
2304
                if (INITIAL_EN ==  "YES") begin : init
2305
                   initial $readmemh(INIT_FILE,ram);
2306
                end
2307
        endgenerate
2308
 
2309
        reg [DATA_WIDTH_R-1:0] data_reg;
2310
 
2311
 
2312
        // port A
2313
        integer k;
2314
 
2315
        always@(posedge clk)
2316
        begin
2317
                if(we) begin
2318
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2319
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2320
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2321
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2322
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2323
 
2324
                end
2325
        data_reg <= ram[addr];
2326
        end
2327
 
2328
        assign data_out = data_reg;
2329
 
2330
endmodule : byte_enabled_single_port_ram_5
2331
 
2332
module byte_enabled_single_port_ram_6   #(
2333
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2334
                parameter INITIAL_EN= "NO",
2335
                parameter int
2336
                BYTE_WIDTH = 8,
2337
                ADDRESS_WIDTH = 6,
2338
                BYTES = 6,
2339
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2340
)
2341
(
2342
        input [ADDRESS_WIDTH-1:0] addr,
2343
        input [BYTES-1:0] be,
2344
        input [DATA_WIDTH_R-1:0] data_in,
2345
        input  we, clk,
2346
        output [DATA_WIDTH_R-1:0] data_out
2347
 
2348
);
2349
 
2350
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2351
 
2352
 
2353
genvar i;
2354
generate
2355
for (i=0;i
2356
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2357
 
2358
end
2359
endgenerate
2360
 
2361
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2362
 
2363
        // model the RAM with two dimensional packed array
2364
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2365
 
2366
        generate
2367
                if (INITIAL_EN ==  "YES") begin : init
2368
                   initial $readmemh(INIT_FILE,ram);
2369
                end
2370
        endgenerate
2371
        reg [DATA_WIDTH_R-1:0] data_reg;
2372
 
2373
 
2374
        // port A
2375
        integer k;
2376
 
2377
        always@(posedge clk)
2378
        begin
2379
                if(we) begin
2380
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2381
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2382
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2383
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2384
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2385
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2386
 
2387
                end
2388
        data_reg <= ram[addr];
2389
        end
2390
 
2391
        assign data_out = data_reg;
2392
 
2393
endmodule : byte_enabled_single_port_ram_6
2394
 
2395
module byte_enabled_single_port_ram_7   #(
2396
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2397
                parameter INITIAL_EN= "NO",
2398
                parameter int
2399
                BYTE_WIDTH = 8,
2400
                ADDRESS_WIDTH = 6,
2401
                BYTES = 7,
2402
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2403
)
2404
(
2405
        input [ADDRESS_WIDTH-1:0] addr,
2406
        input [BYTES-1:0] be,
2407
        input [DATA_WIDTH_R-1:0] data_in,
2408
        input  we, clk,
2409
        output [DATA_WIDTH_R-1:0] data_out
2410
 
2411
);
2412
 
2413
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2414
 
2415
 
2416
genvar i;
2417
generate
2418
for (i=0;i
2419
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2420
 
2421
end
2422
endgenerate
2423
 
2424
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2425
 
2426
        // model the RAM with two dimensional packed array
2427
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2428
 
2429
        generate
2430
                if (INITIAL_EN ==  "YES") begin : init
2431
                   initial $readmemh(INIT_FILE,ram);
2432
                end
2433
        endgenerate
2434
        reg [DATA_WIDTH_R-1:0] data_reg;
2435
 
2436
 
2437
        // port A
2438
        integer k;
2439
 
2440
        always@(posedge clk)
2441
        begin
2442
                if(we) begin
2443
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2444
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2445
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2446
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2447
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2448
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2449
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2450
 
2451
                end
2452
        data_reg <= ram[addr];
2453
        end
2454
 
2455
        assign data_out = data_reg;
2456
 
2457
endmodule : byte_enabled_single_port_ram_7
2458
 
2459
module byte_enabled_single_port_ram_8   #(
2460
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2461
                parameter INITIAL_EN= "NO",
2462
                parameter int
2463
                BYTE_WIDTH = 8,
2464
                ADDRESS_WIDTH = 6,
2465
                BYTES = 8,
2466
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2467
)
2468
(
2469
        input [ADDRESS_WIDTH-1:0] addr,
2470
        input [BYTES-1:0] be,
2471
        input [DATA_WIDTH_R-1:0] data_in,
2472
        input  we, clk,
2473
        output [DATA_WIDTH_R-1:0] data_out
2474
 
2475
);
2476
 
2477
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2478
 
2479
 
2480
genvar i;
2481
generate
2482
for (i=0;i
2483
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2484
 
2485
end
2486
endgenerate
2487
 
2488
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2489
 
2490
        // model the RAM with two dimensional packed array
2491
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2492
 
2493
        generate
2494
                if (INITIAL_EN ==  "YES") begin : init
2495
                   initial $readmemh(INIT_FILE,ram);
2496
                end
2497
        endgenerate
2498
 
2499
        reg [DATA_WIDTH_R-1:0] data_reg;
2500
 
2501
 
2502
        // port A
2503
        integer k;
2504
 
2505
        always@(posedge clk)
2506
        begin
2507
                if(we) begin
2508
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2509
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2510
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2511
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2512
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2513
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2514
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2515
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2516
 
2517
                end
2518
        data_reg <= ram[addr];
2519
        end
2520
 
2521
        assign data_out = data_reg;
2522
 
2523
endmodule : byte_enabled_single_port_ram_8
2524
 
2525
module byte_enabled_single_port_ram_9   #(
2526
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2527
                parameter INITIAL_EN= "NO",
2528
                parameter int
2529
                BYTE_WIDTH = 8,
2530
                ADDRESS_WIDTH = 6,
2531
                BYTES = 9,
2532
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2533
)
2534
(
2535
        input [ADDRESS_WIDTH-1:0] addr,
2536
        input [BYTES-1:0] be,
2537
        input [DATA_WIDTH_R-1:0] data_in,
2538
        input  we, clk,
2539
        output [DATA_WIDTH_R-1:0] data_out
2540
 
2541
);
2542
 
2543
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2544
 
2545
 
2546
genvar i;
2547
generate
2548
for (i=0;i
2549
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2550
 
2551
end
2552
endgenerate
2553
 
2554
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2555
 
2556
        // model the RAM with two dimensional packed array
2557
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2558
 
2559
        generate
2560
                if (INITIAL_EN ==  "YES") begin : init
2561
                   initial $readmemh(INIT_FILE,ram);
2562
                end
2563
        endgenerate
2564
 
2565
        reg [DATA_WIDTH_R-1:0] data_reg;
2566
 
2567
 
2568
        // port A
2569
        integer k;
2570
 
2571
        always@(posedge clk)
2572
        begin
2573
                if(we) begin
2574
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2575
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2576
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2577
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2578
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2579
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2580
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2581
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2582
                if(be[8]) ram[addr][8] <= data_in_sep[8];
2583
 
2584
                end
2585
        data_reg <= ram[addr];
2586
        end
2587
 
2588
        assign data_out = data_reg;
2589
 
2590
endmodule : byte_enabled_single_port_ram_9
2591
 
2592
module byte_enabled_single_port_ram_10  #(
2593
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2594
                parameter INITIAL_EN= "NO",
2595
                parameter int
2596
                BYTE_WIDTH = 8,
2597
                ADDRESS_WIDTH = 6,
2598
                BYTES = 10,
2599
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2600
)
2601
(
2602
        input [ADDRESS_WIDTH-1:0] addr,
2603
        input [BYTES-1:0] be,
2604
        input [DATA_WIDTH_R-1:0] data_in,
2605
        input  we, clk,
2606
        output [DATA_WIDTH_R-1:0] data_out
2607
 
2608
);
2609
 
2610
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2611
 
2612
 
2613
genvar i;
2614
generate
2615
for (i=0;i
2616
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2617
 
2618
end
2619
endgenerate
2620
 
2621
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2622
 
2623
        // model the RAM with two dimensional packed array
2624
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2625
 
2626
        generate
2627
                if (INITIAL_EN ==  "YES") begin : init
2628
                   initial $readmemh(INIT_FILE,ram);
2629
                end
2630
        endgenerate
2631
 
2632
        reg [DATA_WIDTH_R-1:0] data_reg;
2633
        // port A
2634
        integer k;
2635
 
2636
        always@(posedge clk)
2637
        begin
2638
                if(we) begin
2639
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2640
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2641
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2642
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2643
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2644
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2645
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2646
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2647
                if(be[8]) ram[addr][8] <= data_in_sep[8];
2648
                if(be[9]) ram[addr][9] <= data_in_sep[9];
2649
 
2650
                end
2651
        data_reg <= ram[addr];
2652
        end
2653
 
2654
        assign data_out = data_reg;
2655
 
2656
endmodule : byte_enabled_single_port_ram_10
2657
 
2658
module byte_enabled_single_port_ram_11  #(
2659
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2660
                parameter INITIAL_EN= "NO",
2661
                parameter int
2662
                BYTE_WIDTH = 8,
2663
                ADDRESS_WIDTH = 6,
2664
                BYTES = 11,
2665
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2666
)
2667
(
2668
        input [ADDRESS_WIDTH-1:0] addr,
2669
        input [BYTES-1:0] be,
2670
        input [DATA_WIDTH_R-1:0] data_in,
2671
        input  we, clk,
2672
        output [DATA_WIDTH_R-1:0] data_out
2673
 
2674
);
2675
 
2676
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2677
 
2678
 
2679
genvar i;
2680
generate
2681
for (i=0;i
2682
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2683
 
2684
end
2685
endgenerate
2686
 
2687
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2688
 
2689
        // model the RAM with two dimensional packed array
2690
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2691
 
2692
        generate
2693
                if (INITIAL_EN ==  "YES") begin : init
2694
                   initial $readmemh(INIT_FILE,ram);
2695
                end
2696
        endgenerate
2697
 
2698
        reg [DATA_WIDTH_R-1:0] data_reg;
2699
 
2700
 
2701
        // port A
2702
        integer k;
2703
 
2704
        always@(posedge clk)
2705
        begin
2706
                if(we) begin
2707
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2708
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2709
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2710
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2711
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2712
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2713
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2714
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2715
                if(be[8]) ram[addr][8] <= data_in_sep[8];
2716
                if(be[9]) ram[addr][9] <= data_in_sep[9];
2717
                if(be[10]) ram[addr][10] <= data_in_sep[10];
2718
 
2719
                end
2720
        data_reg <= ram[addr];
2721
        end
2722
 
2723
        assign data_out = data_reg;
2724
 
2725
endmodule : byte_enabled_single_port_ram_11
2726
 
2727
module byte_enabled_single_port_ram_12  #(
2728
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2729
                parameter INITIAL_EN= "NO",
2730
                parameter int
2731
                BYTE_WIDTH = 8,
2732
                ADDRESS_WIDTH = 6,
2733
                BYTES = 12,
2734
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2735
)
2736
(
2737
        input [ADDRESS_WIDTH-1:0] addr,
2738
        input [BYTES-1:0] be,
2739
        input [DATA_WIDTH_R-1:0] data_in,
2740
        input  we, clk,
2741
        output [DATA_WIDTH_R-1:0] data_out
2742
 
2743
);
2744
 
2745
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2746
 
2747
 
2748
genvar i;
2749
generate
2750
for (i=0;i
2751
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2752
 
2753
end
2754
endgenerate
2755
 
2756
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2757
 
2758
        // model the RAM with two dimensional packed array
2759
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2760
 
2761
        generate
2762
                if (INITIAL_EN ==  "YES") begin : init
2763
                   initial $readmemh(INIT_FILE,ram);
2764
                end
2765
        endgenerate
2766
 
2767
        reg [DATA_WIDTH_R-1:0] data_reg;
2768
 
2769
 
2770
        // port A
2771
        integer k;
2772
 
2773
        always@(posedge clk)
2774
        begin
2775
                if(we) begin
2776
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2777
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2778
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2779
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2780
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2781
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2782
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2783
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2784
                if(be[8]) ram[addr][8] <= data_in_sep[8];
2785
                if(be[9]) ram[addr][9] <= data_in_sep[9];
2786
                if(be[10]) ram[addr][10] <= data_in_sep[10];
2787
                if(be[11]) ram[addr][11] <= data_in_sep[11];
2788
 
2789
                end
2790
        data_reg <= ram[addr];
2791
        end
2792
 
2793
        assign data_out = data_reg;
2794
 
2795
endmodule : byte_enabled_single_port_ram_12
2796
 
2797
module byte_enabled_single_port_ram_13  #(
2798
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2799
                parameter INITIAL_EN= "NO",
2800
                parameter int
2801
                BYTE_WIDTH = 8,
2802
                ADDRESS_WIDTH = 6,
2803
                BYTES = 13,
2804
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2805
)
2806
(
2807
        input [ADDRESS_WIDTH-1:0] addr,
2808
        input [BYTES-1:0] be,
2809
        input [DATA_WIDTH_R-1:0] data_in,
2810
        input  we, clk,
2811
        output [DATA_WIDTH_R-1:0] data_out
2812
 
2813
);
2814
 
2815
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2816
 
2817
 
2818
genvar i;
2819
generate
2820
for (i=0;i
2821
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2822
 
2823
end
2824
endgenerate
2825
 
2826
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2827
 
2828
        // model the RAM with two dimensional packed array
2829
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2830
 
2831
        generate
2832
                if (INITIAL_EN ==  "YES") begin : init
2833
                   initial $readmemh(INIT_FILE,ram);
2834
                end
2835
        endgenerate
2836
 
2837
        reg [DATA_WIDTH_R-1:0] data_reg;
2838
 
2839
 
2840
        // port A
2841
        integer k;
2842
 
2843
        always@(posedge clk)
2844
        begin
2845
                if(we) begin
2846
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2847
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2848
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2849
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2850
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2851
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2852
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2853
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2854
                if(be[8]) ram[addr][8] <= data_in_sep[8];
2855
                if(be[9]) ram[addr][9] <= data_in_sep[9];
2856
                if(be[10]) ram[addr][10] <= data_in_sep[10];
2857
                if(be[11]) ram[addr][11] <= data_in_sep[11];
2858
                if(be[12]) ram[addr][12] <= data_in_sep[12];
2859
 
2860
                end
2861
        data_reg <= ram[addr];
2862
        end
2863
 
2864
        assign data_out = data_reg;
2865
 
2866
endmodule : byte_enabled_single_port_ram_13
2867
 
2868
module byte_enabled_single_port_ram_14  #(
2869
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2870
                parameter INITIAL_EN= "NO",
2871
                parameter int
2872
                BYTE_WIDTH = 8,
2873
                ADDRESS_WIDTH = 6,
2874
                BYTES = 14,
2875
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2876
)
2877
(
2878
        input [ADDRESS_WIDTH-1:0] addr,
2879
        input [BYTES-1:0] be,
2880
        input [DATA_WIDTH_R-1:0] data_in,
2881
        input  we, clk,
2882
        output [DATA_WIDTH_R-1:0] data_out
2883
 
2884
);
2885
 
2886
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2887
 
2888
 
2889
genvar i;
2890
generate
2891
for (i=0;i
2892
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2893
 
2894
end
2895
endgenerate
2896
 
2897
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2898
 
2899
        // model the RAM with two dimensional packed array
2900
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2901
 
2902
        generate
2903
                if (INITIAL_EN ==  "YES") begin : init
2904
                   initial $readmemh(INIT_FILE,ram);
2905
                end
2906
        endgenerate
2907
 
2908
        reg [DATA_WIDTH_R-1:0] data_reg;
2909
 
2910
 
2911
        // port A
2912
        integer k;
2913
 
2914
        always@(posedge clk)
2915
        begin
2916
                if(we) begin
2917
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2918
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2919
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2920
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2921
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2922
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2923
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2924
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2925
                if(be[8]) ram[addr][8] <= data_in_sep[8];
2926
                if(be[9]) ram[addr][9] <= data_in_sep[9];
2927
                if(be[10]) ram[addr][10] <= data_in_sep[10];
2928
                if(be[11]) ram[addr][11] <= data_in_sep[11];
2929
                if(be[12]) ram[addr][12] <= data_in_sep[12];
2930
                if(be[13]) ram[addr][13] <= data_in_sep[13];
2931
 
2932
                end
2933
        data_reg <= ram[addr];
2934
        end
2935
 
2936
        assign data_out = data_reg;
2937
 
2938
endmodule : byte_enabled_single_port_ram_14
2939
 
2940
module byte_enabled_single_port_ram_15  #(
2941
                parameter INIT_FILE= "sw/ram/ram0.txt",// ram initial file in v forma
2942
                parameter INITIAL_EN= "NO",
2943
                parameter int
2944
                BYTE_WIDTH = 8,
2945
                ADDRESS_WIDTH = 6,
2946
                BYTES = 15,
2947
                DATA_WIDTH_R = BYTE_WIDTH * BYTES
2948
)
2949
(
2950
        input [ADDRESS_WIDTH-1:0] addr,
2951
        input [BYTES-1:0] be,
2952
        input [DATA_WIDTH_R-1:0] data_in,
2953
        input  we, clk,
2954
        output [DATA_WIDTH_R-1:0] data_out
2955
 
2956
);
2957
 
2958
wire [BYTE_WIDTH-1      :       0] data_in_sep[BYTES-1  :       0];
2959
 
2960
 
2961
genvar i;
2962
generate
2963
for (i=0;i
2964
        assign data_in_sep[i]=data_in[(i+1)*BYTE_WIDTH-1        :       i*BYTE_WIDTH];
2965
 
2966
end
2967
endgenerate
2968
 
2969
        localparam RAM_DEPTH = 1 << ADDRESS_WIDTH;
2970
 
2971
        // model the RAM with two dimensional packed array
2972
        logic [BYTES-1:0][BYTE_WIDTH-1:0] ram[0:RAM_DEPTH-1];
2973
 
2974
        generate
2975
                if (INITIAL_EN ==  "YES") begin : init
2976
                   initial $readmemh(INIT_FILE,ram);
2977
                end
2978
        endgenerate
2979
 
2980
        reg [DATA_WIDTH_R-1:0] data_reg;
2981
 
2982
 
2983
        // port A
2984
        integer k;
2985
 
2986
        always@(posedge clk)
2987
        begin
2988
                if(we) begin
2989
                if(be[0]) ram[addr][0] <= data_in_sep[0];
2990
                if(be[1]) ram[addr][1] <= data_in_sep[1];
2991
                if(be[2]) ram[addr][2] <= data_in_sep[2];
2992
                if(be[3]) ram[addr][3] <= data_in_sep[3];
2993
                if(be[4]) ram[addr][4] <= data_in_sep[4];
2994
                if(be[5]) ram[addr][5] <= data_in_sep[5];
2995
                if(be[6]) ram[addr][6] <= data_in_sep[6];
2996
                if(be[7]) ram[addr][7] <= data_in_sep[7];
2997
                if(be[8]) ram[addr][8] <= data_in_sep[8];
2998
                if(be[9]) ram[addr][9] <= data_in_sep[9];
2999
                if(be[10]) ram[addr][10] <= data_in_sep[10];
3000
                if(be[11]) ram[addr][11] <= data_in_sep[11];
3001
                if(be[12]) ram[addr][12] <= data_in_sep[12];
3002
                if(be[13]) ram[addr][13] <= data_in_sep[13];
3003
                if(be[14]) ram[addr][14] <= data_in_sep[14];
3004
 
3005
                end
3006
        data_reg <= ram[addr];
3007
        end
3008
 
3009
        assign data_out = data_reg;
3010
 
3011
endmodule : byte_enabled_single_port_ram_15

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.