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/] [src_c/] [jtag/] [test_rtl/] [jtag_ram_test/] [src_verilog/] [lib/] [byte_enabled_generic_ram.sv] - Blame information for rev 38

Details | Compare with Previous | View Log

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