37 `include
"processing_system7_vip_v1_0_10_local_params.v"
39 input [axi_qos_width-1:0] qos1,qos2;
40 input [max_burst_bits-1:0] prt_data1,prt_data2;
41 input [max_burst_bytes-1:0] prt_strb1,prt_strb2;
42 input [addr_width-1:0] prt_addr1,prt_addr2;
43 input [max_burst_bytes_width:0] prt_bytes1,prt_bytes2;
44 input prt_dv1, prt_dv2, prt_ack;
45 output reg prt_ack1,prt_ack2,prt_req;
46 output reg [max_burst_bits-1:0] prt_data;
47 output reg [max_burst_bytes-1:0] prt_strb;
48 output reg [addr_width-1:0] prt_addr;
49 output reg [max_burst_bytes_width:0] prt_bytes;
50 output reg [axi_qos_width-1:0] prt_qos;
52 parameter wait_req = 2
'b00, serv_req1 = 2'b01, serv_req2 = 2
'b10,wait_ack_low = 2'b11;
53 reg [1:0] state,temp_state;
56 always@(posedge sw_clk or negedge rstn)
71 if(prt_dv1 && !prt_dv2) begin
74 #0 prt_data = prt_data1;
75 #0 prt_strb = prt_strb1;
77 $display(
"%m : prt_strb %0h prt_strb1 %0h",prt_data,prt_data1);
78 $display(
"%m : prt_strb %0h prt_strb1 %0h",prt_strb,prt_strb1);
81 prt_bytes = prt_bytes1;
83 end
else if(!prt_dv1 && prt_dv2) begin
87 #0 prt_data = prt_data2;
88 #0 prt_strb = prt_strb2;
90 $display(
"%m : prt_data %0h prt_data2 %0h",prt_strb,prt_data2);
91 $display(
"%m : prt_strb %0h prt_strb2 %0h",prt_strb,prt_strb2);
94 prt_bytes = prt_bytes2;
95 end
else if(prt_dv1 && prt_dv2) begin
99 #0 prt_data = prt_data1;
100 #0 prt_strb = prt_strb1;
102 $display(
"%m : prt_strb %0h prt_strb1 %0h",prt_strb,prt_strb1);
104 prt_addr = prt_addr1;
105 prt_bytes = prt_bytes1;
107 end
else if(qos1 < qos2) begin
110 #0 prt_data = prt_data2;
111 #0 prt_strb = prt_strb2;
113 $display(
"%m : prt_data %0h prt_data2 %0h",prt_strb,prt_data2);
114 $display(
"%m : prt_strb %0h prt_strb2 %0h",prt_strb,prt_strb2);
116 prt_addr = prt_addr2;
117 prt_bytes = prt_bytes2;
122 #0 prt_data = prt_data1;
123 #0 prt_strb = prt_strb1;
125 $display(
"%m : prt_strb %0h prt_strb1 %0h",prt_strb,prt_strb1);
127 prt_addr = prt_addr1;
128 prt_bytes = prt_bytes1;
142 #0 prt_data = prt_data2;
143 #0 prt_strb = prt_strb2;
145 $display(
"%m : prt_data %0h prt_data2 %0h",prt_strb,prt_data2);
146 $display(
"%m : prt_strb %0h prt_strb2 %0h",prt_strb,prt_strb2);
148 prt_addr = prt_addr2;
149 prt_bytes = prt_bytes2;
153 state = wait_ack_low;
166 #0 prt_data = prt_data1;
167 #0 prt_strb = prt_strb1;
169 $display(
"%m : prt_strb %0h prt_strb1 %0h",prt_strb,prt_strb1);
171 prt_addr = prt_addr1;
172 prt_bytes = prt_bytes1;
175 state = wait_ack_low;
183 state = wait_ack_low;
229 `include
"processing_system7_vip_v1_0_10_local_params.v"
231 input [axi_qos_width-1:0] qos1,qos2;
232 input prt_req1, prt_req2;
233 input [addr_width-1:0] prt_addr1, prt_addr2;
234 input [max_burst_bytes_width:0] prt_bytes1, prt_bytes2;
235 output reg prt_dv1, prt_dv2;
236 output reg [max_burst_bits-1:0] prt_data1,prt_data2;
239 output reg [axi_qos_width-1:0] prt_qos;
240 output reg [addr_width-1:0] prt_addr;
241 output reg [max_burst_bytes_width:0] prt_bytes;
242 input [max_burst_bits-1:0] prt_data;
245 parameter wait_req = 2
'b00, serv_req1 = 2'b01, serv_req2 = 2
'b10,wait_dv_low = 2'b11;
249 always@(posedge sw_clk or negedge rstn)
264 if(prt_req1 && !prt_req2) begin
268 prt_addr = prt_addr1;
269 prt_bytes = prt_bytes1;
270 end else if(!prt_req1 && prt_req2) begin
274 prt_addr = prt_addr2;
275 prt_bytes = prt_bytes2;
276 end else if(prt_req1 && prt_req2) begin
277 if(qos1 > qos2) begin
280 prt_addr = prt_addr1;
281 prt_bytes = prt_bytes1;
283 end else if(qos1 < qos2) begin
285 prt_addr = prt_addr2;
287 prt_bytes = prt_bytes2;
292 prt_addr = prt_addr1;
293 prt_bytes = prt_bytes1;
303 prt_data1 = prt_data;
308 prt_addr = prt_addr2;
309 prt_bytes = prt_bytes2;
322 prt_data2 = prt_data;
327 prt_addr = prt_addr1;
328 prt_bytes = prt_bytes1;
360 module processing_system7_vip_v1_0_10_arb_wr_4(
408 `include "processing_system7_vip_v1_0_10_local_params.v"
410 input [axi_qos_width-1:0] qos1,qos2,qos3,qos4;
411 input [max_burst_bits-1:0] prt_data1,prt_data2,prt_data3,prt_data4;
412 input [addr_width-1:0] prt_addr1,prt_addr2,prt_addr3,prt_addr4;
413 input [max_burst_bytes_width:0] prt_bytes1,prt_bytes2,prt_bytes3,prt_bytes4;
414 input [max_burst_bytes-1:0] prt_strb1,prt_strb2,prt_strb3,prt_strb4;
415 input prt_dv1, prt_dv2,prt_dv3, prt_dv4, prt_ack;
416 output reg prt_ack1,prt_ack2,prt_ack3,prt_ack4,prt_req;
417 output reg [max_burst_bits-1:0] prt_data;
418 output reg [max_burst_bytes-1:0] prt_strb;
419 output reg [addr_width-1:0] prt_addr;
420 output reg [max_burst_bytes_width:0] prt_bytes;
421 output reg [axi_qos_width-1:0] prt_qos;
422 parameter wait_req = 3'b000, serv_req1 = 3
'b001, serv_req2 = 3'b010, serv_req3 = 3
'b011, serv_req4 = 4'b100,wait_ack_low = 3
'b101;
426 always@(posedge sw_clk or negedge rstn)
449 #0 prt_data = prt_data1;
450 #0 prt_strb = prt_strb1;
452 $display(
"%m : prt_data %0h prt_data1 %0h ",prt_data,prt_data1);
453 $display(
"%m : prt_strb %0h prt_strb1 %0h ",prt_strb,prt_strb1);
455 prt_addr = prt_addr1;
456 prt_bytes = prt_bytes1;
457 end
else if(prt_dv2) begin
461 #0 prt_data = prt_data2;
462 #0 prt_strb = prt_strb2;
464 $display(
"%m : prt_data %0h prt_data2 %0h ",prt_data,prt_data2);
465 $display(
"%m : prt_strb %0h prt_strb2 %0h ",prt_strb,prt_strb2);
467 prt_addr = prt_addr2;
468 prt_bytes = prt_bytes2;
469 end
else if(prt_dv3) begin
473 #0 prt_data = prt_data3;
474 #0 prt_strb = prt_strb3;
476 $display(
"%m : prt_data %0h prt_data3 %0h ",prt_data,prt_data3);
477 $display(
"%m : prt_strb %0h prt_strb3 %0h ",prt_strb,prt_strb3);
479 prt_addr = prt_addr3;
480 prt_bytes = prt_bytes3;
481 end
else if(prt_dv4) begin
484 #0 prt_data = prt_data4;
485 #0 prt_strb = prt_strb4;
487 $display(
"%m : prt_data %0h prt_data4 %0h ",prt_data,prt_data4);
488 $display(
"%m : prt_strb %0h prt_strb4 %0h ",prt_strb,prt_strb4);
490 prt_addr = prt_addr4;
491 prt_bytes = prt_bytes4;
503 state = wait_ack_low;
509 #0 prt_data = prt_data2;
510 #0 prt_strb = prt_strb2;
512 $display(
"%m : prt_data %0h prt_data2 %0h ",prt_data,prt_data2);
513 $display(
"%m : prt_strb %0h prt_strb2 %0h ",prt_strb,prt_strb2);
515 prt_addr = prt_addr2;
516 prt_bytes = prt_bytes2;
517 end
else if(prt_dv3) begin
521 #0 prt_data = prt_data3;
522 #0 prt_strb = prt_strb3;
524 $display(
"%m : prt_data %0h prt_data3 %0h ",prt_data,prt_data3);
525 $display(
"%m : prt_strb %0h prt_strb3 %0h ",prt_strb,prt_strb3);
527 prt_addr = prt_addr3;
528 prt_bytes = prt_bytes3;
529 end
else if(prt_dv4) begin
532 #0 prt_data = prt_data4;
533 #0 prt_strb = prt_strb4;
535 $display(
"%m : prt_data %0h prt_data4 %0h ",prt_data,prt_data4);
536 $display(
"%m : prt_strb %0h prt_strb4 %0h ",prt_strb,prt_strb4);
538 prt_addr = prt_addr4;
539 prt_bytes = prt_bytes4;
552 state = wait_ack_low;
558 #0 prt_data = prt_data3;
559 #0 prt_strb = prt_strb3;
561 $display(
"%m : prt_data %0h prt_data3 %0h ",prt_data,prt_data3);
562 $display(
"%m : prt_strb %0h prt_strb3 %0h ",prt_strb,prt_strb3);
564 prt_addr = prt_addr3;
565 prt_bytes = prt_bytes3;
566 end
else if(prt_dv4) begin
570 #0 prt_data = prt_data4;
571 #0 prt_strb = prt_strb4;
573 $display(
"%m : prt_data %0h prt_data4 %0h ",prt_data,prt_data4);
574 $display(
"%m : prt_strb %0h prt_strb4 %0h ",prt_strb,prt_strb4);
576 prt_addr = prt_addr4;
577 prt_bytes = prt_bytes4;
578 end
else if(prt_dv1) begin
581 #0 prt_data = prt_data1;
582 #0 prt_strb = prt_strb1;
584 $display(
"%m : prt_data %0h prt_data1 %0h ",prt_data,prt_data1);
585 $display(
"%m : prt_strb %0h prt_strb1 %0h ",prt_strb,prt_strb1);
587 prt_addr = prt_addr1;
588 prt_bytes = prt_bytes1;
601 state = wait_ack_low;
607 #0 prt_data = prt_data4;
608 #0 prt_strb = prt_strb4;
610 $display(
"%m : prt_data %0h prt_data4 %0h ",prt_data,prt_data4);
611 $display(
"%m : prt_strb %0h prt_strb4 %0h ",prt_strb,prt_strb4);
613 prt_addr = prt_addr4;
614 prt_bytes = prt_bytes4;
615 end
else if(prt_dv1) begin
619 #0 prt_data = prt_data1;
620 #0 prt_strb = prt_strb1;
622 $display(
"%m : prt_data %0h prt_data1 %0h ",prt_data,prt_data1);
623 $display(
"%m : prt_strb %0h prt_strb1 %0h ",prt_strb,prt_strb1);
625 prt_addr = prt_addr1;
626 prt_bytes = prt_bytes1;
627 end
else if(prt_dv2) begin
630 #0 prt_data = prt_data2;
631 #0 prt_strb = prt_strb2;
633 $display(
"%m : prt_data %0h prt_data2 %0h ",prt_data,prt_data2);
634 $display(
"%m : prt_strb %0h prt_strb2 %0h ",prt_strb,prt_strb2);
636 prt_addr = prt_addr2;
637 prt_bytes = prt_bytes2;
650 state = wait_ack_low;
656 #0 prt_data = prt_data1;
657 #0 prt_strb = prt_strb1;
659 $display(
"%m : prt_data %0h prt_data1 %0h ",prt_data,prt_data1);
660 $display(
"%m : prt_strb %0h prt_strb1 %0h ",prt_strb,prt_strb1);
662 prt_addr = prt_addr1;
663 prt_bytes = prt_bytes1;
664 end
else if(prt_dv2) begin
668 #0 prt_data = prt_data2;
669 #0 prt_strb = prt_strb2;
671 $display(
"%m : prt_data %0h prt_data2 %0h ",prt_data,prt_data2);
672 $display(
"%m : prt_strb %0h prt_strb2 %0h ",prt_strb,prt_strb2);
674 prt_addr = prt_addr2;
675 prt_bytes = prt_bytes2;
676 end
else if(prt_dv3) begin
679 #0 prt_data = prt_data3;
680 #0 prt_strb = prt_strb3;
682 $display(
"%m : prt_data %0h prt_data3 %0h ",prt_data,prt_data3);
683 $display(
"%m : prt_strb %0h prt_strb3 %0h ",prt_strb,prt_strb3);
685 prt_addr = prt_addr3;
686 prt_bytes = prt_bytes3;
692 state = wait_ack_low;
758 `include
"processing_system7_vip_v1_0_10_local_params.v"
760 input [axi_qos_width-1:0] qos1,qos2,qos3,qos4;
761 input prt_req1, prt_req2,prt_req3, prt_req4, prt_dv;
762 output reg [max_burst_bits-1:0] prt_data1,prt_data2,prt_data3,prt_data4;
763 input [addr_width-1:0] prt_addr1,prt_addr2,prt_addr3,prt_addr4;
764 input [max_burst_bytes_width:0] prt_bytes1,prt_bytes2,prt_bytes3,prt_bytes4;
765 output reg prt_dv1,prt_dv2,prt_dv3,prt_dv4,prt_req;
766 input [max_burst_bits-1:0] prt_data;
767 output reg [addr_width-1:0] prt_addr;
768 output reg [max_burst_bytes_width:0] prt_bytes;
769 output reg [axi_qos_width-1:0] prt_qos;
771 parameter wait_req = 3
'b000, serv_req1 = 3'b001, serv_req2 = 3
'b010, serv_req3 = 3'b011, serv_req4 = 3
'b100, wait_dv_low=3'b101;
775 always@(posedge sw_clk or negedge rstn)
798 prt_addr = prt_addr1;
799 prt_bytes = prt_bytes1;
800 end
else if(prt_req2) begin
804 prt_addr = prt_addr2;
805 prt_bytes = prt_bytes2;
806 end
else if(prt_req3) begin
810 prt_addr = prt_addr3;
811 prt_bytes = prt_bytes3;
812 end
else if(prt_req4) begin
814 prt_addr = prt_addr4;
816 prt_bytes = prt_bytes4;
827 prt_data1 = prt_data;
835 prt_addr = prt_addr2;
836 prt_bytes = prt_bytes2;
837 end else if(prt_req3) begin
841 prt_addr = prt_addr3;
842 prt_bytes = prt_bytes3;
843 end else if(prt_req4) begin
846 prt_addr = prt_addr4;
847 prt_bytes = prt_bytes4;
859 prt_data2 = prt_data;
867 prt_addr = prt_addr3;
868 prt_bytes = prt_bytes3;
869 end
else if(prt_req4) begin
873 prt_addr = prt_addr4;
874 prt_bytes = prt_bytes4;
875 end
else if(prt_req1) begin
877 prt_addr = prt_addr1;
879 prt_bytes = prt_bytes1;
891 prt_data3 = prt_data;
899 prt_addr = prt_addr4;
900 prt_bytes = prt_bytes4;
901 end else if(prt_req1) begin
905 prt_addr = prt_addr1;
906 prt_bytes = prt_bytes1;
907 end else if(prt_req2) begin
910 prt_addr = prt_addr2;
911 prt_bytes = prt_bytes2;
923 prt_data4 = prt_data;
931 prt_addr = prt_addr1;
932 prt_bytes = prt_bytes1;
933 end
else if(prt_req2) begin
937 prt_addr = prt_addr2;
938 prt_bytes = prt_bytes2;
939 end
else if(prt_req3) begin
941 prt_addr = prt_addr3;
943 prt_bytes = prt_bytes3;
1021 `include
"processing_system7_vip_v1_0_10_local_params.v"
1024 input [axi_qos_width-1:0] w_qos_hp2;
1025 input [axi_qos_width-1:0] r_qos_hp2;
1026 input [axi_qos_width-1:0] w_qos_hp3;
1027 input [axi_qos_width-1:0] r_qos_hp3;
1028 input [axi_qos_width-1:0] ddr_rd_qos;
1029 input [axi_qos_width-1:0] ddr_wr_qos;
1031 output wr_ack_ddr_hp2;
1032 input [max_burst_bits-1:0] wr_data_hp2;
1033 input [max_burst_bytes-1:0] wr_strb_hp2;
1034 input [addr_width-1:0] wr_addr_hp2;
1035 input [max_burst_bytes_width:0] wr_bytes_hp2;
1036 output wr_dv_ddr_hp2;
1038 input rd_req_ddr_hp2;
1039 input [addr_width-1:0] rd_addr_hp2;
1040 input [max_burst_bytes_width:0] rd_bytes_hp2;
1041 output [max_burst_bits-1:0] rd_data_ddr_hp2;
1042 output rd_dv_ddr_hp2;
1044 output wr_ack_ddr_hp3;
1045 input [max_burst_bits-1:0] wr_data_hp3;
1046 input [max_burst_bytes-1:0] wr_strb_hp3;
1047 input [addr_width-1:0] wr_addr_hp3;
1048 input [max_burst_bytes_width:0] wr_bytes_hp3;
1049 output wr_dv_ddr_hp3;
1051 input rd_req_ddr_hp3;
1052 input [addr_width-1:0] rd_addr_hp3;
1053 input [max_burst_bytes_width:0] rd_bytes_hp3;
1054 output [max_burst_bits-1:0] rd_data_ddr_hp3;
1055 output rd_dv_ddr_hp3;
1059 output [addr_width-1:0]ddr_wr_addr;
1060 output [max_burst_bits-1:0]ddr_wr_data;
1061 output [max_burst_bytes-1:0]ddr_wr_strb;
1062 output [max_burst_bytes_width:0]ddr_wr_bytes;
1065 input [max_burst_bits-1:0] ddr_rd_data;
1067 output [addr_width-1:0] ddr_rd_addr;
1068 output [max_burst_bytes_width:0] ddr_rd_bytes;
1078 .prt_dv1(wr_dv_ddr_hp2),
1079 .prt_dv2(wr_dv_ddr_hp3),
1080 .prt_data1(wr_data_hp2),
1081 .prt_data2(wr_data_hp3),
1082 .prt_strb1(wr_strb_hp2),
1083 .prt_strb2(wr_strb_hp3),
1084 .prt_addr1(wr_addr_hp2),
1085 .prt_addr2(wr_addr_hp3),
1086 .prt_bytes1(wr_bytes_hp2),
1087 .prt_bytes2(wr_bytes_hp3),
1088 .prt_ack1(wr_ack_ddr_hp2),
1089 .prt_ack2(wr_ack_ddr_hp3),
1090 .prt_req(ddr_wr_dv),
1091 .prt_qos(ddr_wr_qos),
1092 .prt_data(ddr_wr_data),
1093 .prt_strb(ddr_wr_strb),
1094 .prt_addr(ddr_wr_addr),
1095 .prt_bytes(ddr_wr_bytes),
1096 .prt_ack(ddr_wr_ack)
1104 .prt_req1(rd_req_ddr_hp2),
1105 .prt_req2(rd_req_ddr_hp3),
1106 .prt_data1(rd_data_ddr_hp2),
1107 .prt_data2(rd_data_ddr_hp3),
1108 .prt_addr1(rd_addr_hp2),
1109 .prt_addr2(rd_addr_hp3),
1110 .prt_bytes1(rd_bytes_hp2),
1111 .prt_bytes2(rd_bytes_hp3),
1112 .prt_dv1(rd_dv_ddr_hp2),
1113 .prt_dv2(rd_dv_ddr_hp3),
1114 .prt_req(ddr_rd_req),
1115 .prt_qos(ddr_rd_qos),
1116 .prt_data(ddr_rd_data),
1117 .prt_addr(ddr_rd_addr),
1118 .prt_bytes(ddr_rd_bytes),
1183 `include
"processing_system7_vip_v1_0_10_local_params.v"
1186 input [axi_qos_width-1:0] w_qos_hp0;
1187 input [axi_qos_width-1:0] r_qos_hp0;
1188 input [axi_qos_width-1:0] w_qos_hp1;
1189 input [axi_qos_width-1:0] r_qos_hp1;
1190 input [axi_qos_width-1:0] ddr_rd_qos;
1191 input [axi_qos_width-1:0] ddr_wr_qos;
1193 output wr_ack_ddr_hp0;
1194 input [max_burst_bits-1:0] wr_data_hp0;
1195 input [max_burst_bytes-1:0] wr_strb_hp0;
1196 input [addr_width-1:0] wr_addr_hp0;
1197 input [max_burst_bytes_width:0] wr_bytes_hp0;
1198 output wr_dv_ddr_hp0;
1200 input rd_req_ddr_hp0;
1201 input [addr_width-1:0] rd_addr_hp0;
1202 input [max_burst_bytes_width:0] rd_bytes_hp0;
1203 output [max_burst_bits-1:0] rd_data_ddr_hp0;
1204 output rd_dv_ddr_hp0;
1206 output wr_ack_ddr_hp1;
1207 input [max_burst_bits-1:0] wr_data_hp1;
1208 input [max_burst_bytes-1:0] wr_strb_hp1;
1209 input [addr_width-1:0] wr_addr_hp1;
1210 input [max_burst_bytes_width:0] wr_bytes_hp1;
1211 output wr_dv_ddr_hp1;
1213 input rd_req_ddr_hp1;
1214 input [addr_width-1:0] rd_addr_hp1;
1215 input [max_burst_bytes_width:0] rd_bytes_hp1;
1216 output [max_burst_bits-1:0] rd_data_ddr_hp1;
1217 output rd_dv_ddr_hp1;
1221 output [addr_width-1:0]ddr_wr_addr;
1222 output [max_burst_bits-1:0]ddr_wr_data;
1223 output [max_burst_bytes-1:0]ddr_wr_strb;
1224 output [max_burst_bytes_width:0]ddr_wr_bytes;
1227 input [max_burst_bits-1:0] ddr_rd_data;
1229 output [addr_width-1:0] ddr_rd_addr;
1230 output [max_burst_bytes_width:0] ddr_rd_bytes;
1240 .prt_dv1(wr_dv_ddr_hp0),
1241 .prt_dv2(wr_dv_ddr_hp1),
1242 .prt_data1(wr_data_hp0),
1243 .prt_data2(wr_data_hp1),
1244 .prt_strb1(wr_strb_hp0),
1245 .prt_strb2(wr_strb_hp1),
1246 .prt_addr1(wr_addr_hp0),
1247 .prt_addr2(wr_addr_hp1),
1248 .prt_bytes1(wr_bytes_hp0),
1249 .prt_bytes2(wr_bytes_hp1),
1250 .prt_ack1(wr_ack_ddr_hp0),
1251 .prt_ack2(wr_ack_ddr_hp1),
1252 .prt_req(ddr_wr_dv),
1253 .prt_qos(ddr_wr_qos),
1254 .prt_data(ddr_wr_data),
1255 .prt_strb(ddr_wr_strb),
1256 .prt_addr(ddr_wr_addr),
1257 .prt_bytes(ddr_wr_bytes),
1258 .prt_ack(ddr_wr_ack)
1266 .prt_req1(rd_req_ddr_hp0),
1267 .prt_req2(rd_req_ddr_hp1),
1268 .prt_data1(rd_data_ddr_hp0),
1269 .prt_data2(rd_data_ddr_hp1),
1270 .prt_addr1(rd_addr_hp0),
1271 .prt_addr2(rd_addr_hp1),
1272 .prt_bytes1(rd_bytes_hp0),
1273 .prt_bytes2(rd_bytes_hp1),
1274 .prt_dv1(rd_dv_ddr_hp0),
1275 .prt_dv2(rd_dv_ddr_hp1),
1276 .prt_qos(ddr_rd_qos),
1277 .prt_req(ddr_rd_req),
1278 .prt_data(ddr_rd_data),
1279 .prt_addr(ddr_rd_addr),
1280 .prt_bytes(ddr_rd_bytes),
1431 input [3:0] w_qos_hp0;
1432 input [3:0] r_qos_hp0;
1433 input [3:0] w_qos_hp1;
1434 input [3:0] r_qos_hp1;
1435 input [3:0] w_qos_hp2;
1436 input [3:0] r_qos_hp2;
1437 input [3:0] w_qos_hp3;
1438 input [3:0] r_qos_hp3;
1440 output [3:0] ddr_rd_qos0;
1441 output [3:0] ddr_wr_qos0;
1442 output [3:0] ddr_rd_qos1;
1443 output [3:0] ddr_wr_qos1;
1444 output [3:0] ocm_wr_qos;
1445 output [3:0] ocm_rd_qos;
1447 output wr_ack_ddr_hp0;
1448 input [1023:0] wr_data_hp0;
1449 input [127:0] wr_strb_hp0;
1450 input [31:0] wr_addr_hp0;
1451 input [7:0] wr_bytes_hp0;
1452 output wr_dv_ddr_hp0;
1454 input rd_req_ddr_hp0;
1455 input [31:0] rd_addr_hp0;
1456 input [7:0] rd_bytes_hp0;
1457 output [1023:0] rd_data_ddr_hp0;
1458 output rd_dv_ddr_hp0;
1460 output wr_ack_ddr_hp1;
1461 input [1023:0] wr_data_hp1;
1462 input [127:0] wr_strb_hp1;
1463 input [31:0] wr_addr_hp1;
1464 input [7:0] wr_bytes_hp1;
1465 output wr_dv_ddr_hp1;
1467 input rd_req_ddr_hp1;
1468 input [31:0] rd_addr_hp1;
1469 input [7:0] rd_bytes_hp1;
1470 output [1023:0] rd_data_ddr_hp1;
1471 output rd_dv_ddr_hp1;
1473 output wr_ack_ddr_hp2;
1474 input [1023:0] wr_data_hp2;
1475 input [127:0] wr_strb_hp2;
1476 input [31:0] wr_addr_hp2;
1477 input [7:0] wr_bytes_hp2;
1478 output wr_dv_ddr_hp2;
1480 input rd_req_ddr_hp2;
1481 input [31:0] rd_addr_hp2;
1482 input [7:0] rd_bytes_hp2;
1483 output [1023:0] rd_data_ddr_hp2;
1484 output rd_dv_ddr_hp2;
1486 output wr_ack_ddr_hp3;
1487 input [1023:0] wr_data_hp3;
1488 input [127:0] wr_strb_hp3;
1489 input [31:0] wr_addr_hp3;
1490 input [7:0] wr_bytes_hp3;
1491 output wr_dv_ddr_hp3;
1493 input rd_req_ddr_hp3;
1494 input [31:0] rd_addr_hp3;
1495 input [7:0] rd_bytes_hp3;
1496 output [1023:0] rd_data_ddr_hp3;
1497 output rd_dv_ddr_hp3;
1501 output [31:0]ddr_wr_addr0;
1502 output [1023:0]ddr_wr_data0;
1503 output [127:0]ddr_wr_strb0;
1504 output [7:0]ddr_wr_bytes0;
1507 input [1023:0] ddr_rd_data0;
1509 output [31:0] ddr_rd_addr0;
1510 output [7:0] ddr_rd_bytes0;
1514 output [31:0]ddr_wr_addr1;
1515 output [1023:0]ddr_wr_data1;
1516 output [127:0]ddr_wr_strb1;
1517 output [7:0]ddr_wr_bytes1;
1520 input [1023:0] ddr_rd_data1;
1522 output [31:0] ddr_rd_addr1;
1523 output [7:0] ddr_rd_bytes1;
1525 output wr_ack_ocm_hp0;
1526 input wr_dv_ocm_hp0;
1527 input rd_req_ocm_hp0;
1528 output rd_dv_ocm_hp0;
1529 output [1023:0] rd_data_ocm_hp0;
1531 output wr_ack_ocm_hp1;
1532 input wr_dv_ocm_hp1;
1533 input rd_req_ocm_hp1;
1534 output rd_dv_ocm_hp1;
1535 output [1023:0] rd_data_ocm_hp1;
1537 output wr_ack_ocm_hp2;
1538 input wr_dv_ocm_hp2;
1539 input rd_req_ocm_hp2;
1540 output rd_dv_ocm_hp2;
1541 output [1023:0] rd_data_ocm_hp2;
1543 output wr_ack_ocm_hp3;
1544 input wr_dv_ocm_hp3;
1545 input rd_req_ocm_hp3;
1546 output rd_dv_ocm_hp3;
1547 output [1023:0] rd_data_ocm_hp3;
1551 output [31:0]ocm_wr_addr;
1552 output [1023:0]ocm_wr_data;
1553 output [127:0]ocm_wr_strb;
1554 output [7:0]ocm_wr_bytes;
1557 input [1023:0] ocm_rd_data;
1559 output [31:0] ocm_rd_addr;
1560 output [7:0] ocm_rd_bytes;
1566 .w_qos_hp0(w_qos_hp0),
1567 .r_qos_hp0(r_qos_hp0),
1568 .w_qos_hp1(w_qos_hp1),
1569 .r_qos_hp1(r_qos_hp1),
1571 .wr_ack_ddr_hp0(wr_ack_ddr_hp0),
1572 .wr_data_hp0(wr_data_hp0),
1573 .wr_strb_hp0(wr_strb_hp0),
1574 .wr_addr_hp0(wr_addr_hp0),
1575 .wr_bytes_hp0(wr_bytes_hp0),
1576 .wr_dv_ddr_hp0(wr_dv_ddr_hp0),
1577 .rd_req_ddr_hp0(rd_req_ddr_hp0),
1578 .rd_addr_hp0(rd_addr_hp0),
1579 .rd_bytes_hp0(rd_bytes_hp0),
1580 .rd_data_ddr_hp0(rd_data_ddr_hp0),
1581 .rd_dv_ddr_hp0(rd_dv_ddr_hp0),
1583 .wr_ack_ddr_hp1(wr_ack_ddr_hp1),
1584 .wr_data_hp1(wr_data_hp1),
1585 .wr_strb_hp1(wr_strb_hp1),
1586 .wr_addr_hp1(wr_addr_hp1),
1587 .wr_bytes_hp1(wr_bytes_hp1),
1588 .wr_dv_ddr_hp1(wr_dv_ddr_hp1),
1589 .rd_req_ddr_hp1(rd_req_ddr_hp1),
1590 .rd_addr_hp1(rd_addr_hp1),
1591 .rd_bytes_hp1(rd_bytes_hp1),
1592 .rd_data_ddr_hp1(rd_data_ddr_hp1),
1593 .rd_dv_ddr_hp1(rd_dv_ddr_hp1),
1595 .ddr_wr_ack(ddr_wr_ack0),
1596 .ddr_wr_dv(ddr_wr_dv0),
1597 .ddr_rd_req(ddr_rd_req0),
1598 .ddr_rd_dv(ddr_rd_dv0),
1599 .ddr_rd_qos(ddr_rd_qos0),
1600 .ddr_wr_qos(ddr_wr_qos0),
1601 .ddr_wr_addr(ddr_wr_addr0),
1602 .ddr_wr_data(ddr_wr_data0),
1603 .ddr_wr_strb(ddr_wr_strb0),
1604 .ddr_wr_bytes(ddr_wr_bytes0),
1605 .ddr_rd_addr(ddr_rd_addr0),
1606 .ddr_rd_data(ddr_rd_data0),
1607 .ddr_rd_bytes(ddr_rd_bytes0)
1614 .w_qos_hp2(w_qos_hp2),
1615 .r_qos_hp2(r_qos_hp2),
1616 .w_qos_hp3(w_qos_hp3),
1617 .r_qos_hp3(r_qos_hp3),
1619 .wr_ack_ddr_hp2(wr_ack_ddr_hp2),
1620 .wr_data_hp2(wr_data_hp2),
1621 .wr_strb_hp2(wr_strb_hp2),
1622 .wr_addr_hp2(wr_addr_hp2),
1623 .wr_bytes_hp2(wr_bytes_hp2),
1624 .wr_dv_ddr_hp2(wr_dv_ddr_hp2),
1625 .rd_req_ddr_hp2(rd_req_ddr_hp2),
1626 .rd_addr_hp2(rd_addr_hp2),
1627 .rd_bytes_hp2(rd_bytes_hp2),
1628 .rd_data_ddr_hp2(rd_data_ddr_hp2),
1629 .rd_dv_ddr_hp2(rd_dv_ddr_hp2),
1631 .wr_ack_ddr_hp3(wr_ack_ddr_hp3),
1632 .wr_data_hp3(wr_data_hp3),
1633 .wr_strb_hp3(wr_strb_hp3),
1634 .wr_addr_hp3(wr_addr_hp3),
1635 .wr_bytes_hp3(wr_bytes_hp3),
1636 .wr_dv_ddr_hp3(wr_dv_ddr_hp3),
1637 .rd_req_ddr_hp3(rd_req_ddr_hp3),
1638 .rd_addr_hp3(rd_addr_hp3),
1639 .rd_bytes_hp3(rd_bytes_hp3),
1640 .rd_data_ddr_hp3(rd_data_ddr_hp3),
1641 .rd_dv_ddr_hp3(rd_dv_ddr_hp3),
1643 .ddr_wr_ack(ddr_wr_ack1),
1644 .ddr_wr_dv(ddr_wr_dv1),
1645 .ddr_rd_req(ddr_rd_req1),
1646 .ddr_rd_dv(ddr_rd_dv1),
1647 .ddr_rd_qos(ddr_rd_qos1),
1648 .ddr_wr_qos(ddr_wr_qos1),
1650 .ddr_wr_addr(ddr_wr_addr1),
1651 .ddr_wr_data(ddr_wr_data1),
1652 .ddr_wr_strb(ddr_wr_strb1),
1653 .ddr_wr_bytes(ddr_wr_bytes1),
1654 .ddr_rd_addr(ddr_rd_addr1),
1655 .ddr_rd_data(ddr_rd_data1),
1656 .ddr_rd_bytes(ddr_rd_bytes1)
1670 .prt_dv1(wr_dv_ocm_hp0),
1671 .prt_dv2(wr_dv_ocm_hp1),
1672 .prt_dv3(wr_dv_ocm_hp2),
1673 .prt_dv4(wr_dv_ocm_hp3),
1675 .prt_data1(wr_data_hp0),
1676 .prt_data2(wr_data_hp1),
1677 .prt_data3(wr_data_hp2),
1678 .prt_data4(wr_data_hp3),
1680 .prt_strb1(wr_strb_hp0),
1681 .prt_strb2(wr_strb_hp1),
1682 .prt_strb3(wr_strb_hp2),
1683 .prt_strb4(wr_strb_hp3),
1685 .prt_addr1(wr_addr_hp0),
1686 .prt_addr2(wr_addr_hp1),
1687 .prt_addr3(wr_addr_hp2),
1688 .prt_addr4(wr_addr_hp3),
1690 .prt_bytes1(wr_bytes_hp0),
1691 .prt_bytes2(wr_bytes_hp1),
1692 .prt_bytes3(wr_bytes_hp2),
1693 .prt_bytes4(wr_bytes_hp3),
1695 .prt_ack1(wr_ack_ocm_hp0),
1696 .prt_ack2(wr_ack_ocm_hp1),
1697 .prt_ack3(wr_ack_ocm_hp2),
1698 .prt_ack4(wr_ack_ocm_hp3),
1700 .prt_qos(ocm_wr_qos),
1701 .prt_req(ocm_wr_dv),
1702 .prt_data(ocm_wr_data),
1703 .prt_strb(ocm_wr_strb),
1704 .prt_addr(ocm_wr_addr),
1705 .prt_bytes(ocm_wr_bytes),
1706 .prt_ack(ocm_wr_ack)
1720 .prt_req1(rd_req_ocm_hp0),
1721 .prt_req2(rd_req_ocm_hp1),
1722 .prt_req3(rd_req_ocm_hp2),
1723 .prt_req4(rd_req_ocm_hp3),
1725 .prt_data1(rd_data_ocm_hp0),
1726 .prt_data2(rd_data_ocm_hp1),
1727 .prt_data3(rd_data_ocm_hp2),
1728 .prt_data4(rd_data_ocm_hp3),
1730 .prt_addr1(rd_addr_hp0),
1731 .prt_addr2(rd_addr_hp1),
1732 .prt_addr3(rd_addr_hp2),
1733 .prt_addr4(rd_addr_hp3),
1735 .prt_bytes1(rd_bytes_hp0),
1736 .prt_bytes2(rd_bytes_hp1),
1737 .prt_bytes3(rd_bytes_hp2),
1738 .prt_bytes4(rd_bytes_hp3),
1740 .prt_dv1(rd_dv_ocm_hp0),
1741 .prt_dv2(rd_dv_ocm_hp1),
1742 .prt_dv3(rd_dv_ocm_hp2),
1743 .prt_dv4(rd_dv_ocm_hp3),
1745 .prt_qos(ocm_rd_qos),
1746 .prt_req(ocm_rd_req),
1747 .prt_data(ocm_rd_data),
1748 .prt_addr(ocm_rd_addr),
1749 .prt_bytes(ocm_rd_bytes),
1768 `ifdef XILINX_SIMULATOR
1778 `include
"processing_system7_vip_v1_0_10_local_params.v"
1780 parameter mem_size = 32
'h4000_0000; /// 1GB mem size
1781 parameter xsim_mem_size = 32'h1000_0000;
1794 reg [data_width-1:0] ddr_mem0 [0:(mem_size/mem_width)-1];
1795 reg [data_width-1:0] ddr_mem1 [0:(mem_size/mem_width)-1];
1800 reg [addr_width-1:0] check_up_add;
1801 reg [data_width-1:0] updated_data;
1821 task automatic pre_load_mem_from_file;
1822 input [(max_chars*8)-1:0] file_name;
1823 input [addr_width-1:0] start_addr;
1824 input [int_width-1:0] no_of_bytes;
1852 addr = start_addr>>shft_addr_bits;
1868 if(addr[28] == 1
'h0) begin
1869 if(DEBUG_INFO) $display(" pre_load_mem_from_file11 entered");
1870 $readmemh(file_name,ddr_mem0,addr[27:0],addr[27:0]+(no_of_bytes-1));
1872 if(DEBUG_INFO) $display(" pre_load_mem_from_file222 entered");
1873 $readmemh(file_name,ddr_mem1,addr[27:0],addr[27:0]+(no_of_bytes-1));
1878 /* preload memory with some random data */
1879 // task automatic pre_load_mem;
1880 // input [1:0] data_type;
1881 // input [addr_width-1:0] start_addr;
1882 // input [int_width-1:0] no_of_bytes;
1884 // reg [addr_width-1:0] addr;
1886 // addr = start_addr >> shft_addr_bits;
1887 // for (i = 0; i < no_of_bytes; i = i + mem_width) begin
1889 // ALL_RANDOM : set_data(addr , $random);
1890 // ALL_ZEROS : set_data(addr , 32'h0000_0000);
1900 task automatic pre_load_mem;
1901 input [1:0] data_type;
1902 input [addr_width-1:0] start_addr;
1903 input [int_width-1:0] no_of_bytes;
1905 reg [addr_width-1:0] addr;
1907 addr = start_addr >> shft_addr_bits;
1908 for (i = 0; i < no_of_bytes; i = i + mem_width) begin
1910 ALL_RANDOM : set_data(addr , $random, 4
'hF);
1911 ALL_ZEROS : set_data(addr , 32'h0000_0000, 4
'hF);
1912 ALL_ONES : set_data(addr , 32'hFFFF_FFFF, 4
'hF);
1913 default : set_data(addr , $random, 4'hF);
1922 task automatic wait_mem_update;
1923 input[addr_width-1:0] address;
1924 output[data_width-1:0] dataout;
1926 check_up_add = address >> shft_addr_bits;
1929 dataout = updated_data;
1958 task automatic set_data;
1959 input [addr_width-1:0] addr;
1960 input [data_width-1:0] data;
1961 input [(data_width/8)-1:0] strb;
1964 if(check_we && (addr === check_up_add)) begin
1965 updated_data = data;
2047 if (addr[28] == 1
'h0) begin
2048 if (strb[0] == 1'b1) ddr_mem0[addr[27:0]][7:0] = data[7:0];
2049 if (strb[1] == 1
'b1) ddr_mem0[addr[27:0]][15:8] = data[15:8];
2050 if (strb[2] == 1'b1) ddr_mem0[addr[27:0]][23:16] = data[23:16];
2051 if (strb[3] == 1
'b1) ddr_mem0[addr[27:0]][31:24] = data[31:24];
2053 if (strb[0] == 1'b1) ddr_mem1[addr[27:0]][7:0] = data[7:0];
2054 if (strb[1] == 1
'b1) ddr_mem1[addr[27:0]][15:8] = data[15:8];
2055 if (strb[2] == 1'b1) ddr_mem1[addr[27:0]][23:16] = data[23:16];
2056 if (strb[3] == 1
'b1) ddr_mem1[addr[27:0]][31:24] = data[31:24];
2063 /* internal task to read data from memory */
2064 // task automatic get_data;
2065 // input [addr_width-1:0] addr;
2066 // output [data_width-1:0] data;
2069 // case(addr[31:26])
2070 // 6'd0 : data = ddr_mem0[addr[25:0]];
2082 task automatic get_data;
2083 input [addr_width-1:0] addr;
2084 output [data_width-1:0] data;
2114 if (addr[28] == 1
'h0 ) begin
2115 data = ddr_mem0[addr[27:0]];
2116 //$display(" ddr_mem0 read addr %0h data %0h ddr_mem0[%0h] %0h ",addr[28:0],data,addr[27:0],ddr_mem0[addr[27:0]]);
2118 data = ddr_mem1[addr[27:0]];
2119 //$display(" ddr_mem1 read addr %0h data %0h ddr_mem1[%0h] %0h ",addr[28:0],data,addr[27:0],ddr_mem1[addr[27:0]]);
2126 // input [max_burst_bits-1 :0] data;
2127 // input [addr_width-1:0] start_addr;
2128 // input [max_burst_bytes_width:0] no_of_bytes;
2129 // reg [addr_width-1:0] addr;
2130 // reg [max_burst_bits-1 :0] wr_temp_data;
2131 // reg [data_width-1:0] pre_pad_data,post_pad_data,temp_data;
2132 // integer bytes_left;
2133 // integer pre_pad_bytes;
2134 // integer post_pad_bytes;
2136 // addr = start_addr >> shft_addr_bits;
2137 // wr_temp_data = data;
2139 // `ifdef XLNX_INT_DBG
2140 // $display("[%0d] : %0s : Writing DDR Memory starting address (0x%0h) with %0d bytes.\n Data (0x%0h)",$time, DISP_INT_INFO, start_addr, no_of_bytes, data);
2143 // temp_data = wr_temp_data[data_width-1:0];
2144 // bytes_left = no_of_bytes;
2145 // /* when the no. of bytes to be updated is less than mem_width */
2146 // if(bytes_left < mem_width) begin
2147 // /* first data word in the burst , if unaligned address, the adjust the wr_data accordingly for first write*/
2148 // if(start_addr[shft_addr_bits-1:0] > 0) begin
2149 // //temp_data = ddr_mem[addr];
2150 // get_data(addr,temp_data);
2151 // pre_pad_bytes = mem_width - start_addr[shft_addr_bits-1:0];
2152 // repeat(pre_pad_bytes) temp_data = temp_data << 8;
2153 // repeat(pre_pad_bytes) begin
2154 // temp_data = temp_data >> 8;
2155 // temp_data[data_width-1:data_width-8] = wr_temp_data[7:0];
2156 // wr_temp_data = wr_temp_data >> 8;
2158 // bytes_left = bytes_left + pre_pad_bytes;
2160 // /* This is needed for post padding the data ...*/
2161 // post_pad_bytes = mem_width - bytes_left;
2162 // //post_pad_data = ddr_mem[addr];
2163 // get_data(addr,post_pad_data);
2164 // repeat(post_pad_bytes) temp_data = temp_data << 8;
2165 // repeat(bytes_left) post_pad_data = post_pad_data >> 8;
2166 // repeat(post_pad_bytes) begin
2167 // temp_data = temp_data >> 8;
2168 // temp_data[data_width-1:data_width-8] = post_pad_data[7:0];
2169 // post_pad_data = post_pad_data >> 8;
2171 // //ddr_mem[addr] = temp_data;
2172 // set_data(addr,temp_data);
2174 // /* first data word in the burst , if unaligned address, the adjust the wr_data accordingly for first write*/
2175 // if(start_addr[shft_addr_bits-1:0] > 0) begin
2176 // //temp_data = ddr_mem[addr];
2177 // get_data(addr,temp_data);
2178 // pre_pad_bytes = mem_width - start_addr[shft_addr_bits-1:0];
2179 // repeat(pre_pad_bytes) temp_data = temp_data << 8;
2180 // repeat(pre_pad_bytes) begin
2181 // temp_data = temp_data >> 8;
2182 // temp_data[data_width-1:data_width-8] = wr_temp_data[7:0];
2183 // wr_temp_data = wr_temp_data >> 8;
2184 // bytes_left = bytes_left -1;
2187 // wr_temp_data = wr_temp_data >> data_width;
2188 // bytes_left = bytes_left - mem_width;
2190 // /* first data word end */
2191 // //ddr_mem[addr] = temp_data;
2192 // set_data(addr,temp_data);
2194 // while(bytes_left > (mem_width-1) ) begin /// for unaliged address necessary to check for mem_wd-1 , accordingly we have to pad post bytes.
2195 // //ddr_mem[addr] = wr_temp_data[data_width-1:0];
2196 // set_data(addr,wr_temp_data[data_width-1:0]);
2198 // wr_temp_data = wr_temp_data >> data_width;
2199 // bytes_left = bytes_left - mem_width;
2202 // //post_pad_data = ddr_mem[addr];
2203 // get_data(addr,post_pad_data);
2204 // post_pad_bytes = mem_width - bytes_left;
2205 // /* This is needed for last transfer in unaliged burst */
2206 // if(bytes_left > 0) begin
2207 // temp_data = wr_temp_data[data_width-1:0];
2208 // repeat(post_pad_bytes) temp_data = temp_data << 8;
2209 // repeat(bytes_left) post_pad_data = post_pad_data >> 8;
2210 // repeat(post_pad_bytes) begin
2211 // temp_data = temp_data >> 8;
2212 // temp_data[data_width-1:data_width-8] = post_pad_data[7:0];
2213 // post_pad_data = post_pad_data >> 8;
2215 // //ddr_mem[addr] = temp_data;
2216 // set_data(addr,temp_data);
2219 // `ifdef XLNX_INT_DBG $display("[%0d] : %0s : DONE -> Writing DDR Memory starting address (0x%0h)",$time, DISP_INT_INFO, start_addr );
2226 input [max_burst_bits-1 :0] data;
2227 input [addr_width-1:0] start_addr;
2228 input [max_burst_bytes_width:0] no_of_bytes;
2229 input [max_burst_bytes-1:0] strb;
2230 reg [addr_width-1:0] addr;
2231 reg [max_burst_bits-1 :0] wr_temp_data;
2232 reg [max_burst_bytes-1:0] wr_temp_strb;
2233 reg [data_width-1:0] pre_pad_data,post_pad_data,temp_data;
2234 reg [(data_width/8)-1:0] pre_pad_strb,post_pad_strb,temp_strb;
2236 integer pre_pad_bytes;
2237 integer post_pad_bytes;
2239 addr = start_addr >> shft_addr_bits;
2240 wr_temp_data = data;
2241 wr_temp_strb = strb;
2244 $display("[%0d] : %0s : Writing DDR Memory starting address (0x%0h) with %0d bytes.\n Data (0x%0h)",$time, DISP_INT_INFO, start_addr, no_of_bytes, data);
2247 temp_data = wr_temp_data[data_width-1:0];
2248 temp_strb = wr_temp_strb[(data_width/8)-1:0];
2249 bytes_left = no_of_bytes;
2250 /* when the no. of bytes to be updated is less than mem_width */
2251 if(bytes_left+start_addr[shft_addr_bits-1:0] < mem_width) begin
2252 /* first data word in the burst , if unaligned address, the adjust the wr_data accordingly for first write*/
2253 if(start_addr[shft_addr_bits-1:0] > 0) begin
2254 //temp_data = ddr_mem[addr];
2255 get_data(addr,temp_data);
2257 pre_pad_bytes = mem_width - start_addr[shft_addr_bits-1:0];
2258 repeat(pre_pad_bytes) begin
2259 temp_data = temp_data << 8;
2260 temp_strb = temp_strb << 1;
2262 repeat(pre_pad_bytes) begin
2263 temp_data = temp_data >> 8;
2264 temp_strb = temp_strb >> 1;
2265 temp_data[data_width-1:data_width-8] = wr_temp_data[7:0];
2266 temp_strb[(data_width/8)-1] = wr_temp_strb[0];
2267 wr_temp_data = wr_temp_data >> 8;
2268 wr_temp_strb = wr_temp_strb >> 1;
2270 bytes_left = bytes_left + pre_pad_bytes;
2273 post_pad_bytes = mem_width - bytes_left;
2275 get_data(addr,post_pad_data);
2276 post_pad_strb = 4
'hF;
2277 repeat(post_pad_bytes) begin
2278 temp_data = temp_data << 8;
2279 temp_strb = temp_strb << 1;
2281 repeat(bytes_left) begin
2282 post_pad_data = post_pad_data >> 8;
2283 post_pad_strb = post_pad_strb >> 1;
2285 repeat(post_pad_bytes) begin
2286 temp_data = temp_data >> 8;
2287 temp_strb = temp_strb >> 1;
2288 temp_data[data_width-1:data_width-8] = post_pad_data[7:0];
2289 temp_strb[(data_width/8)-1] = post_pad_strb[0];
2290 post_pad_data = post_pad_data >> 8;
2291 post_pad_strb = post_pad_strb >> 1;
2293 //ddr_mem[addr] = temp_data;
2294 set_data(addr,temp_data,temp_strb);
2296 /* first data word in the burst , if unaligned address, the adjust the wr_data accordingly for first write*/
2297 if(start_addr[shft_addr_bits-1:0] > 0) begin
2298 //temp_data = ddr_mem[addr];
2299 get_data(addr,temp_data);
2301 pre_pad_bytes = mem_width - start_addr[shft_addr_bits-1:0];
2302 repeat(pre_pad_bytes) begin
2303 temp_data = temp_data << 8;
2304 temp_strb = temp_strb << 1;
2306 repeat(pre_pad_bytes) begin
2307 temp_data = temp_data >> 8;
2308 temp_strb = temp_strb >> 1;
2309 temp_data[data_width-1:data_width-8] = wr_temp_data[7:0];
2310 temp_strb[(data_width/8)-1] = wr_temp_strb[0];
2311 wr_temp_data = wr_temp_data >> 8;
2312 wr_temp_strb = wr_temp_strb >> 1;
2313 bytes_left = bytes_left -1;
2316 wr_temp_data = wr_temp_data >> data_width;
2317 wr_temp_strb = wr_temp_strb >> data_width/8;
2318 bytes_left = bytes_left - mem_width;
2322 set_data(addr,temp_data,temp_strb);
2324 while(bytes_left > (mem_width-1) ) begin
2326 set_data(addr,wr_temp_data[data_width-1:0],wr_temp_strb[(data_width/8)-1:0]);
2328 wr_temp_data = wr_temp_data >> data_width;
2329 wr_temp_strb = wr_temp_strb >> data_width/8;
2330 bytes_left = bytes_left - mem_width;
2334 get_data(addr,post_pad_data);
2335 post_pad_strb = 4
'hF;
2336 post_pad_bytes = mem_width - bytes_left;
2337 /* This is needed for last transfer in unaliged burst */
2338 if(bytes_left > 0) begin
2339 temp_data = wr_temp_data[data_width-1:0];
2340 temp_strb = wr_temp_strb[(data_width/8)-1:0];
2341 repeat(post_pad_bytes) begin
2342 temp_data = temp_data << 8;
2343 temp_strb = temp_strb << 1;
2345 repeat(bytes_left) begin
2346 post_pad_data = post_pad_data >> 8;
2347 post_pad_strb = post_pad_strb >> 1;
2349 repeat(post_pad_bytes) begin
2350 temp_data = temp_data >> 8;
2351 temp_strb = temp_strb >> 1;
2352 temp_data[data_width-1:data_width-8] = post_pad_data[7:0];
2353 temp_strb[(data_width/8)-1] = post_pad_strb[0];
2354 post_pad_data = post_pad_data >> 8;
2355 post_pad_strb = post_pad_strb >> 1;
2357 //ddr_mem[addr] = temp_data;
2358 set_data(addr,temp_data,temp_strb);
2361 `ifdef XLNX_INT_DBG $display("[%0d] : %0s : DONE -> Writing DDR Memory starting address (0x%0h)",$time, DISP_INT_INFO, start_addr );
2371 // output[max_burst_bits-1 :0] data;
2372 // input [addr_width-1:0] start_addr;
2373 // input [max_burst_bytes_width :0] no_of_bytes;
2375 // reg [addr_width-1:0] addr;
2376 // reg [data_width-1:0] temp_rd_data;
2377 // reg [max_burst_bits-1:0] temp_data;
2378 // integer pre_bytes;
2379 // integer bytes_left;
2381 // addr = start_addr >> shft_addr_bits;
2382 // pre_bytes = start_addr[shft_addr_bits-1:0];
2383 // bytes_left = no_of_bytes;
2385 // `ifdef XLNX_INT_DBG
2386 // $display("[%0d] : %0s : Reading DDR Memory starting address (0x%0h) -> %0d bytes",$time, DISP_INT_INFO, start_addr,no_of_bytes );
2389 // /* Get first data ... if unaligned address */
2390 // //temp_data[(max_burst * max_data_burst)-1 : (max_burst * max_data_burst)- data_width] = ddr_mem[addr];
2391 // get_data(addr,temp_data[max_burst_bits-1 : max_burst_bits-data_width]);
2393 // if(no_of_bytes < mem_width ) begin
2394 // temp_data = temp_data >> (pre_bytes * 8);
2395 // repeat(max_burst_bytes - mem_width)
2396 // temp_data = temp_data >> 8;
2399 // bytes_left = bytes_left - (mem_width - pre_bytes);
2401 // /* Got first data */
2402 // while (bytes_left > (mem_width-1) ) begin
2403 // temp_data = temp_data >> data_width;
2404 // //temp_data[(max_burst * max_data_burst)-1 : (max_burst * max_data_burst)- data_width] = ddr_mem[addr];
2405 // get_data(addr,temp_data[max_burst_bits-1 : max_burst_bits-data_width]);
2407 // bytes_left = bytes_left - mem_width;
2410 // /* Get last valid data in the burst*/
2411 // //temp_rd_data = ddr_mem[addr];
2412 // get_data(addr,temp_rd_data);
2413 // while(bytes_left > 0) begin
2414 // temp_data = temp_data >> 8;
2415 // temp_data[max_burst_bits-1 : max_burst_bits-8] = temp_rd_data[7:0];
2416 // temp_rd_data = temp_rd_data >> 8;
2417 // bytes_left = bytes_left - 1;
2419 // /* align to the brst_byte length */
2420 // repeat(max_burst_bytes - no_of_bytes)
2421 // temp_data = temp_data >> 8;
2423 // data = temp_data;
2424 // `ifdef XLNX_INT_DBG
2425 // $display("[%0d] : %0s : DONE -> Reading DDR Memory starting address (0x%0h), Data returned(0x%0h)",$time, DISP_INT_INFO, start_addr, data );
2433 output[max_burst_bits-1 :0] data;
2434 input [addr_width-1:0] start_addr;
2435 input [max_burst_bytes_width :0] no_of_bytes;
2437 reg [addr_width-1:0] addr;
2438 reg [data_width-1:0] temp_rd_data;
2439 reg [max_burst_bits-1:0] temp_data;
2443 addr = start_addr >> shft_addr_bits;
2444 pre_bytes = start_addr[shft_addr_bits-1:0];
2445 bytes_left = no_of_bytes;
2448 $display("[%0d] : %0s : Reading DDR Memory starting address (0x%0h) -> %0d bytes",$time, DISP_INT_INFO, start_addr,no_of_bytes );
2451 /* Get first data ... if unaligned address */
2452 //temp_data[(max_burst * max_data_burst)-1 : (max_burst * max_data_burst)- data_width] = ddr_mem[addr];
2453 get_data(addr,temp_data[max_burst_bits-1 : max_burst_bits-data_width]);
2455 if(no_of_bytes+start_addr[shft_addr_bits-1:0] < mem_width ) begin
2456 temp_data = temp_data >> (pre_bytes * 8);
2457 repeat(max_burst_bytes - mem_width)
2458 temp_data = temp_data >> 8;
2461 bytes_left = bytes_left - (mem_width - pre_bytes);
2463 /* Got first data */
2464 while (bytes_left > (mem_width-1) ) begin
2465 temp_data = temp_data >> data_width;
2466 //temp_data[(max_burst * max_data_burst)-1 : (max_burst * max_data_burst)- data_width] = ddr_mem[addr];
2467 get_data(addr,temp_data[max_burst_bits-1 : max_burst_bits-data_width]);
2469 bytes_left = bytes_left - mem_width;
2472 /* Get last valid data in the burst*/
2473 //temp_rd_data = ddr_mem[addr];
2474 get_data(addr,temp_rd_data);
2475 while(bytes_left > 0) begin
2476 temp_data = temp_data >> 8;
2477 temp_data[max_burst_bits-1 : max_burst_bits-8] = temp_rd_data[7:0];
2478 temp_rd_data = temp_rd_data >> 8;
2479 bytes_left = bytes_left - 1;
2481 /* align to the brst_byte length */
2482 repeat(max_burst_bytes - no_of_bytes)
2483 temp_data = temp_data >> 8;
2487 $display("[%0d] : %0s : DONE -> Reading DDR Memory starting address (0x%0h), Data returned(0x%0h)",$time, DISP_INT_INFO, start_addr, data );
2495 /* backdoor read to memory */
2496 task peek_mem_to_file;
2497 input [(max_chars*8)-1:0] file_name;
2498 input [addr_width-1:0] start_addr;
2499 input [int_width-1:0] no_of_bytes;
2503 reg [addr_width-1:0] addr;
2504 reg [data_width-1:0] rd_data;
2506 rd_fd = $fopen(file_name,"w");
2507 bytes = no_of_bytes;
2509 addr = start_addr >> shft_addr_bits;
2510 while (bytes > 0) begin
2511 get_data(addr,rd_data);
2512 $fdisplayh(rd_fd,rd_data);
2530 /*** WA for CR # 695818 ***/
2531 `ifdef XILINX_SIMULATOR
2540 module processing_system7_vip_v1_0_10_reg_map();
2542 `include "processing_system7_vip_v1_0_10_local_params.v"
2544 /* Register definitions */
2545 `include "processing_system7_vip_v1_0_10_reg_params.v"
2547 parameter mem_size = 32'h2000_0000;
2548 parameter xsim_mem_size = 32
'h1000_0000; ///as the memory is implemented 4 byte wide 256 MB
2551 reg [data_width-1:0] reg_mem0 [0:(xsim_mem_size/mem_width)-1]; // 256MB mem
2552 reg [data_width-1:0] reg_mem1 [0:(xsim_mem_size/mem_width)-1]; // 256MB mem
2553 parameter addr_offset_bits = 26;
2555 reg /*sparse*/ [data_width-1:0] reg_mem [0:(mem_size/mem_width)-1]; // 512 MB needed for reg space
2556 parameter addr_offset_bits = 27;
2559 /* preload reset_values from file */
2560 task automatic pre_load_rst_values;
2563 `include "processing_system7_vip_v1_0_10_reg_init.v" /* This file has list of set_reset_data() calls to set the reset value for each register*/
2567 /* writes the reset data into the reg memory */
2568 task automatic set_reset_data;
2569 input [addr_width-1:0] address;
2570 input [data_width-1:0] data;
2571 reg [addr_width-1:0] addr;
2573 addr = address >> 2;
2575 case(addr[addr_width-1:addr_offset_bits])
2576 14 : reg_mem0[addr[addr_offset_bits-1:0]] = data;
2577 15 : reg_mem1[addr[addr_offset_bits-1:0]] = data;
2580 reg_mem[addr[addr_offset_bits-1:0]] = data;
2585 /* writes the data into the reg memory */
2586 task automatic set_data;
2587 input [addr_width-1:0] addr;
2588 input [data_width-1:0] data;
2591 case(addr[addr_width-1:addr_offset_bits])
2592 6'h0E : reg_mem0[addr[addr_offset_bits-1:0]] = data;
2593 6
'h0F : reg_mem1[addr[addr_offset_bits-1:0]] = data;
2596 reg_mem[addr[addr_offset_bits-1:0]] = data;
2601 /* get the read data from reg mem */
2602 task automatic get_data;
2603 input [addr_width-1:0] addr;
2604 output [data_width-1:0] data;
2607 case(addr[addr_width-1:addr_offset_bits])
2608 6'h0E : data = reg_mem0[addr[addr_offset_bits-1:0]];
2609 6
'h0F : data = reg_mem1[addr[addr_offset_bits-1:0]];
2612 data = reg_mem[addr[addr_offset_bits-1:0]];
2617 /* read chunk of registers */
2619 output[max_burst_bits-1 :0] data;
2620 input [addr_width-1:0] start_addr;
2621 input [max_burst_bytes_width:0] no_of_bytes;
2623 reg [addr_width-1:0] addr;
2624 reg [data_width-1:0] temp_rd_data;
2625 reg [max_burst_bits-1:0] temp_data;
2628 addr = start_addr >> shft_addr_bits;
2629 bytes_left = no_of_bytes;
2632 $display("[%0d] : %0s : Reading Register Map starting address (0x%0h) -> %0d bytes",$time, DISP_INT_INFO, start_addr,no_of_bytes );
2635 /* Get first data ... if unaligned address */
2636 get_data(addr,temp_data[max_burst_bits-1 : max_burst_bits- data_width]);
2638 if(no_of_bytes < mem_width ) begin
2639 repeat(max_burst_bytes - mem_width)
2640 temp_data = temp_data >> 8;
2643 bytes_left = bytes_left - mem_width;
2645 /* Got first data */
2646 while (bytes_left > (mem_width-1) ) begin
2647 temp_data = temp_data >> data_width;
2648 get_data(addr,temp_data[max_burst_bits-1 : max_burst_bits-data_width]);
2650 bytes_left = bytes_left - mem_width;
2653 /* Get last valid data in the burst*/
2654 get_data(addr,temp_rd_data);
2655 while(bytes_left > 0) begin
2656 temp_data = temp_data >> 8;
2657 temp_data[max_burst_bits-1 : max_burst_bits-8] = temp_rd_data[7:0];
2658 temp_rd_data = temp_rd_data >> 8;
2659 bytes_left = bytes_left - 1;
2661 /* align to the brst_byte length */
2662 repeat(max_burst_bytes - no_of_bytes)
2663 temp_data = temp_data >> 8;
2667 $display("[%0d] : %0s : DONE -> Reading Register Map starting address (0x%0h), Data returned(0x%0h)",$time, DISP_INT_INFO, start_addr, data );
2674 pre_load_rst_values(1);
2690 module processing_system7_vip_v1_0_10_ocm_mem();
2691 `include "processing_system7_vip_v1_0_10_local_params.v"
2693 parameter mem_size = 32'h4_0000;
2694 parameter mem_addr_width = clogb2(mem_size/mem_width);
2696 reg [data_width-1:0] ocm_memory [0:(mem_size/mem_width)-1];
2706 task automatic pre_load_mem_from_file;
2707 input [(max_chars*8)-1:0] file_name;
2708 input [addr_width-1:0] start_addr;
2709 input [int_width-1:0] no_of_bytes;
2711 reg [data_width-1:0] ocm_memory_temp [0:(mem_size/mem_width)-1];
2713 $readmemh(file_name,ocm_memory_temp,start_addr>>shft_addr_bits);
2714 for (i = 0; i < no_of_bytes; i = i + 1) begin
2715 ocm_memory[(start_addr>>shft_addr_bits) + i] = ocm_memory_temp[(start_addr>>shft_addr_bits) + i];
2722 task automatic pre_load_mem;
2723 input [1:0] data_type;
2724 input [addr_width-1:0] start_addr;
2725 input [int_width-1:0] no_of_bytes;
2727 reg [mem_addr_width-1:0] addr;
2729 addr = start_addr >> shft_addr_bits;
2731 for (i = 0; i < no_of_bytes; i = i + mem_width) begin
2733 ALL_RANDOM : ocm_memory[addr] = $random;
2734 ALL_ZEROS : ocm_memory[addr] = 32
'h0000_0000;
2735 ALL_ONES : ocm_memory[addr] = 32'hFFFF_FFFF;
2736 default : ocm_memory[addr] = $random;
2745 input [max_burst_bits-1 :0] data;
2746 input [addr_width-1:0] start_addr;
2747 input [max_burst_bytes_width:0] no_of_bytes;
2748 input [max_burst_bytes-1 :0] strb;
2749 reg [mem_addr_width-1:0] addr;
2750 reg [max_burst_bits-1 :0] wr_temp_data;
2751 reg [max_burst_bytes-1 :0] wr_temp_strb;
2752 reg [data_width-1:0] pre_pad_data,post_pad_data,temp_data;
2753 reg [(data_width/8)-1:0] pre_pad_strb, post_pad_strb, temp_strb;
2756 integer pre_pad_bytes;
2757 integer post_pad_bytes;
2759 addr = start_addr >> shft_addr_bits;
2760 wr_temp_data = data;
2761 wr_temp_strb = strb;
2765 $display(
"[%0d] : %0s : Writing OCM Memory starting address (0x%0h) with %0d bytes.\n Data (0x%0h)",$time, DISP_INT_INFO, start_addr, no_of_bytes, data);
2768 temp_data = wr_temp_data[data_width-1:0];
2769 temp_strb = wr_temp_strb[(data_width/8)-1:0];
2770 bytes_left = no_of_bytes;
2772 if(bytes_left+start_addr[shft_addr_bits-1:0] < mem_width) begin
2774 if(start_addr[shft_addr_bits-1:0] > 0) begin
2775 temp_data = ocm_memory[addr];
2777 pre_pad_bytes = mem_width - start_addr[shft_addr_bits-1:0];
2778 repeat(pre_pad_bytes) begin
2779 temp_data = temp_data << 8;
2780 temp_strb = temp_strb << 1;
2782 repeat(pre_pad_bytes) begin
2783 temp_data = temp_data >> 8;
2784 temp_strb = temp_strb >> 1;
2785 temp_data[data_width-1:data_width-8] = wr_temp_data[7:0];
2786 temp_strb[(data_width/8)-1] = wr_temp_strb[0];
2787 wr_temp_data = wr_temp_data >> 8;
2788 wr_temp_strb = wr_temp_strb >> 1;
2790 bytes_left = bytes_left + pre_pad_bytes;
2792 /* This is needed for post padding the data ...*/
2793 post_pad_bytes = mem_width - bytes_left;
2794 post_pad_data = ocm_memory[addr];
2795 post_pad_strb = 4'hF;
2796 repeat(post_pad_bytes) begin
2797 temp_data = temp_data << 8;
2798 temp_strb = temp_strb << 1;
2800 repeat(bytes_left) begin
2801 post_pad_data = post_pad_data >> 8;
2802 post_pad_strb = post_pad_strb >> 1;
2804 repeat(post_pad_bytes) begin
2805 temp_data = temp_data >> 8;
2806 temp_strb = temp_strb >> 1;
2807 temp_data[data_width-1:data_width-8] = post_pad_data[7:0];
2808 temp_strb[(data_width/8)-1] = post_pad_strb[0];
2809 post_pad_data = post_pad_data >> 8;
2810 post_pad_strb = post_pad_strb >> 1;
2812 if (temp_strb[0] == 1
'b1) ocm_memory[addr][7:0] = temp_data[7:0];
2813 if (temp_strb[1] == 1'b1) ocm_memory[addr][15:8] = temp_data[15:8];
2814 if (temp_strb[2] == 1
'b1) ocm_memory[addr][23:16] = temp_data[23:16];
2815 if (temp_strb[3] == 1'b1) ocm_memory[addr][31:24] = temp_data[31:24];
2819 if(start_addr[shft_addr_bits-1:0] > 0) begin
2820 temp_data = ocm_memory[addr];
2822 pre_pad_bytes = mem_width - start_addr[shft_addr_bits-1:0];
2823 repeat(pre_pad_bytes) begin
2824 temp_data = temp_data << 8;
2825 temp_strb = temp_strb << 1;
2827 repeat(pre_pad_bytes) begin
2828 temp_data = temp_data >> 8;
2829 temp_strb = temp_strb >> 1;
2830 temp_data[data_width-1:data_width-8] = wr_temp_data[7:0];
2831 temp_strb[(data_width/8)-1] = wr_temp_strb[0];
2832 wr_temp_data = wr_temp_data >> 8;
2833 wr_temp_strb = wr_temp_strb >> 1;
2834 bytes_left = bytes_left -1;
2837 wr_temp_data = wr_temp_data >> data_width;
2838 wr_temp_strb = wr_temp_strb >> data_width/8;
2839 bytes_left = bytes_left - mem_width;
2841 /* first data word end */
2842 if (temp_strb[0] == 1'b1) ocm_memory[addr][7:0] = temp_data[7:0];
2843 if (temp_strb[1] == 1
'b1) ocm_memory[addr][15:8] = temp_data[15:8];
2844 if (temp_strb[2] == 1'b1) ocm_memory[addr][23:16] = temp_data[23:16];
2845 if (temp_strb[3] == 1
'b1) ocm_memory[addr][31:24] = temp_data[31:24];
2847 //$display(" first write ocm_memory[addr] %0h temp_data %0h ",ocm_memory[addr],temp_data[31:0]);
2848 while(bytes_left > (mem_width-1) ) begin /// for unaliged address necessary to check for mem_wd-1 , accordingly we have to pad post bytes.
2849 if (wr_temp_strb[0] == 1'b1) ocm_memory[addr][7:0] = wr_temp_data[7:0];
2850 if (wr_temp_strb[1] == 1
'b1) ocm_memory[addr][15:8] = wr_temp_data[15:8];
2851 if (wr_temp_strb[2] == 1'b1) ocm_memory[addr][23:16] = wr_temp_data[23:16];
2852 if (wr_temp_strb[3] == 1
'b1) ocm_memory[addr][31:24] = wr_temp_data[31:24];
2853 //$display("second write ocm_memory[addr] %0h temp_data %0h ",ocm_memory[addr],temp_data[31:0]);
2854 //ocm_memory[addr] = wr_temp_data[data_width-1:0];
2856 wr_temp_data = wr_temp_data >> data_width;
2857 wr_temp_strb = wr_temp_strb >> data_width/8;
2858 bytes_left = bytes_left - mem_width;
2861 post_pad_data = ocm_memory[addr];
2862 post_pad_strb = 4'hF;
2863 post_pad_bytes = mem_width - bytes_left;
2865 if(bytes_left > 0) begin
2866 temp_data = wr_temp_data[data_width-1:0];
2867 temp_strb = wr_temp_strb[(data_width/8)-1:0];
2868 repeat(post_pad_bytes) begin
2869 temp_data = temp_data << 8;
2870 temp_strb = temp_strb << 1;
2872 repeat(bytes_left) begin
2873 post_pad_data = post_pad_data >> 8;
2874 post_pad_strb = post_pad_strb >> 1;
2876 repeat(post_pad_bytes) begin
2877 temp_data = temp_data >> 8;
2878 temp_strb = temp_strb >> 1;
2879 temp_data[data_width-1:data_width-8] = post_pad_data[7:0];
2880 temp_strb[(data_width/8)-1] = post_pad_strb[0];
2881 post_pad_data = post_pad_data >> 8;
2882 post_pad_strb = post_pad_strb >> 1;
2884 if (temp_strb[0] == 1
'b1) ocm_memory[addr][7:0] = temp_data[7:0];
2885 if (temp_strb[1] == 1'b1) ocm_memory[addr][15:8] = temp_data[15:8];
2886 if (temp_strb[2] == 1
'b1) ocm_memory[addr][23:16] = temp_data[23:16];
2887 if (temp_strb[3] == 1'b1) ocm_memory[addr][31:24] = temp_data[31:24];
2892 `ifdef XLNX_INT_DBG $display(
"[%0d] : %0s : DONE -> Writing OCM Memory starting address (0x%0h)",$time, DISP_INT_INFO, start_addr );
2899 output[max_burst_bits-1 :0] data;
2900 input [addr_width-1:0] start_addr;
2901 input [max_burst_bytes_width:0] no_of_bytes;
2903 reg [mem_addr_width-1:0] addr;
2904 reg [data_width-1:0] temp_rd_data;
2905 reg [max_burst_bits-1:0] temp_data;
2908 integer number_of_reads_first_loc,number_of_extra_reads;
2910 addr = start_addr >> shft_addr_bits;
2911 pre_bytes = start_addr[shft_addr_bits-1:0];
2919 number_of_reads_first_loc = (mem_width - pre_bytes);
2920 if(pre_bytes > number_of_reads_first_loc)
2921 number_of_extra_reads = (pre_bytes - number_of_reads_first_loc);
2923 number_of_extra_reads = 0;
2926 bytes_left = no_of_bytes-number_of_reads_first_loc;
2929 $display(
"[%0d] : %0s : Reading OCM Memory starting address (0x%0h) -> %0d bytes",$time, DISP_INT_INFO, start_addr,no_of_bytes );
2935 temp_data[max_burst_bits-1 : max_burst_bits-data_width] = ocm_memory[addr];
2941 if(bytes_left <= 0 ) begin
2942 temp_data = temp_data >> (pre_bytes * 8);
2943 repeat(max_burst_bytes - mem_width)
2944 temp_data = temp_data >> 8;
2951 while (bytes_left > (mem_width-1) ) begin
2952 temp_data = temp_data >> data_width;
2953 temp_data[max_burst_bits-1 : max_burst_bits-data_width] = ocm_memory[addr];
2955 bytes_left = bytes_left - mem_width;
2959 temp_rd_data = ocm_memory[addr];
2961 while(bytes_left > 0) begin
2962 temp_data = temp_data >> 8;
2964 temp_data[max_burst_bits-1 : max_burst_bits-8] = temp_rd_data[7:0];
2965 temp_rd_data = temp_rd_data >> 8;
2966 bytes_left = bytes_left - 1;
2970 repeat(max_burst_bytes - no_of_bytes) begin
2971 temp_data = temp_data >> 8;
2978 $display(
"[%0d] : %0s : DONE -> Reading OCM Memory starting address (0x%0h), Data returned(0x%0h)",$time, DISP_INT_INFO, start_addr, data );
3042 task peek_mem_to_file;
3043 input [(max_chars*8)-1:0] file_name;
3044 input [addr_width-1:0] start_addr;
3045 input [int_width-1:0] no_of_bytes;
3049 reg [addr_width-1:0] addr;
3050 reg [data_width-1:0] rd_data;
3052 rd_fd = $fopen(file_name,
"w");
3053 bytes = no_of_bytes;
3055 addr = start_addr >> shft_addr_bits;
3056 while (bytes > 0) begin
3057 rd_data = ocm_memory[addr];
3058 $fdisplayh(rd_fd,rd_data);
3094 `include
"processing_system7_vip_v1_0_10_local_params.v"
3096 parameter wr_bytes_lsb = 0;
3097 parameter wr_bytes_msb = max_burst_bytes_width;
3098 parameter wr_addr_lsb = wr_bytes_msb + 1;
3099 parameter wr_addr_msb = wr_addr_lsb + addr_width-1;
3100 parameter wr_data_lsb = wr_addr_msb + 1;
3102 parameter data_bus_width = 32;
3103 parameter wr_data_msb = wr_data_lsb + (data_bus_width*axi_burst_len)-1;
3104 parameter wr_qos_lsb = wr_data_msb + 1;
3105 parameter wr_qos_msb = wr_qos_lsb + axi_qos_width-1;
3106 parameter wr_strb_lsb = wr_qos_msb + 1;
3107 parameter wr_strb_msb = wr_strb_lsb + ((data_bus_width/8)*axi_burst_len)-1;
3110 parameter wr_fifo_data_bits = ((data_bus_width/8)*axi_burst_len) + (data_bus_width*axi_burst_len) + axi_qos_width + addr_width + (max_burst_bytes_width+1);
3114 input WR_DATA_ACK_DDR, WR_DATA_ACK_OCM;
3115 output reg WR_DATA_VALID_DDR, WR_DATA_VALID_OCM;
3116 output reg [max_burst_bits-1:0] WR_DATA;
3117 output reg [addr_width-1:0] WR_ADDR;
3118 output reg [max_burst_bytes_width:0] WR_BYTES;
3119 output reg [axi_qos_width-1:0] WR_QOS;
3120 reg [intr_cnt_width-1:0] wr_ptr = 0, rd_ptr = 0;
3121 reg [wr_fifo_data_bits-1:0] wr_fifo [0:intr_max_outstanding-1];
3124 assign empty = (wr_ptr === rd_ptr)?1
'b1: 1'b0;
3125 assign full = ((wr_ptr[intr_cnt_width-1]!== rd_ptr[intr_cnt_width-1]) && (wr_ptr[intr_cnt_width-2:0] === rd_ptr[intr_cnt_width-2:0]))?1
'b1 :1'b0;
3127 parameter SEND_DATA = 0, WAIT_ACK = 1;
3130 task automatic write_mem;
3131 input [wr_fifo_data_bits-1:0] data;
3133 wr_fifo[wr_ptr[intr_cnt_width-2:0]] = data;
3134 if(wr_ptr[intr_cnt_width-2:0] === intr_max_outstanding-1)
3135 wr_ptr[intr_cnt_width-2:0] = 0;
3137 wr_ptr = wr_ptr + 1;
3141 always@(negedge rstn or posedge sw_clk)
3146 WR_DATA_VALID_DDR = 1
'b0;
3147 WR_DATA_VALID_OCM = 1'b0;
3154 WR_DATA_VALID_OCM = 1
'b0;
3155 WR_DATA_VALID_DDR = 1'b0;
3157 WR_DATA = wr_fifo[rd_ptr[intr_cnt_width-2:0]][wr_data_msb : wr_data_lsb];
3158 WR_ADDR = wr_fifo[rd_ptr[intr_cnt_width-2:0]][wr_addr_msb : wr_addr_lsb];
3159 WR_BYTES = wr_fifo[rd_ptr[intr_cnt_width-2:0]][wr_bytes_msb : wr_bytes_lsb];
3160 WR_QOS = wr_fifo[rd_ptr[intr_cnt_width-2:0]][wr_qos_msb : wr_qos_lsb];
3162 case(decode_address(wr_fifo[rd_ptr[intr_cnt_width-2:0]][wr_addr_msb : wr_addr_lsb]))
3163 OCM_MEM : WR_DATA_VALID_OCM = 1;
3164 DDR_MEM : WR_DATA_VALID_DDR = 1;
3165 default : state = SEND_DATA;
3167 if(rd_ptr[intr_cnt_width-2:0] === intr_max_outstanding-1) begin
3168 rd_ptr[intr_cnt_width-2:0] = 0;
3176 if(WR_DATA_ACK_OCM | WR_DATA_ACK_DDR) begin
3177 WR_DATA_VALID_OCM = 1
'b0;
3178 WR_DATA_VALID_DDR = 1'b0;
3216 `include
"processing_system7_vip_v1_0_10_local_params.v"
3221 input RD_DATA_VALID_DDR, RD_DATA_VALID_OCM;
3222 input [max_burst_bits-1:0] RD_DATA_DDR, RD_DATA_OCM;
3223 input req, invalid_rd_req;
3224 input [rd_info_bits-1:0] rd_info;
3226 reg [intr_cnt_width-1:0] wr_ptr = 0, rd_ptr = 0;
3227 reg [rd_afi_fifo_bits-1:0] rd_fifo [0:intr_max_outstanding-1];
3231 assign empty = (wr_ptr === rd_ptr)?1
'b1: 1'b0;
3232 assign full = ((wr_ptr[intr_cnt_width-1]!== rd_ptr[intr_cnt_width-1]) && (wr_ptr[intr_cnt_width-2:0] === rd_ptr[intr_cnt_width-2:0]))?1
'b1 :1'b0;
3236 output [rd_afi_fifo_bits-1:0] data;
3238 data = rd_fifo[rd_ptr[intr_cnt_width-1:0]];
3239 if(rd_ptr[intr_cnt_width-2:0] === intr_max_outstanding-1)
3240 rd_ptr[intr_cnt_width-2:0] = 0;
3242 rd_ptr = rd_ptr + 1;
3249 always@(negedge rstn or posedge sw_clk)
3263 invalid_rd = invalid_rd_req;
3268 if(RD_DATA_VALID_OCM | RD_DATA_VALID_DDR | invalid_rd) begin
3269 if(RD_DATA_VALID_DDR)
3270 rd_fifo[wr_ptr[intr_cnt_width-2:0]] = {RD_DATA_DDR,rd_info};
3271 else if(RD_DATA_VALID_OCM)
3272 rd_fifo[wr_ptr[intr_cnt_width-2:0]] = {RD_DATA_OCM,rd_info};
3274 rd_fifo[wr_ptr[intr_cnt_width-2:0]] = rd_info;
3275 if(wr_ptr[intr_cnt_width-2:0] === intr_max_outstanding-1)
3276 wr_ptr[intr_cnt_width-2:0] = 0;
3278 wr_ptr = wr_ptr + 1;
3388 `include
"processing_system7_vip_v1_0_10_local_params.v"
3393 input [axi_qos_width-1:0]w_qos_gp0;
3394 input [axi_qos_width-1:0]r_qos_gp0;
3395 input [axi_qos_width-1:0]w_qos_gp1;
3396 input [axi_qos_width-1:0]r_qos_gp1;
3398 output [axi_qos_width-1:0]ocm_wr_qos;
3399 output [axi_qos_width-1:0]ocm_rd_qos;
3400 output [axi_qos_width-1:0]ddr_wr_qos;
3401 output [axi_qos_width-1:0]ddr_rd_qos;
3402 output [axi_qos_width-1:0]reg_rd_qos;
3404 output wr_ack_ocm_gp0;
3405 output wr_ack_ddr_gp0;
3406 input [max_burst_bits-1:0] wr_data_gp0;
3407 input [max_burst_bytes-1:0] wr_strb_gp0;
3408 input [addr_width-1:0] wr_addr_gp0;
3409 input [max_burst_bytes_width:0] wr_bytes_gp0;
3410 output wr_dv_ocm_gp0;
3411 output wr_dv_ddr_gp0;
3413 input rd_req_ocm_gp0;
3414 input rd_req_ddr_gp0;
3415 input rd_req_reg_gp0;
3416 input [addr_width-1:0] rd_addr_gp0;
3417 input [max_burst_bytes_width:0] rd_bytes_gp0;
3418 output [max_burst_bits-1:0] rd_data_ocm_gp0;
3419 output [max_burst_bits-1:0] rd_data_ddr_gp0;
3420 output [max_burst_bits-1:0] rd_data_reg_gp0;
3421 output rd_dv_ocm_gp0;
3422 output rd_dv_ddr_gp0;
3423 output rd_dv_reg_gp0;
3425 output wr_ack_ocm_gp1;
3426 output wr_ack_ddr_gp1;
3427 input [max_burst_bits-1:0] wr_data_gp1;
3428 input [max_burst_bytes-1:0] wr_strb_gp1;
3429 input [addr_width-1:0] wr_addr_gp1;
3430 input [max_burst_bytes_width:0] wr_bytes_gp1;
3431 output wr_dv_ocm_gp1;
3432 output wr_dv_ddr_gp1;
3434 input rd_req_ocm_gp1;
3435 input rd_req_ddr_gp1;
3436 input rd_req_reg_gp1;
3437 input [addr_width-1:0] rd_addr_gp1;
3438 input [max_burst_bytes_width:0] rd_bytes_gp1;
3439 output [max_burst_bits-1:0] rd_data_ocm_gp1;
3440 output [max_burst_bits-1:0] rd_data_ddr_gp1;
3441 output [max_burst_bits-1:0] rd_data_reg_gp1;
3442 output rd_dv_ocm_gp1;
3443 output rd_dv_ddr_gp1;
3444 output rd_dv_reg_gp1;
3449 output [addr_width-1:0]ocm_wr_addr;
3450 output [max_burst_bits-1:0]ocm_wr_data;
3451 output [max_burst_bytes-1:0]ocm_wr_strb;
3452 output [max_burst_bytes_width:0]ocm_wr_bytes;
3455 input [max_burst_bits-1:0] ocm_rd_data;
3457 output [addr_width-1:0] ocm_rd_addr;
3458 output [max_burst_bytes_width:0] ocm_rd_bytes;
3462 output [addr_width-1:0]ddr_wr_addr;
3463 output [max_burst_bits-1:0]ddr_wr_data;
3464 output [max_burst_bytes-1:0]ddr_wr_strb;
3465 output [max_burst_bytes_width:0]ddr_wr_bytes;
3468 input [max_burst_bits-1:0] ddr_rd_data;
3470 output [addr_width-1:0] ddr_rd_addr;
3471 output [max_burst_bytes_width:0] ddr_rd_bytes;
3474 input [max_burst_bits-1:0] reg_rd_data;
3476 output [addr_width-1:0] reg_rd_addr;
3477 output [max_burst_bytes_width:0] reg_rd_bytes;
3486 .prt_dv1(wr_dv_ocm_gp0),
3487 .prt_dv2(wr_dv_ocm_gp1),
3488 .prt_data1(wr_data_gp0),
3489 .prt_data2(wr_data_gp1),
3490 .prt_strb1(wr_strb_gp0),
3491 .prt_strb2(wr_strb_gp1),
3492 .prt_addr1(wr_addr_gp0),
3493 .prt_addr2(wr_addr_gp1),
3494 .prt_bytes1(wr_bytes_gp0),
3495 .prt_bytes2(wr_bytes_gp1),
3496 .prt_ack1(wr_ack_ocm_gp0),
3497 .prt_ack2(wr_ack_ocm_gp1),
3498 .prt_req(ocm_wr_dv),
3499 .prt_qos(ocm_wr_qos),
3500 .prt_data(ocm_wr_data),
3501 .prt_strb(ocm_wr_strb),
3502 .prt_addr(ocm_wr_addr),
3503 .prt_bytes(ocm_wr_bytes),
3504 .prt_ack(ocm_wr_ack)
3512 .prt_dv1(wr_dv_ddr_gp0),
3513 .prt_dv2(wr_dv_ddr_gp1),
3514 .prt_data1(wr_data_gp0),
3515 .prt_data2(wr_data_gp1),
3516 .prt_strb1(wr_strb_gp0),
3517 .prt_strb2(wr_strb_gp1),
3518 .prt_addr1(wr_addr_gp0),
3519 .prt_addr2(wr_addr_gp1),
3520 .prt_bytes1(wr_bytes_gp0),
3521 .prt_bytes2(wr_bytes_gp1),
3522 .prt_ack1(wr_ack_ddr_gp0),
3523 .prt_ack2(wr_ack_ddr_gp1),
3524 .prt_req(ddr_wr_dv),
3525 .prt_qos(ddr_wr_qos),
3526 .prt_data(ddr_wr_data),
3527 .prt_strb(ddr_wr_strb),
3528 .prt_addr(ddr_wr_addr),
3529 .prt_bytes(ddr_wr_bytes),
3530 .prt_ack(ddr_wr_ack)
3538 .prt_req1(rd_req_ocm_gp0),
3539 .prt_req2(rd_req_ocm_gp1),
3540 .prt_data1(rd_data_ocm_gp0),
3541 .prt_data2(rd_data_ocm_gp1),
3542 .prt_addr1(rd_addr_gp0),
3543 .prt_addr2(rd_addr_gp1),
3544 .prt_bytes1(rd_bytes_gp0),
3545 .prt_bytes2(rd_bytes_gp1),
3546 .prt_dv1(rd_dv_ocm_gp0),
3547 .prt_dv2(rd_dv_ocm_gp1),
3548 .prt_req(ocm_rd_req),
3549 .prt_qos(ocm_rd_qos),
3550 .prt_data(ocm_rd_data),
3551 .prt_addr(ocm_rd_addr),
3552 .prt_bytes(ocm_rd_bytes),
3561 .prt_req1(rd_req_ddr_gp0),
3562 .prt_req2(rd_req_ddr_gp1),
3563 .prt_data1(rd_data_ddr_gp0),
3564 .prt_data2(rd_data_ddr_gp1),
3565 .prt_addr1(rd_addr_gp0),
3566 .prt_addr2(rd_addr_gp1),
3567 .prt_bytes1(rd_bytes_gp0),
3568 .prt_bytes2(rd_bytes_gp1),
3569 .prt_dv1(rd_dv_ddr_gp0),
3570 .prt_dv2(rd_dv_ddr_gp1),
3571 .prt_req(ddr_rd_req),
3572 .prt_qos(ddr_rd_qos),
3573 .prt_data(ddr_rd_data),
3574 .prt_addr(ddr_rd_addr),
3575 .prt_bytes(ddr_rd_bytes),
3584 .prt_req1(rd_req_reg_gp0),
3585 .prt_req2(rd_req_reg_gp1),
3586 .prt_data1(rd_data_reg_gp0),
3587 .prt_data2(rd_data_reg_gp1),
3588 .prt_addr1(rd_addr_gp0),
3589 .prt_addr2(rd_addr_gp1),
3590 .prt_bytes1(rd_bytes_gp0),
3591 .prt_bytes2(rd_bytes_gp1),
3592 .prt_dv1(rd_dv_reg_gp0),
3593 .prt_dv2(rd_dv_reg_gp1),
3594 .prt_req(reg_rd_req),
3595 .prt_qos(reg_rd_qos),
3596 .prt_data(reg_rd_data),
3597 .prt_addr(reg_rd_addr),
3598 .prt_bytes(reg_rd_bytes),
3642 input reg_rd_req_port0;
3643 output reg_rd_dv_port0;
3644 input[31:0] reg_rd_addr_port0;
3645 output[1023:0] reg_rd_data_port0;
3646 input[7:0] reg_rd_bytes_port0;
3647 input [3:0] reg_rd_qos_port0;
3649 input reg_rd_req_port1;
3650 output reg_rd_dv_port1;
3651 input[31:0] reg_rd_addr_port1;
3652 output[1023:0] reg_rd_data_port1;
3653 input[7:0] reg_rd_bytes_port1;
3654 input[3:0] reg_rd_qos_port1;
3657 reg [1023:0] rd_data;
3658 wire [31:0] rd_addr;
3659 wire [7:0] rd_bytes;
3667 .qos1(reg_rd_qos_port0),
3668 .qos2(reg_rd_qos_port1),
3670 .prt_req1(reg_rd_req_port0),
3671 .prt_req2(reg_rd_req_port1),
3673 .prt_data1(reg_rd_data_port0),
3674 .prt_data2(reg_rd_data_port1),
3676 .prt_addr1(reg_rd_addr_port0),
3677 .prt_addr2(reg_rd_addr_port1),
3679 .prt_bytes1(reg_rd_bytes_port0),
3680 .prt_bytes2(reg_rd_bytes_port1),
3682 .prt_dv1(reg_rd_dv_port0),
3683 .prt_dv2(reg_rd_dv_port1),
3689 .prt_bytes(rd_bytes),
3697 always@(posedge sw_clk or negedge rstn)
3708 regm.read_reg_mem(rd_data,rd_addr, rd_bytes);
3773 `include
"processing_system7_vip_v1_0_10_local_params.v"
3777 output ocm_wr_ack_port0;
3778 input ocm_wr_dv_port0;
3779 input ocm_rd_req_port0;
3780 output ocm_rd_dv_port0;
3781 input[addr_width-1:0] ocm_wr_addr_port0;
3782 input[max_burst_bits-1:0] ocm_wr_data_port0;
3783 input[max_burst_bits-1:0] ocm_wr_strb_port0;
3784 input[max_burst_bytes_width:0] ocm_wr_bytes_port0;
3785 input[addr_width-1:0] ocm_rd_addr_port0;
3786 output[max_burst_bits-1:0] ocm_rd_data_port0;
3787 input[max_burst_bytes_width:0] ocm_rd_bytes_port0;
3788 input [axi_qos_width-1:0] ocm_wr_qos_port0;
3789 input [axi_qos_width-1:0] ocm_rd_qos_port0;
3791 output ocm_wr_ack_port1;
3792 input ocm_wr_dv_port1;
3793 input ocm_rd_req_port1;
3794 output ocm_rd_dv_port1;
3795 input[addr_width-1:0] ocm_wr_addr_port1;
3796 input[max_burst_bits-1:0] ocm_wr_data_port1;
3797 input[max_burst_bits-1:0] ocm_wr_strb_port1;
3798 input[max_burst_bytes_width:0] ocm_wr_bytes_port1;
3799 input[addr_width-1:0] ocm_rd_addr_port1;
3800 output[max_burst_bits-1:0] ocm_rd_data_port1;
3801 input[max_burst_bytes_width:0] ocm_rd_bytes_port1;
3802 input[axi_qos_width-1:0] ocm_wr_qos_port1;
3803 input[axi_qos_width-1:0] ocm_rd_qos_port1;
3805 wire [axi_qos_width-1:0] wr_qos;
3807 wire [max_burst_bits-1:0] wr_data;
3808 wire [max_burst_bytes-1:0] wr_strb;
3809 wire [max_burst_bytes-1:0] ocm_wr_strb_port0,ocm_wr_strb_port1;
3810 wire [addr_width-1:0] wr_addr;
3811 wire [max_burst_bytes_width:0] wr_bytes;
3814 wire [axi_qos_width-1:0] rd_qos;
3815 reg [max_burst_bits-1:0] rd_data;
3816 wire [addr_width-1:0] rd_addr;
3817 wire [max_burst_bytes_width:0] rd_bytes;
3825 .qos1(ocm_wr_qos_port0),
3826 .qos2(ocm_wr_qos_port1),
3828 .prt_dv1(ocm_wr_dv_port0),
3829 .prt_dv2(ocm_wr_dv_port1),
3831 .prt_data1(ocm_wr_data_port0),
3832 .prt_data2(ocm_wr_data_port1),
3834 .prt_strb1(ocm_wr_strb_port0),
3835 .prt_strb2(ocm_wr_strb_port1),
3837 .prt_addr1(ocm_wr_addr_port0),
3838 .prt_addr2(ocm_wr_addr_port1),
3840 .prt_bytes1(ocm_wr_bytes_port0),
3841 .prt_bytes2(ocm_wr_bytes_port1),
3843 .prt_ack1(ocm_wr_ack_port0),
3844 .prt_ack2(ocm_wr_ack_port1),
3851 .prt_bytes(wr_bytes),
3860 .qos1(ocm_rd_qos_port0),
3861 .qos2(ocm_rd_qos_port1),
3863 .prt_req1(ocm_rd_req_port0),
3864 .prt_req2(ocm_rd_req_port1),
3866 .prt_data1(ocm_rd_data_port0),
3867 .prt_data2(ocm_rd_data_port1),
3869 .prt_addr1(ocm_rd_addr_port0),
3870 .prt_addr2(ocm_rd_addr_port1),
3872 .prt_bytes1(ocm_rd_bytes_port0),
3873 .prt_bytes2(ocm_rd_bytes_port1),
3875 .prt_dv1(ocm_rd_dv_port0),
3876 .prt_dv2(ocm_rd_dv_port1),
3882 .prt_bytes(rd_bytes),
3890 always@(posedge sw_clk or negedge rstn)
3903 ocm.write_mem(wr_data , wr_addr, wr_bytes, wr_strb);
3904 //$display(" ocm_write_data wr_addr %0h wr_data %0h wr_bytes %0h wr_strb %0h",wr_addr,wr_data,wr_bytes,wr_strb);
3909 ocm.read_mem(rd_data,rd_addr, rd_bytes);
3910 //$display(" ocm_read_data rd_addr %0h rd_data %0h rd_bytes %0h ",rd_addr,rd_data,rd_bytes);
3939 module processing_system7_vip_v1_0_10_interconnect_model (
4066 /* Goes to port 1 of DDR */
4081 /* Goes to port2 of DDR */
4096 /* Goes to port3 of DDR */
4111 /* Goes to port1 of OCM */
4126 /* Goes to port1 for RegMap */
4135 `include "processing_system7_vip_v1_0_10_local_params.v"
4140 input [axi_qos_width-1:0] w_qos_gp0;
4141 input [axi_qos_width-1:0] w_qos_gp1;
4142 input [axi_qos_width-1:0] w_qos_hp0;
4143 input [axi_qos_width-1:0] w_qos_hp1;
4144 input [axi_qos_width-1:0] w_qos_hp2;
4145 input [axi_qos_width-1:0] w_qos_hp3;
4147 input [axi_qos_width-1:0] r_qos_gp0;
4148 input [axi_qos_width-1:0] r_qos_gp1;
4149 input [axi_qos_width-1:0] r_qos_hp0;
4150 input [axi_qos_width-1:0] r_qos_hp1;
4151 input [axi_qos_width-1:0] r_qos_hp2;
4152 input [axi_qos_width-1:0] r_qos_hp3;
4154 output [axi_qos_width-1:0] ocm_wr_qos_port1;
4155 output [axi_qos_width-1:0] ocm_rd_qos_port1;
4157 output wr_ack_ddr_gp0;
4158 output wr_ack_ocm_gp0;
4159 input[max_burst_bits-1:0] wr_data_gp0;
4160 input[max_burst_bytes-1:0] wr_strb_gp0;
4161 input[addr_width-1:0] wr_addr_gp0;
4162 input[max_burst_bytes_width:0] wr_bytes_gp0;
4163 input wr_dv_ddr_gp0;
4164 input wr_dv_ocm_gp0;
4165 input rd_req_ddr_gp0;
4166 input rd_req_ocm_gp0;
4167 input rd_req_reg_gp0;
4168 input[addr_width-1:0] rd_addr_gp0;
4169 input[max_burst_bytes_width:0] rd_bytes_gp0;
4170 output[max_burst_bits-1:0] rd_data_ddr_gp0;
4171 output[max_burst_bits-1:0] rd_data_ocm_gp0;
4172 output[max_burst_bits-1:0] rd_data_reg_gp0;
4173 output rd_dv_ddr_gp0;
4174 output rd_dv_ocm_gp0;
4175 output rd_dv_reg_gp0;
4177 output wr_ack_ddr_gp1;
4178 output wr_ack_ocm_gp1;
4179 input[max_burst_bits-1:0] wr_data_gp1;
4180 input[max_burst_bytes-1:0] wr_strb_gp1;
4181 input[addr_width-1:0] wr_addr_gp1;
4182 input[max_burst_bytes_width:0] wr_bytes_gp1;
4183 input wr_dv_ddr_gp1;
4184 input wr_dv_ocm_gp1;
4185 input rd_req_ddr_gp1;
4186 input rd_req_ocm_gp1;
4187 input rd_req_reg_gp1;
4188 input[addr_width-1:0] rd_addr_gp1;
4189 input[max_burst_bytes_width:0] rd_bytes_gp1;
4190 output[max_burst_bits-1:0] rd_data_ddr_gp1;
4191 output[max_burst_bits-1:0] rd_data_ocm_gp1;
4192 output[max_burst_bits-1:0] rd_data_reg_gp1;
4193 output rd_dv_ddr_gp1;
4194 output rd_dv_ocm_gp1;
4195 output rd_dv_reg_gp1;
4197 output wr_ack_ddr_hp0;
4198 output wr_ack_ocm_hp0;
4199 input[max_burst_bits-1:0] wr_data_hp0;
4200 input[max_burst_bytes-1:0] wr_strb_hp0;
4201 input[addr_width-1:0] wr_addr_hp0;
4202 input[max_burst_bytes_width:0] wr_bytes_hp0;
4203 input wr_dv_ddr_hp0;
4204 input wr_dv_ocm_hp0;
4205 input rd_req_ddr_hp0;
4206 input rd_req_ocm_hp0;
4207 input[addr_width-1:0] rd_addr_hp0;
4208 input[max_burst_bytes_width:0] rd_bytes_hp0;
4209 output[max_burst_bits-1:0] rd_data_ddr_hp0;
4210 output[max_burst_bits-1:0] rd_data_ocm_hp0;
4211 output rd_dv_ddr_hp0;
4212 output rd_dv_ocm_hp0;
4214 output wr_ack_ddr_hp1;
4215 output wr_ack_ocm_hp1;
4216 input[max_burst_bits-1:0] wr_data_hp1;
4217 input[max_burst_bytes-1:0] wr_strb_hp1;
4218 input[addr_width-1:0] wr_addr_hp1;
4219 input[max_burst_bytes_width:0] wr_bytes_hp1;
4220 input wr_dv_ddr_hp1;
4221 input wr_dv_ocm_hp1;
4222 input rd_req_ddr_hp1;
4223 input rd_req_ocm_hp1;
4224 input[addr_width-1:0] rd_addr_hp1;
4225 input[max_burst_bytes_width:0] rd_bytes_hp1;
4226 output[max_burst_bits-1:0] rd_data_ddr_hp1;
4227 output[max_burst_bits-1:0] rd_data_ocm_hp1;
4228 output rd_dv_ddr_hp1;
4229 output rd_dv_ocm_hp1;
4231 output wr_ack_ddr_hp2;
4232 output wr_ack_ocm_hp2;
4233 input[max_burst_bits-1:0] wr_data_hp2;
4234 input[max_burst_bytes-1:0] wr_strb_hp2;
4235 input[addr_width-1:0] wr_addr_hp2;
4236 input[max_burst_bytes_width:0] wr_bytes_hp2;
4237 input wr_dv_ddr_hp2;
4238 input wr_dv_ocm_hp2;
4239 input rd_req_ddr_hp2;
4240 input rd_req_ocm_hp2;
4241 input[addr_width-1:0] rd_addr_hp2;
4242 input[max_burst_bytes_width:0] rd_bytes_hp2;
4243 output[max_burst_bits-1:0] rd_data_ddr_hp2;
4244 output[max_burst_bits-1:0] rd_data_ocm_hp2;
4245 output rd_dv_ddr_hp2;
4246 output rd_dv_ocm_hp2;
4248 output wr_ack_ddr_hp3;
4249 output wr_ack_ocm_hp3;
4250 input[max_burst_bits-1:0] wr_data_hp3;
4251 input[max_burst_bytes-1:0] wr_strb_hp3;
4252 input[addr_width-1:0] wr_addr_hp3;
4253 input[max_burst_bytes_width:0] wr_bytes_hp3;
4254 input wr_dv_ddr_hp3;
4255 input wr_dv_ocm_hp3;
4256 input rd_req_ddr_hp3;
4257 input rd_req_ocm_hp3;
4258 input[addr_width-1:0] rd_addr_hp3;
4259 input[max_burst_bytes_width:0] rd_bytes_hp3;
4260 output[max_burst_bits-1:0] rd_data_ddr_hp3;
4261 output[max_burst_bits-1:0] rd_data_ocm_hp3;
4262 output rd_dv_ddr_hp3;
4263 output rd_dv_ocm_hp3;
4265 /* Goes to port 1 of DDR */
4266 input ddr_wr_ack_port1;
4267 output ddr_wr_dv_port1;
4268 output ddr_rd_req_port1;
4269 input ddr_rd_dv_port1;
4270 output[addr_width-1:0] ddr_wr_addr_port1;
4271 output[max_burst_bits-1:0] ddr_wr_data_port1;
4272 output[max_burst_bytes-1:0] ddr_wr_strb_port1;
4273 output[max_burst_bytes_width:0] ddr_wr_bytes_port1;
4274 output[addr_width-1:0] ddr_rd_addr_port1;
4275 input[max_burst_bits-1:0] ddr_rd_data_port1;
4276 output[max_burst_bytes_width:0] ddr_rd_bytes_port1;
4277 output [axi_qos_width-1:0] ddr_wr_qos_port1;
4278 output [axi_qos_width-1:0] ddr_rd_qos_port1;
4280 /* Goes to port2 of DDR */
4281 input ddr_wr_ack_port2;
4282 output ddr_wr_dv_port2;
4283 output ddr_rd_req_port2;
4284 input ddr_rd_dv_port2;
4285 output[addr_width-1:0] ddr_wr_addr_port2;
4286 output[max_burst_bits-1:0] ddr_wr_data_port2;
4287 output[max_burst_bytes-1:0] ddr_wr_strb_port2;
4288 output[max_burst_bytes_width:0] ddr_wr_bytes_port2;
4289 output[addr_width-1:0] ddr_rd_addr_port2;
4290 input[max_burst_bits-1:0] ddr_rd_data_port2;
4291 output[max_burst_bytes_width:0] ddr_rd_bytes_port2;
4292 output [axi_qos_width-1:0] ddr_wr_qos_port2;
4293 output [axi_qos_width-1:0] ddr_rd_qos_port2;
4295 /* Goes to port3 of DDR */
4296 input ddr_wr_ack_port3;
4297 output ddr_wr_dv_port3;
4298 output ddr_rd_req_port3;
4299 input ddr_rd_dv_port3;
4300 output[addr_width-1:0] ddr_wr_addr_port3;
4301 output[max_burst_bits-1:0] ddr_wr_data_port3;
4302 output[max_burst_bytes-1:0] ddr_wr_strb_port3;
4303 output[max_burst_bytes_width:0] ddr_wr_bytes_port3;
4304 output[addr_width-1:0] ddr_rd_addr_port3;
4305 input[max_burst_bits-1:0] ddr_rd_data_port3;
4306 output[max_burst_bytes_width:0] ddr_rd_bytes_port3;
4307 output [axi_qos_width-1:0] ddr_wr_qos_port3;
4308 output [axi_qos_width-1:0] ddr_rd_qos_port3;
4310 /* Goes to port1 of OCM */
4311 input ocm_wr_ack_port1;
4312 output ocm_wr_dv_port1;
4313 output ocm_rd_req_port1;
4314 input ocm_rd_dv_port1;
4315 output[max_burst_bits-1:0] ocm_wr_data_port1;
4316 output[max_burst_bytes-1:0] ocm_wr_strb_port1;
4317 output[addr_width-1:0] ocm_wr_addr_port1;
4318 output[max_burst_bytes_width:0] ocm_wr_bytes_port1;
4319 input[max_burst_bits-1:0] ocm_rd_data_port1;
4320 output[addr_width-1:0] ocm_rd_addr_port1;
4321 output[max_burst_bytes_width:0] ocm_rd_bytes_port1;
4323 /* Goes to port1 of REG */
4324 output [axi_qos_width-1:0] reg_rd_qos_port1;
4325 output reg_rd_req_port1;
4326 input reg_rd_dv_port1;
4327 input[max_burst_bits-1:0] reg_rd_data_port1;
4328 output[addr_width-1:0] reg_rd_addr_port1;
4329 output[max_burst_bytes_width:0] reg_rd_bytes_port1;
4331 wire ocm_wr_dv_osw0;
4332 wire ocm_wr_dv_osw1;
4333 wire[max_burst_bits-1:0] ocm_wr_data_osw0;
4334 wire[max_burst_bits-1:0] ocm_wr_data_osw1;
4335 wire[max_burst_bytes-1:0] ocm_wr_strb_osw0;
4336 wire[max_burst_bytes-1:0] ocm_wr_strb_osw1;
4337 wire[addr_width-1:0] ocm_wr_addr_osw0;
4338 wire[addr_width-1:0] ocm_wr_addr_osw1;
4339 wire[max_burst_bytes_width:0] ocm_wr_bytes_osw0;
4340 wire[max_burst_bytes_width:0] ocm_wr_bytes_osw1;
4341 wire ocm_wr_ack_osw0;
4342 wire ocm_wr_ack_osw1;
4343 wire ocm_rd_req_osw0;
4344 wire ocm_rd_req_osw1;
4345 wire[max_burst_bits-1:0] ocm_rd_data_osw0;
4346 wire[max_burst_bits-1:0] ocm_rd_data_osw1;
4347 wire[addr_width-1:0] ocm_rd_addr_osw0;
4348 wire[addr_width-1:0] ocm_rd_addr_osw1;
4349 wire[max_burst_bytes_width:0] ocm_rd_bytes_osw0;
4350 wire[max_burst_bytes_width:0] ocm_rd_bytes_osw1;
4351 wire ocm_rd_dv_osw0;
4352 wire ocm_rd_dv_osw1;
4354 wire [axi_qos_width-1:0] ocm_wr_qos_osw0;
4355 wire [axi_qos_width-1:0] ocm_wr_qos_osw1;
4356 wire [axi_qos_width-1:0] ocm_rd_qos_osw0;
4357 wire [axi_qos_width-1:0] ocm_rd_qos_osw1;
4360 processing_system7_vip_v1_0_10_fmsw_gp fmsw (
4364 .w_qos_gp0(w_qos_gp0),
4365 .r_qos_gp0(r_qos_gp0),
4366 .wr_ack_ocm_gp0(wr_ack_ocm_gp0),
4367 .wr_ack_ddr_gp0(wr_ack_ddr_gp0),
4368 .wr_data_gp0(wr_data_gp0),
4369 .wr_strb_gp0(wr_strb_gp0),
4370 .wr_addr_gp0(wr_addr_gp0),
4371 .wr_bytes_gp0(wr_bytes_gp0),
4372 .wr_dv_ocm_gp0(wr_dv_ocm_gp0),
4373 .wr_dv_ddr_gp0(wr_dv_ddr_gp0),
4374 .rd_req_ocm_gp0(rd_req_ocm_gp0),
4375 .rd_req_ddr_gp0(rd_req_ddr_gp0),
4376 .rd_req_reg_gp0(rd_req_reg_gp0),
4377 .rd_addr_gp0(rd_addr_gp0),
4378 .rd_bytes_gp0(rd_bytes_gp0),
4379 .rd_data_ddr_gp0(rd_data_ddr_gp0),
4380 .rd_data_ocm_gp0(rd_data_ocm_gp0),
4381 .rd_data_reg_gp0(rd_data_reg_gp0),
4382 .rd_dv_ocm_gp0(rd_dv_ocm_gp0),
4383 .rd_dv_ddr_gp0(rd_dv_ddr_gp0),
4384 .rd_dv_reg_gp0(rd_dv_reg_gp0),
4386 .w_qos_gp1(w_qos_gp1),
4387 .r_qos_gp1(r_qos_gp1),
4388 .wr_ack_ocm_gp1(wr_ack_ocm_gp1),
4389 .wr_ack_ddr_gp1(wr_ack_ddr_gp1),
4390 .wr_data_gp1(wr_data_gp1),
4391 .wr_strb_gp1(wr_strb_gp1),
4392 .wr_addr_gp1(wr_addr_gp1),
4393 .wr_bytes_gp1(wr_bytes_gp1),
4394 .wr_dv_ocm_gp1(wr_dv_ocm_gp1),
4395 .wr_dv_ddr_gp1(wr_dv_ddr_gp1),
4396 .rd_req_ocm_gp1(rd_req_ocm_gp1),
4397 .rd_req_ddr_gp1(rd_req_ddr_gp1),
4398 .rd_req_reg_gp1(rd_req_reg_gp1),
4399 .rd_addr_gp1(rd_addr_gp1),
4400 .rd_bytes_gp1(rd_bytes_gp1),
4401 .rd_data_ddr_gp1(rd_data_ddr_gp1),
4402 .rd_data_ocm_gp1(rd_data_ocm_gp1),
4403 .rd_data_reg_gp1(rd_data_reg_gp1),
4404 .rd_dv_ocm_gp1(rd_dv_ocm_gp1),
4405 .rd_dv_ddr_gp1(rd_dv_ddr_gp1),
4406 .rd_dv_reg_gp1(rd_dv_reg_gp1),
4408 .ocm_wr_ack (ocm_wr_ack_osw0),
4409 .ocm_wr_dv (ocm_wr_dv_osw0),
4410 .ocm_rd_req (ocm_rd_req_osw0),
4411 .ocm_rd_dv (ocm_rd_dv_osw0),
4412 .ocm_wr_addr(ocm_wr_addr_osw0),
4413 .ocm_wr_data(ocm_wr_data_osw0),
4414 .ocm_wr_strb(ocm_wr_strb_osw0),
4415 .ocm_wr_bytes(ocm_wr_bytes_osw0),
4416 .ocm_rd_addr(ocm_rd_addr_osw0),
4417 .ocm_rd_data(ocm_rd_data_osw0),
4418 .ocm_rd_bytes(ocm_rd_bytes_osw0),
4420 .ocm_wr_qos(ocm_wr_qos_osw0),
4421 .ocm_rd_qos(ocm_rd_qos_osw0),
4423 .ddr_wr_qos(ddr_wr_qos_port1),
4424 .ddr_rd_qos(ddr_rd_qos_port1),
4426 .reg_rd_qos(reg_rd_qos_port1),
4428 .ddr_wr_ack(ddr_wr_ack_port1),
4429 .ddr_wr_dv(ddr_wr_dv_port1),
4430 .ddr_rd_req(ddr_rd_req_port1),
4431 .ddr_rd_dv(ddr_rd_dv_port1),
4432 .ddr_wr_addr(ddr_wr_addr_port1),
4433 .ddr_wr_data(ddr_wr_data_port1),
4434 .ddr_wr_strb(ddr_wr_strb_port1),
4435 .ddr_wr_bytes(ddr_wr_bytes_port1),
4436 .ddr_rd_addr(ddr_rd_addr_port1),
4437 .ddr_rd_data(ddr_rd_data_port1),
4438 .ddr_rd_bytes(ddr_rd_bytes_port1),
4440 .reg_rd_req(reg_rd_req_port1),
4441 .reg_rd_dv(reg_rd_dv_port1),
4442 .reg_rd_addr(reg_rd_addr_port1),
4443 .reg_rd_data(reg_rd_data_port1),
4444 .reg_rd_bytes(reg_rd_bytes_port1)
4448 processing_system7_vip_v1_0_10_ssw_hp ssw(
4451 .w_qos_hp0(w_qos_hp0),
4452 .r_qos_hp0(r_qos_hp0),
4453 .w_qos_hp1(w_qos_hp1),
4454 .r_qos_hp1(r_qos_hp1),
4455 .w_qos_hp2(w_qos_hp2),
4456 .r_qos_hp2(r_qos_hp2),
4457 .w_qos_hp3(w_qos_hp3),
4458 .r_qos_hp3(r_qos_hp3),
4460 .wr_ack_ddr_hp0(wr_ack_ddr_hp0),
4461 .wr_data_hp0(wr_data_hp0),
4462 .wr_strb_hp0(wr_strb_hp0),
4463 .wr_addr_hp0(wr_addr_hp0),
4464 .wr_bytes_hp0(wr_bytes_hp0),
4465 .wr_dv_ddr_hp0(wr_dv_ddr_hp0),
4466 .rd_req_ddr_hp0(rd_req_ddr_hp0),
4467 .rd_addr_hp0(rd_addr_hp0),
4468 .rd_bytes_hp0(rd_bytes_hp0),
4469 .rd_data_ddr_hp0(rd_data_ddr_hp0),
4470 .rd_data_ocm_hp0(rd_data_ocm_hp0),
4471 .rd_dv_ddr_hp0(rd_dv_ddr_hp0),
4473 .wr_ack_ocm_hp0(wr_ack_ocm_hp0),
4474 .wr_dv_ocm_hp0(wr_dv_ocm_hp0),
4475 .rd_req_ocm_hp0(rd_req_ocm_hp0),
4476 .rd_dv_ocm_hp0(rd_dv_ocm_hp0),
4478 .wr_ack_ddr_hp1(wr_ack_ddr_hp1),
4479 .wr_data_hp1(wr_data_hp1),
4480 .wr_strb_hp1(wr_strb_hp1),
4481 .wr_addr_hp1(wr_addr_hp1),
4482 .wr_bytes_hp1(wr_bytes_hp1),
4483 .wr_dv_ddr_hp1(wr_dv_ddr_hp1),
4484 .rd_req_ddr_hp1(rd_req_ddr_hp1),
4485 .rd_addr_hp1(rd_addr_hp1),
4486 .rd_bytes_hp1(rd_bytes_hp1),
4487 .rd_data_ddr_hp1(rd_data_ddr_hp1),
4488 .rd_data_ocm_hp1(rd_data_ocm_hp1),
4489 .rd_dv_ddr_hp1(rd_dv_ddr_hp1),
4491 .wr_ack_ocm_hp1(wr_ack_ocm_hp1),
4492 .wr_dv_ocm_hp1(wr_dv_ocm_hp1),
4493 .rd_req_ocm_hp1(rd_req_ocm_hp1),
4494 .rd_dv_ocm_hp1(rd_dv_ocm_hp1),
4496 .wr_ack_ddr_hp2(wr_ack_ddr_hp2),
4497 .wr_data_hp2(wr_data_hp2),
4498 .wr_strb_hp2(wr_strb_hp2),
4499 .wr_addr_hp2(wr_addr_hp2),
4500 .wr_bytes_hp2(wr_bytes_hp2),
4501 .wr_dv_ddr_hp2(wr_dv_ddr_hp2),
4502 .rd_req_ddr_hp2(rd_req_ddr_hp2),
4503 .rd_addr_hp2(rd_addr_hp2),
4504 .rd_bytes_hp2(rd_bytes_hp2),
4505 .rd_data_ddr_hp2(rd_data_ddr_hp2),
4506 .rd_data_ocm_hp2(rd_data_ocm_hp2),
4507 .rd_dv_ddr_hp2(rd_dv_ddr_hp2),
4509 .wr_ack_ocm_hp2(wr_ack_ocm_hp2),
4510 .wr_dv_ocm_hp2(wr_dv_ocm_hp2),
4511 .rd_req_ocm_hp2(rd_req_ocm_hp2),
4512 .rd_dv_ocm_hp2(rd_dv_ocm_hp2),
4514 .wr_ack_ddr_hp3(wr_ack_ddr_hp3),
4515 .wr_data_hp3(wr_data_hp3),
4516 .wr_strb_hp3(wr_strb_hp3),
4517 .wr_addr_hp3(wr_addr_hp3),
4518 .wr_bytes_hp3(wr_bytes_hp3),
4519 .wr_dv_ddr_hp3(wr_dv_ddr_hp3),
4520 .rd_req_ddr_hp3(rd_req_ddr_hp3),
4521 .rd_addr_hp3(rd_addr_hp3),
4522 .rd_bytes_hp3(rd_bytes_hp3),
4523 .rd_data_ddr_hp3(rd_data_ddr_hp3),
4524 .rd_data_ocm_hp3(rd_data_ocm_hp3),
4525 .rd_dv_ddr_hp3(rd_dv_ddr_hp3),
4527 .wr_ack_ocm_hp3(wr_ack_ocm_hp3),
4528 .wr_dv_ocm_hp3(wr_dv_ocm_hp3),
4529 .rd_req_ocm_hp3(rd_req_ocm_hp3),
4530 .rd_dv_ocm_hp3(rd_dv_ocm_hp3),
4532 .ddr_wr_ack0(ddr_wr_ack_port2),
4533 .ddr_wr_dv0(ddr_wr_dv_port2),
4534 .ddr_rd_req0(ddr_rd_req_port2),
4535 .ddr_rd_dv0(ddr_rd_dv_port2),
4536 .ddr_wr_addr0(ddr_wr_addr_port2),
4537 .ddr_wr_data0(ddr_wr_data_port2),
4538 .ddr_wr_strb0(ddr_wr_strb_port2),
4539 .ddr_wr_bytes0(ddr_wr_bytes_port2),
4540 .ddr_rd_addr0(ddr_rd_addr_port2),
4541 .ddr_rd_data0(ddr_rd_data_port2),
4542 .ddr_rd_bytes0(ddr_rd_bytes_port2),
4543 .ddr_wr_qos0(ddr_wr_qos_port2),
4544 .ddr_rd_qos0(ddr_rd_qos_port2),
4546 .ddr_wr_ack1(ddr_wr_ack_port3),
4547 .ddr_wr_dv1(ddr_wr_dv_port3),
4548 .ddr_rd_req1(ddr_rd_req_port3),
4549 .ddr_rd_dv1(ddr_rd_dv_port3),
4550 .ddr_wr_addr1(ddr_wr_addr_port3),
4551 .ddr_wr_data1(ddr_wr_data_port3),
4552 .ddr_wr_strb1(ddr_wr_strb_port3),
4553 .ddr_wr_bytes1(ddr_wr_bytes_port3),
4554 .ddr_rd_addr1(ddr_rd_addr_port3),
4555 .ddr_rd_data1(ddr_rd_data_port3),
4556 .ddr_rd_bytes1(ddr_rd_bytes_port3),
4557 .ddr_wr_qos1(ddr_wr_qos_port3),
4558 .ddr_rd_qos1(ddr_rd_qos_port3),
4560 .ocm_wr_qos(ocm_wr_qos_osw1),
4561 .ocm_rd_qos(ocm_rd_qos_osw1),
4563 .ocm_wr_ack (ocm_wr_ack_osw1),
4564 .ocm_wr_dv (ocm_wr_dv_osw1),
4565 .ocm_rd_req (ocm_rd_req_osw1),
4566 .ocm_rd_dv (ocm_rd_dv_osw1),
4567 .ocm_wr_addr(ocm_wr_addr_osw1),
4568 .ocm_wr_data(ocm_wr_data_osw1),
4569 .ocm_wr_strb(ocm_wr_strb_osw1),
4570 .ocm_wr_bytes(ocm_wr_bytes_osw1),
4571 .ocm_rd_addr(ocm_rd_addr_osw1),
4572 .ocm_rd_data(ocm_rd_data_osw1),
4573 .ocm_rd_bytes(ocm_rd_bytes_osw1)
4577 processing_system7_vip_v1_0_10_arb_wr osw_wr (
4580 .qos1(ocm_wr_qos_osw0), /// chk
4581 .qos2(ocm_wr_qos_osw1), /// chk
4582 .prt_dv1(ocm_wr_dv_osw0),
4583 .prt_dv2(ocm_wr_dv_osw1),
4584 .prt_data1(ocm_wr_data_osw0),
4585 .prt_data2(ocm_wr_data_osw1),
4586 .prt_strb1(ocm_wr_strb_osw0),
4587 .prt_strb2(ocm_wr_strb_osw1),
4588 .prt_addr1(ocm_wr_addr_osw0),
4589 .prt_addr2(ocm_wr_addr_osw1),
4590 .prt_bytes1(ocm_wr_bytes_osw0),
4591 .prt_bytes2(ocm_wr_bytes_osw1),
4592 .prt_ack1(ocm_wr_ack_osw0),
4593 .prt_ack2(ocm_wr_ack_osw1),
4594 .prt_req(ocm_wr_dv_port1),
4595 .prt_qos(ocm_wr_qos_port1),
4596 .prt_data(ocm_wr_data_port1),
4597 .prt_strb(ocm_wr_strb_port1),
4598 .prt_addr(ocm_wr_addr_port1),
4599 .prt_bytes(ocm_wr_bytes_port1),
4600 .prt_ack(ocm_wr_ack_port1)
4603 processing_system7_vip_v1_0_10_arb_rd osw_rd(
4606 .qos1(ocm_rd_qos_osw0), // chk
4607 .qos2(ocm_rd_qos_osw1), // chk
4608 .prt_req1(ocm_rd_req_osw0),
4609 .prt_req2(ocm_rd_req_osw1),
4610 .prt_data1(ocm_rd_data_osw0),
4611 .prt_data2(ocm_rd_data_osw1),
4612 .prt_addr1(ocm_rd_addr_osw0),
4613 .prt_addr2(ocm_rd_addr_osw1),
4614 .prt_bytes1(ocm_rd_bytes_osw0),
4615 .prt_bytes2(ocm_rd_bytes_osw1),
4616 .prt_dv1(ocm_rd_dv_osw0),
4617 .prt_dv2(ocm_rd_dv_osw1),
4618 .prt_req(ocm_rd_req_port1),
4619 .prt_qos(ocm_rd_qos_port1),
4620 .prt_data(ocm_rd_data_port1),
4621 .prt_addr(ocm_rd_addr_port1),
4622 .prt_bytes(ocm_rd_bytes_port1),
4623 .prt_dv(ocm_rd_dv_port1)
4638 module processing_system7_vip_v1_0_10_gen_reset(
4682 input m_axi_gp0_clk;
4683 input m_axi_gp1_clk;
4684 input s_axi_gp0_clk;
4685 input s_axi_gp1_clk;
4686 input s_axi_hp0_clk;
4687 input s_axi_hp1_clk;
4688 input s_axi_hp2_clk;
4689 input s_axi_hp3_clk;
4690 input s_axi_acp_clk;
4692 output reg m_axi_gp0_rstn;
4693 output reg m_axi_gp1_rstn;
4694 output reg s_axi_gp0_rstn;
4695 output reg s_axi_gp1_rstn;
4696 output reg s_axi_hp0_rstn;
4697 output reg s_axi_hp1_rstn;
4698 output reg s_axi_hp2_rstn;
4699 output reg s_axi_hp3_rstn;
4700 output reg s_axi_acp_rstn;
4703 output fclk_reset3_n;
4704 output fclk_reset2_n;
4705 output fclk_reset1_n;
4706 output fclk_reset0_n;
4708 output fpga_acp_reset_n;
4709 output fpga_gp_m0_reset_n;
4710 output fpga_gp_m1_reset_n;
4711 output fpga_gp_s0_reset_n;
4712 output fpga_gp_s1_reset_n;
4713 output fpga_hp_s0_reset_n;
4714 output fpga_hp_s1_reset_n;
4715 output fpga_hp_s2_reset_n;
4716 output fpga_hp_s3_reset_n;
4718 reg [31:0] fabric_rst_n;
4720 reg r_m_axi_gp0_rstn;
4721 reg r_m_axi_gp1_rstn;
4722 reg r_s_axi_gp0_rstn;
4723 reg r_s_axi_gp1_rstn;
4724 reg r_s_axi_hp0_rstn;
4725 reg r_s_axi_hp1_rstn;
4726 reg r_s_axi_hp2_rstn;
4727 reg r_s_axi_hp3_rstn;
4728 reg r_s_axi_acp_rstn;
4730 assign rst_out_n = por_rst_n & sys_rst_n;
4732 assign fclk_reset0_n = !fabric_rst_n[0];
4733 assign fclk_reset1_n = !fabric_rst_n[1];
4734 assign fclk_reset2_n = !fabric_rst_n[2];
4735 assign fclk_reset3_n = !fabric_rst_n[3];
4737 assign fpga_acp_reset_n = !fabric_rst_n[24];
4739 assign fpga_hp_s3_reset_n = !fabric_rst_n[23];
4740 assign fpga_hp_s2_reset_n = !fabric_rst_n[22];
4741 assign fpga_hp_s1_reset_n = !fabric_rst_n[21];
4742 assign fpga_hp_s0_reset_n = !fabric_rst_n[20];
4744 assign fpga_gp_s1_reset_n = !fabric_rst_n[17];
4745 assign fpga_gp_s0_reset_n = !fabric_rst_n[16];
4746 assign fpga_gp_m1_reset_n = !fabric_rst_n[13];
4747 assign fpga_gp_m0_reset_n = !fabric_rst_n[12];
4749 task fpga_soft_reset;
4750 input[31:0] reset_ctrl;
4752 fabric_rst_n[0] = reset_ctrl[0];
4753 fabric_rst_n[1] = reset_ctrl[1];
4754 fabric_rst_n[2] = reset_ctrl[2];
4755 fabric_rst_n[3] = reset_ctrl[3];
4757 fabric_rst_n[12] = reset_ctrl[12];
4758 fabric_rst_n[13] = reset_ctrl[13];
4759 fabric_rst_n[16] = reset_ctrl[16];
4760 fabric_rst_n[17] = reset_ctrl[17];
4762 fabric_rst_n[20] = reset_ctrl[20];
4763 fabric_rst_n[21] = reset_ctrl[21];
4764 fabric_rst_n[22] = reset_ctrl[22];
4765 fabric_rst_n[23] = reset_ctrl[23];
4767 fabric_rst_n[24] = reset_ctrl[24];
4771 // task por_srstb_reset;
4772 // input por_reset_ctrl;
4774 // por_rst_n = por_reset_ctrl;
4775 // sys_rst_n = por_reset_ctrl;
4779 always@(negedge por_rst_n or negedge sys_rst_n) fabric_rst_n = 32'h01f3_300f;
4781 always@(posedge m_axi_gp0_clk or negedge (por_rst_n & sys_rst_n))
4783 if (!(por_rst_n & sys_rst_n))
4784 m_axi_gp0_rstn = 1
'b0;
4786 m_axi_gp0_rstn = 1'b1;
4789 always@(posedge m_axi_gp1_clk or negedge (por_rst_n & sys_rst_n))
4791 if (!(por_rst_n & sys_rst_n))
4792 m_axi_gp1_rstn = 1
'b0;
4794 m_axi_gp1_rstn = 1'b1;
4797 always@(posedge s_axi_gp0_clk or negedge (por_rst_n & sys_rst_n))
4799 if (!(por_rst_n & sys_rst_n))
4800 s_axi_gp0_rstn = 1
'b0;
4802 s_axi_gp0_rstn = 1'b1;
4805 always@(posedge s_axi_gp1_clk or negedge (por_rst_n & sys_rst_n))
4807 if (!(por_rst_n & sys_rst_n))
4808 s_axi_gp1_rstn = 1
'b0;
4810 s_axi_gp1_rstn = 1'b1;
4813 always@(posedge s_axi_hp0_clk or negedge (por_rst_n & sys_rst_n))
4815 if (!(por_rst_n & sys_rst_n))
4816 s_axi_hp0_rstn = 1
'b0;
4818 s_axi_hp0_rstn = 1'b1;
4821 always@(posedge s_axi_hp1_clk or negedge (por_rst_n & sys_rst_n))
4823 if (!(por_rst_n & sys_rst_n))
4824 s_axi_hp1_rstn = 1
'b0;
4826 s_axi_hp1_rstn = 1'b1;
4829 always@(posedge s_axi_hp2_clk or negedge (por_rst_n & sys_rst_n))
4831 if (!(por_rst_n & sys_rst_n))
4832 s_axi_hp2_rstn = 1
'b0;
4834 s_axi_hp2_rstn = 1'b1;
4837 always@(posedge s_axi_hp3_clk or negedge (por_rst_n & sys_rst_n))
4839 if (!(por_rst_n & sys_rst_n))
4840 s_axi_hp3_rstn = 1
'b0;
4842 s_axi_hp3_rstn = 1'b1;
4845 always@(posedge s_axi_acp_clk or negedge (por_rst_n & sys_rst_n))
4847 if (!(por_rst_n & sys_rst_n))
4848 s_axi_acp_rstn = 1
'b0;
4850 s_axi_acp_rstn = 1'b1;
4855 if ((por_rst_n!= 1
'b0) && (por_rst_n!= 1'b1) && (sys_rst_n != 1
'b0) && (sys_rst_n != 1'b1)) begin
4856 $display(
" Error:processing_system7_vip_v1_0_10_gen_reset. PS_PORB and PS_SRSTB must be driven to known state");
4892 parameter freq_clk3 = 50;
4893 parameter freq_clk2 = 50;
4894 parameter freq_clk1 = 50;
4895 parameter freq_clk0 = 50;
4903 assign fclk_clk0 = clk0;
4904 assign fclk_clk1 = clk1;
4905 assign fclk_clk2 = clk2;
4906 assign fclk_clk3 = clk3;
4908 real clk3_p = (1000.00/freq_clk3)/2;
4909 real clk2_p = (1000.00/freq_clk2)/2;
4910 real clk1_p = (1000.00/freq_clk1)/2;
4911 real clk0_p = (1000.00/freq_clk0)/2;
4913 always #(clk3_p) clk3 = !clk3;
4914 always #(clk2_p) clk2 = !clk2;
4915 always #(clk1_p) clk1 = !clk1;
4916 always #(clk0_p) clk0 = !clk0;
4918 always #(0.5) sw_clk = !sw_clk;
4934 module processing_system7_vip_v1_0_10_ddrc(
4938 /* Goes to port 0 of DDR */
4954 /* Goes to port 1 of DDR */
4969 /* Goes to port2 of DDR */
4984 /* Goes to port3 of DDR */
5001 `include "processing_system7_vip_v1_0_10_local_params.v"
5006 output ddr_wr_ack_port0;
5007 input ddr_wr_dv_port0;
5008 input ddr_rd_req_port0;
5009 output ddr_rd_dv_port0;
5010 input[addr_width-1:0] ddr_wr_addr_port0;
5011 input[max_burst_bits-1:0] ddr_wr_data_port0;
5012 input[max_burst_bytes_width:0] ddr_wr_bytes_port0;
5013 input[max_burst_bytes-1:0] ddr_wr_strb_port0;
5014 input[addr_width-1:0] ddr_rd_addr_port0;
5015 output[max_burst_bits-1:0] ddr_rd_data_port0;
5016 input[max_burst_bytes_width:0] ddr_rd_bytes_port0;
5017 input [axi_qos_width-1:0] ddr_wr_qos_port0;
5018 input [axi_qos_width-1:0] ddr_rd_qos_port0;
5020 output ddr_wr_ack_port1;
5021 input ddr_wr_dv_port1;
5022 input ddr_rd_req_port1;
5023 output ddr_rd_dv_port1;
5024 input[addr_width-1:0] ddr_wr_addr_port1;
5025 input[max_burst_bits-1:0] ddr_wr_data_port1;
5026 input[max_burst_bytes_width:0] ddr_wr_bytes_port1;
5027 input[max_burst_bytes-1:0] ddr_wr_strb_port1;
5028 input[addr_width-1:0] ddr_rd_addr_port1;
5029 output[max_burst_bits-1:0] ddr_rd_data_port1;
5030 input[max_burst_bytes_width:0] ddr_rd_bytes_port1;
5031 input[axi_qos_width-1:0] ddr_wr_qos_port1;
5032 input[axi_qos_width-1:0] ddr_rd_qos_port1;
5034 output ddr_wr_ack_port2;
5035 input ddr_wr_dv_port2;
5036 input ddr_rd_req_port2;
5037 output ddr_rd_dv_port2;
5038 input[addr_width-1:0] ddr_wr_addr_port2;
5039 input[max_burst_bits-1:0] ddr_wr_data_port2;
5040 input[max_burst_bytes_width:0] ddr_wr_bytes_port2;
5041 input[max_burst_bytes-1:0] ddr_wr_strb_port2;
5042 input[addr_width-1:0] ddr_rd_addr_port2;
5043 output[max_burst_bits-1:0] ddr_rd_data_port2;
5044 input[max_burst_bytes_width:0] ddr_rd_bytes_port2;
5045 input[axi_qos_width-1:0] ddr_wr_qos_port2;
5046 input[axi_qos_width-1:0] ddr_rd_qos_port2;
5048 output ddr_wr_ack_port3;
5049 input ddr_wr_dv_port3;
5050 input ddr_rd_req_port3;
5051 output ddr_rd_dv_port3;
5052 input[addr_width-1:0] ddr_wr_addr_port3;
5053 input[max_burst_bits-1:0] ddr_wr_data_port3;
5054 input[max_burst_bytes_width:0] ddr_wr_bytes_port3;
5055 input[max_burst_bytes-1:0] ddr_wr_strb_port3;
5056 input[addr_width-1:0] ddr_rd_addr_port3;
5057 output[max_burst_bits-1:0] ddr_rd_data_port3;
5058 input[max_burst_bytes_width:0] ddr_rd_bytes_port3;
5059 input[axi_qos_width-1:0] ddr_wr_qos_port3;
5060 input[axi_qos_width-1:0] ddr_rd_qos_port3;
5062 wire [axi_qos_width-1:0] wr_qos;
5064 wire [max_burst_bits-1:0] wr_data;
5065 wire [max_burst_bytes-1:0] wr_strb;
5066 wire [addr_width-1:0] wr_addr;
5067 wire [max_burst_bytes_width:0] wr_bytes;
5070 wire [axi_qos_width-1:0] rd_qos;
5071 reg [max_burst_bits-1:0] rd_data;
5072 wire [addr_width-1:0] rd_addr;
5073 wire [max_burst_bytes_width:0] rd_bytes;
5077 processing_system7_vip_v1_0_10_arb_wr_4 ddr_write_ports (
5081 .qos1(ddr_wr_qos_port0),
5082 .qos2(ddr_wr_qos_port1),
5083 .qos3(ddr_wr_qos_port2),
5084 .qos4(ddr_wr_qos_port3),
5086 .prt_dv1(ddr_wr_dv_port0),
5087 .prt_dv2(ddr_wr_dv_port1),
5088 .prt_dv3(ddr_wr_dv_port2),
5089 .prt_dv4(ddr_wr_dv_port3),
5091 .prt_data1(ddr_wr_data_port0),
5092 .prt_data2(ddr_wr_data_port1),
5093 .prt_data3(ddr_wr_data_port2),
5094 .prt_data4(ddr_wr_data_port3),
5096 .prt_strb1(ddr_wr_strb_port0),
5097 .prt_strb2(ddr_wr_strb_port1),
5098 .prt_strb3(ddr_wr_strb_port2),
5099 .prt_strb4(ddr_wr_strb_port3),
5101 .prt_addr1(ddr_wr_addr_port0),
5102 .prt_addr2(ddr_wr_addr_port1),
5103 .prt_addr3(ddr_wr_addr_port2),
5104 .prt_addr4(ddr_wr_addr_port3),
5106 .prt_bytes1(ddr_wr_bytes_port0),
5107 .prt_bytes2(ddr_wr_bytes_port1),
5108 .prt_bytes3(ddr_wr_bytes_port2),
5109 .prt_bytes4(ddr_wr_bytes_port3),
5111 .prt_ack1(ddr_wr_ack_port0),
5112 .prt_ack2(ddr_wr_ack_port1),
5113 .prt_ack3(ddr_wr_ack_port2),
5114 .prt_ack4(ddr_wr_ack_port3),
5121 .prt_bytes(wr_bytes),
5126 processing_system7_vip_v1_0_10_arb_rd_4 ddr_read_ports (
5130 .qos1(ddr_rd_qos_port0),
5131 .qos2(ddr_rd_qos_port1),
5132 .qos3(ddr_rd_qos_port2),
5133 .qos4(ddr_rd_qos_port3),
5135 .prt_req1(ddr_rd_req_port0),
5136 .prt_req2(ddr_rd_req_port1),
5137 .prt_req3(ddr_rd_req_port2),
5138 .prt_req4(ddr_rd_req_port3),
5140 .prt_data1(ddr_rd_data_port0),
5141 .prt_data2(ddr_rd_data_port1),
5142 .prt_data3(ddr_rd_data_port2),
5143 .prt_data4(ddr_rd_data_port3),
5145 .prt_addr1(ddr_rd_addr_port0),
5146 .prt_addr2(ddr_rd_addr_port1),
5147 .prt_addr3(ddr_rd_addr_port2),
5148 .prt_addr4(ddr_rd_addr_port3),
5150 .prt_bytes1(ddr_rd_bytes_port0),
5151 .prt_bytes2(ddr_rd_bytes_port1),
5152 .prt_bytes3(ddr_rd_bytes_port2),
5153 .prt_bytes4(ddr_rd_bytes_port3),
5155 .prt_dv1(ddr_rd_dv_port0),
5156 .prt_dv2(ddr_rd_dv_port1),
5157 .prt_dv3(ddr_rd_dv_port2),
5158 .prt_dv4(ddr_rd_dv_port3),
5164 .prt_bytes(rd_bytes),
5169 processing_system7_vip_v1_0_10_sparse_mem ddr();
5172 // always@(posedge sw_clk or negedge rstn)
5207 always@(posedge sw_clk or negedge rstn)
5220 $display("wr_addr %0h,wr_data %0h,wr_bytes %0h , wr_strb %0h ",wr_addr,wr_data,wr_bytes,wr_strb);
5221 ddr.write_mem(wr_data , wr_addr, wr_bytes, wr_strb);
5222 // ddr.write_mem(wr_data , wr_addr, wr_bytes, 16'hFFFF);
5227 ddr.read_mem(rd_data,rd_addr, rd_bytes);
5259 import axi_vip_pkg::*;
5331 parameter enable_this_port = 0;
5332 parameter slave_name =
"Slave";
5333 parameter data_bus_width = 32;
5334 parameter address_bus_width = 32;
5335 parameter id_bus_width = 6;
5336 parameter slave_base_address = 0;
5337 parameter slave_high_address = 4;
5338 parameter max_outstanding_transactions = 8;
5339 parameter exclusive_access_supported = 0;
5340 parameter max_wr_outstanding_transactions = 8;
5341 parameter max_rd_outstanding_transactions = 8;
5342 parameter wr_bytes_lsb = 0;
5343 `include
"processing_system7_vip_v1_0_10_local_params.v"
5344 parameter wr_bytes_msb = max_burst_bytes_width;
5345 parameter wr_addr_lsb = wr_bytes_msb + 1;
5346 parameter wr_addr_msb = wr_addr_lsb + addr_width-1;
5347 parameter wr_data_lsb = wr_addr_msb + 1;
5349 parameter wr_fifo_data_bits = ((data_bus_width/8)*axi_burst_len) + (data_bus_width*axi_burst_len) + axi_qos_width + addr_width + (max_burst_bytes_width+1);
5356 parameter wr_data_msb = wr_data_lsb + (data_bus_width*axi_burst_len)-1;
5357 parameter wr_qos_lsb = wr_data_msb + 1;
5358 parameter wr_qos_msb = wr_qos_lsb + axi_qos_width-1;
5361 parameter int_wr_cntr_width = clogb2(max_wr_outstanding_transactions+1);
5362 parameter int_rd_cntr_width = clogb2(max_rd_outstanding_transactions+1);
5374 parameter wr_strb_lsb = wr_qos_msb + 1;
5375 parameter wr_strb_msb = wr_strb_lsb + ((data_bus_width/8)*axi_burst_len)-1;
5378 parameter rsp_fifo_bits = axi_rsp_width+id_bus_width;
5379 parameter rsp_lsb = 0;
5380 parameter rsp_msb = axi_rsp_width-1;
5381 parameter rsp_id_lsb = rsp_msb + 1;
5382 parameter rsp_id_msb = rsp_id_lsb + id_bus_width-1;
5392 output [axi_rsp_width-1:0] S_BRESP;
5393 output [axi_rsp_width-1:0] S_RRESP;
5394 output [data_bus_width-1:0] S_RDATA;
5395 output [id_bus_width-1:0] S_BID;
5396 output [id_bus_width-1:0] S_RID;
5404 input [axi_brst_type_width-1:0] S_ARBURST;
5405 input [axi_lock_width-1:0] S_ARLOCK;
5406 input [axi_size_width-1:0] S_ARSIZE;
5407 input [axi_brst_type_width-1:0] S_AWBURST;
5408 input [axi_lock_width-1:0] S_AWLOCK;
5409 input [axi_size_width-1:0] S_AWSIZE;
5410 input [axi_prot_width-1:0] S_ARPROT;
5411 input [axi_prot_width-1:0] S_AWPROT;
5412 input [address_bus_width-1:0] S_ARADDR;
5413 input [address_bus_width-1:0] S_AWADDR;
5414 input [data_bus_width-1:0] S_WDATA;
5415 input [axi_cache_width-1:0] S_ARCACHE;
5416 input [axi_len_width-1:0] S_ARLEN;
5418 input [axi_qos_width-1:0] S_ARQOS;
5420 input [axi_cache_width-1:0] S_AWCACHE;
5421 input [axi_len_width-1:0] S_AWLEN;
5423 input [axi_qos_width-1:0] S_AWQOS;
5424 input [(data_bus_width/8)-1:0] S_WSTRB;
5425 input [id_bus_width-1:0] S_ARID;
5426 input [id_bus_width-1:0] S_AWID;
5427 input [id_bus_width-1:0] S_WID;
5430 input WR_DATA_ACK_DDR, WR_DATA_ACK_OCM;
5431 output reg WR_DATA_VALID_DDR, WR_DATA_VALID_OCM;
5432 output reg [max_burst_bits-1:0] WR_DATA;
5433 output reg [((data_bus_width/8)*axi_burst_len)-1:0] WR_DATA_STRB;
5434 output reg [addr_width-1:0] WR_ADDR;
5435 output reg [max_burst_bytes_width:0] WR_BYTES;
5436 output reg RD_REQ_OCM, RD_REQ_DDR, RD_REQ_REG;
5437 output reg [addr_width-1:0] RD_ADDR;
5438 input [max_burst_bits-1:0] RD_DATA_DDR,RD_DATA_OCM, RD_DATA_REG;
5439 output reg[max_burst_bytes_width:0] RD_BYTES;
5440 input RD_DATA_VALID_OCM,RD_DATA_VALID_DDR, RD_DATA_VALID_REG;
5441 output reg [axi_qos_width-1:0] WR_QOS, RD_QOS;
5445 bit [31:0] static_count;
5447 real s_aclk_period1;
5448 real s_aclk_period2;
5451 axi_slv_agent #(1,address_bus_width, data_bus_width, data_bus_width, id_bus_width,id_bus_width,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1) slv;
5455 .C_AXI_INTERFACE_MODE(2),
5456 .C_AXI_ADDR_WIDTH(address_bus_width),
5457 .C_AXI_WDATA_WIDTH(data_bus_width),
5458 .C_AXI_RDATA_WIDTH(data_bus_width),
5459 .C_AXI_WID_WIDTH(id_bus_width),
5460 .C_AXI_RID_WIDTH(id_bus_width),
5461 .C_AXI_AWUSER_WIDTH(0),
5462 .C_AXI_ARUSER_WIDTH(0),
5463 .C_AXI_WUSER_WIDTH(0),
5464 .C_AXI_RUSER_WIDTH(0),
5465 .C_AXI_BUSER_WIDTH(0),
5466 .C_AXI_SUPPORTS_NARROW(1),
5467 .C_AXI_HAS_BURST(1),
5469 .C_AXI_HAS_CACHE(1),
5470 .C_AXI_HAS_REGION(0),
5473 .C_AXI_HAS_WSTRB(1),
5474 .C_AXI_HAS_BRESP(1),
5475 .C_AXI_HAS_RRESP(1),
5476 .C_AXI_HAS_ARESETN(1)
5481 .s_axi_awid(S_AWID),
5482 .s_axi_awaddr(S_AWADDR),
5483 .s_axi_awlen(S_AWLEN),
5484 .s_axi_awsize(S_AWSIZE),
5485 .s_axi_awburst(S_AWBURST),
5486 .s_axi_awlock(S_AWLOCK),
5487 .s_axi_awcache(S_AWCACHE),
5488 .s_axi_awprot(S_AWPROT),
5489 .s_axi_awregion(4'B0),
5491 .s_axi_awuser(1'B0),
5492 .s_axi_awvalid(S_AWVALID),
5493 .s_axi_awready(S_AWREADY),
5495 .s_axi_wdata(S_WDATA),
5496 .s_axi_wstrb(S_WSTRB),
5497 .s_axi_wlast(S_WLAST),
5499 .s_axi_wvalid(S_WVALID),
5500 .s_axi_wready(S_WREADY),
5502 .s_axi_bresp(S_BRESP),
5504 .s_axi_bvalid(S_BVALID),
5505 .s_axi_bready(S_BREADY),
5506 .s_axi_arid(S_ARID),
5507 .s_axi_araddr(S_ARADDR),
5508 .s_axi_arlen(S_ARLEN),
5509 .s_axi_arsize(S_ARSIZE),
5510 .s_axi_arburst(S_ARBURST),
5511 .s_axi_arlock(S_ARLOCK),
5512 .s_axi_arcache(S_ARCACHE),
5513 .s_axi_arprot(S_ARPROT),
5514 .s_axi_arregion(4'B0),
5515 .s_axi_arqos(S_ARQOS),
5516 .s_axi_aruser(1
'B0),
5517 .s_axi_arvalid(S_ARVALID),
5518 .s_axi_arready(S_ARREADY),
5520 .s_axi_rdata(S_RDATA),
5521 .s_axi_rresp(S_RRESP),
5522 .s_axi_rlast(S_RLAST),
5524 .s_axi_rvalid(S_RVALID),
5525 .s_axi_rready(S_RREADY),
5538 .m_axi_awready(1'b0),
5545 .m_axi_wready(1
'b0),
5546 .m_axi_bid(12'h000),
5547 .m_axi_bresp(2
'b00),
5549 .m_axi_bvalid(1
'b0),
5563 .m_axi_arready(1'b0),
5564 .m_axi_rid(12
'h000),
5565 .m_axi_rdata(32'h00000000),
5566 .m_axi_rresp(2
'b00),
5569 .m_axi_rvalid(1'b0),
5573 xil_axi_cmd_beat twc, trc;
5574 xil_axi_write_beat twd;
5575 xil_axi_read_beat trd;
5576 axi_transaction twr, trr,trr_get_rd;
5577 axi_transaction trr_rd[$];
5580 axi_ready_gen awready_gen;
5581 axi_ready_gen wready_gen;
5582 axi_ready_gen arready_gen;
5583 integer i,j,k,add_val,size_local,burst_local,len_local,num_bytes;
5585 bit [15:0] a_16_bits,a_new,a_wrap,a_wrt_val,a_cnt;
5588 slv =
new(
"slv",slave.IF);
5591 trr_get_rd =
new(
"trr_get_rd");
5592 wready_gen = slv.wr_driver.create_ready(
"wready");
5593 slv.monitor.axi_wr_cmd_port.set_enabled();
5594 slv.monitor.axi_wr_beat_port.set_enabled();
5595 slv.monitor.axi_rd_cmd_port.set_enabled();
5596 slv.wr_driver.set_transaction_depth(max_wr_outstanding_transactions);
5597 slv.rd_driver.set_transaction_depth(max_rd_outstanding_transactions);
5602 slave.IF.set_enable_xchecks_to_warn();
5603 repeat(10) @(posedge S_ACLK);
5604 slave.IF.set_enable_xchecks();
5608 reg[1:0] latency_type = RANDOM_CASE;
5610 reg STOP_ON_ERROR = 1
'b1;
5612 /* WR_FIFO stores 32-bit address, valid data and valid bytes for each AXI Write burst transaction */
5613 reg [wr_fifo_data_bits-1:0] wr_fifo [0:max_wr_outstanding_transactions-1];
5614 reg [int_wr_cntr_width-1:0] wr_fifo_wr_ptr = 0, wr_fifo_rd_ptr = 0;
5617 /* Store the awvalid receive time --- necessary for calculating the latency in sending the bresp*/
5618 reg [7:0] aw_time_cnt = 0, bresp_time_cnt = 0;
5619 real awvalid_receive_time[0:max_wr_outstanding_transactions]; // store the time when a new awvalid is received
5620 reg awvalid_flag[0:max_wr_outstanding_transactions]; // indicates awvalid is received
5622 /* Address Write Channel handshake*/
5623 reg[int_wr_cntr_width-1:0] aw_cnt = 0;// count of awvalid
5625 /* various FIFOs for storing the ADDR channel info */
5626 reg [axi_size_width-1:0] awsize [0:max_wr_outstanding_transactions-1];
5627 reg [axi_prot_width-1:0] awprot [0:max_wr_outstanding_transactions-1];
5628 reg [axi_lock_width-1:0] awlock [0:max_wr_outstanding_transactions-1];
5629 reg [axi_cache_width-1:0] awcache [0:max_wr_outstanding_transactions-1];
5630 reg [axi_brst_type_width-1:0] awbrst [0:max_wr_outstanding_transactions-1];
5631 reg [axi_len_width-1:0] awlen [0:max_wr_outstanding_transactions-1];
5632 reg aw_flag [0:max_wr_outstanding_transactions-1];
5633 reg [addr_width-1:0] awaddr [0:max_wr_outstanding_transactions-1];
5634 reg [addr_width-1:0] addr_wr_local;
5635 reg [addr_width-1:0] addr_wr_final;
5637 reg [id_bus_width-1:0] awid [0:max_wr_outstanding_transactions-1];
5638 reg [axi_qos_width-1:0] awqos [0:max_wr_outstanding_transactions-1];
5639 wire aw_fifo_full; // indicates awvalid_fifo is full (max outstanding transactions reached)
5641 /* internal fifos to store burst write data, ID & strobes*/
5642 reg [(data_bus_width*axi_burst_len)-1:0] burst_data [0:max_wr_outstanding_transactions-1];
5643 reg [((data_bus_width/8)*axi_burst_len)-1:0] burst_strb [0:max_wr_outstanding_transactions-1];
5645 reg [max_burst_bytes_width:0] burst_valid_bytes [0:max_wr_outstanding_transactions-1]; /// total valid bytes received in a complete burst transfer
5646 reg [max_burst_bytes_width:0] valid_bytes = 0; /// total valid bytes received in a complete burst transfer
5647 reg wlast_flag [0:max_wr_outstanding_transactions-1]; // flag to indicate WLAST received
5650 /* Write Data Channel and Write Response handshake signals*/
5651 reg [int_wr_cntr_width-1:0] wd_cnt = 0;
5652 reg [(data_bus_width*axi_burst_len)-1:0] aligned_wr_data;
5653 reg [((data_bus_width/8)*axi_burst_len)-1:0] aligned_wr_strb;
5654 reg [addr_width-1:0] aligned_wr_addr;
5655 reg [max_burst_bytes_width:0] valid_data_bytes;
5656 reg [int_wr_cntr_width-1:0] wr_bresp_cnt = 0;
5657 reg [axi_rsp_width-1:0] bresp;
5658 reg [rsp_fifo_bits-1:0] fifo_bresp [0:max_wr_outstanding_transactions-1]; // store the ID and its corresponding response
5659 reg enable_write_bresp;
5660 reg [int_wr_cntr_width-1:0] rd_bresp_cnt = 0;
5661 integer wr_latency_count;
5663 wire bresp_fifo_empty;
5665 /* states for managing read/write to WR_FIFO */
5666 parameter SEND_DATA = 0, WAIT_ACK = 1;
5670 reg [axi_qos_width-1:0] ar_qos, aw_qos;
5673 if(DEBUG_INFO) begin
5674 if(enable_this_port)
5675 $display("[%0d] : %0s : %0s : Port is ENABLED.",$time, DISP_INFO, slave_name);
5677 $display("[%0d] : %0s : %0s : Port is DISABLED.",$time, DISP_INFO, slave_name);
5681 //initial slave.set_disable_reset_value_checks(1);
5683 repeat(2) @(posedge S_ACLK);
5684 if(!enable_this_port) begin
5685 // slave.set_channel_level_info(0);
5686 // slave.set_function_level_info(0);
5688 // slave.RESPONSE_TIMEOUT = 0;
5690 /*--------------------------------------------------------------------------------*/
5692 /* Set Latency type to be used */
5693 task set_latency_type;
5696 if(enable_this_port)
5700 $display("[%0d] : %0s : %0s : Port is disabled. 'Latency Profile
' will not be set...",$time, DISP_WARN, slave_name);
5704 /*--------------------------------------------------------------------------------*/
5706 /* Set verbosity to be used */
5707 task automatic set_verbosity;
5710 if(enable_this_port) begin
5711 slv.set_verbosity(verb);
5714 $display("[%0d] : %0s : %0s : Port is disabled. set_verbosity will not be set...",$time, DISP_WARN, slave_name);
5719 /*--------------------------------------------------------------------------------*/
5723 /* Set ARQoS to be used */
5724 task automatic set_arqos;
5725 input[axi_qos_width-1:0] qos;
5727 if(enable_this_port) begin
5731 $display("[%0d] : %0s : %0s : Port is disabled. 'ARQOS' will not be set...",$time, DISP_WARN, slave_name);
5736 /*--------------------------------------------------------------------------------*/
5738 /* Set AWQoS to be used */
5740 input[axi_qos_width-1:0] qos;
5742 if(enable_this_port)
5746 $display("[%0d] : %0s : %0s : Port is disabled. 'AWQOS' will not be set...",$time, DISP_WARN, slave_name);
5750 /*--------------------------------------------------------------------------------*/
5751 /* get the wr latency number */
5752 function [31:0] get_wr_lat_number;
5757 BEST_CASE : if(slave_name == axi_acp_name) get_wr_lat_number = acp_wr_min; else get_wr_lat_number = gp_wr_min;
5758 AVG_CASE : if(slave_name == axi_acp_name) get_wr_lat_number = acp_wr_avg; else get_wr_lat_number = gp_wr_avg;
5759 WORST_CASE : if(slave_name == axi_acp_name) get_wr_lat_number = acp_wr_max; else get_wr_lat_number = gp_wr_max;
5760 default : begin // RANDOM_CASE
5763 2'b00 :
if(slave_name == axi_acp_name) get_wr_lat_number = ($random()%10+ acp_wr_min);
else get_wr_lat_number = ($random()%10+ gp_wr_min);
5764 2
'b01 : if(slave_name == axi_acp_name) get_wr_lat_number = ($random()%40+ acp_wr_avg); else get_wr_lat_number = ($random()%40+ gp_wr_avg);
5765 default : if(slave_name == axi_acp_name) get_wr_lat_number = ($random()%60+ acp_wr_max); else get_wr_lat_number = ($random()%60+ gp_wr_max);
5771 /*--------------------------------------------------------------------------------*/
5773 /* get the rd latency number */
5774 function [31:0] get_rd_lat_number;
5779 BEST_CASE : if(slave_name == axi_acp_name) get_rd_lat_number = acp_rd_min; else get_rd_lat_number = gp_rd_min;
5780 AVG_CASE : if(slave_name == axi_acp_name) get_rd_lat_number = acp_rd_avg; else get_rd_lat_number = gp_rd_avg;
5781 WORST_CASE : if(slave_name == axi_acp_name) get_rd_lat_number = acp_rd_max; else get_rd_lat_number = gp_rd_max;
5782 default : begin // RANDOM_CASE
5785 2'b00 :
if(slave_name == axi_acp_name) get_rd_lat_number = ($random()%10+ acp_rd_min);
else get_rd_lat_number = ($random()%10+ gp_rd_min);
5786 2
'b01 : if(slave_name == axi_acp_name) get_rd_lat_number = ($random()%40+ acp_rd_avg); else get_rd_lat_number = ($random()%40+ gp_rd_avg);
5787 default : if(slave_name == axi_acp_name) get_rd_lat_number = ($random()%60+ acp_rd_max); else get_rd_lat_number = ($random()%60+ gp_rd_max);
5794 /* Store the Clock cycle time period */
5800 s_aclk_period1 = $realtime;
5802 s_aclk_period2 = $realtime;
5803 diff_time = s_aclk_period2 - s_aclk_period1;
5806 /*--------------------------------------------------------------------------------*/
5808 /* Check for any WRITE/READs when this port is disabled */
5809 always@(S_AWVALID or S_WVALID or S_ARVALID)
5811 if((S_AWVALID | S_WVALID | S_ARVALID) && !enable_this_port) begin
5812 $display("[%0d] : %0s : %0s : Port is disabled. AXI transaction is initiated on this port ...\nSimulation will halt ..",$time, DISP_ERR, slave_name);
5818 /*--------------------------------------------------------------------------------*/
5821 assign net_ARVALID = enable_this_port ? S_ARVALID : 1'b0;
5822 assign net_AWVALID = enable_this_port ? S_AWVALID : 1
'b0;
5823 assign net_WVALID = enable_this_port ? S_WVALID : 1'b0;
5825 assign wr_fifo_empty = (wr_fifo_wr_ptr === wr_fifo_rd_ptr)?1
'b1: 1'b0;
5826 assign aw_fifo_full = ((aw_cnt[int_wr_cntr_width-1] !== rd_bresp_cnt[int_wr_cntr_width-1]) && (aw_cnt[int_wr_cntr_width-2:0] === rd_bresp_cnt[int_wr_cntr_width-2:0]))?1
'b1 :1'b0;
5827 assign wd_fifo_full = ((wd_cnt[int_wr_cntr_width-1] !== rd_bresp_cnt[int_wr_cntr_width-1]) && (wd_cnt[int_wr_cntr_width-2:0] === rd_bresp_cnt[int_wr_cntr_width-2:0]))?1
'b1 :1'b0;
5828 assign bresp_fifo_empty = (wr_bresp_cnt === rd_bresp_cnt)?1
'b1:1'b0;
5832 always@(negedge S_RESETN or posedge S_ACLK)
5837 if(net_AWVALID && S_AWREADY) begin
5838 awvalid_receive_time[aw_time_cnt] = $realtime;
5839 awvalid_flag[aw_time_cnt] = 1
'b1;
5840 aw_time_cnt = aw_time_cnt + 1;
5841 if(aw_time_cnt === max_wr_outstanding_transactions) aw_time_cnt = 0;
5845 /*--------------------------------------------------------------------------------*/
5846 always@(posedge S_ACLK)
5848 if(net_AWVALID && S_AWREADY) begin
5849 if(S_AWQOS === 0) begin awqos[aw_cnt[int_wr_cntr_width-2:0]] = aw_qos;
5850 end else awqos[aw_cnt[int_wr_cntr_width-2:0]] = S_AWQOS;
5853 /*--------------------------------------------------------------------------------*/
5855 always@(aw_fifo_full)
5857 if(aw_fifo_full && DEBUG_INFO)
5858 $display("[%0d] : %0s : %0s : Reached the maximum outstanding Write transactions limit (%0d). Blocking all future Write transactions until at least 1 of the outstanding Write transaction has completed.",$time, DISP_INFO, slave_name,max_wr_outstanding_transactions);
5860 /*--------------------------------------------------------------------------------*/
5862 /* Address Write Channel handshake*/
5863 always@(negedge S_RESETN or posedge S_ACLK)
5868 if(!aw_fifo_full) begin
5869 slv.monitor.axi_wr_cmd_port.get(twc);
5870 // awaddr[aw_cnt[int_wr_cntr_width-2:0]] = twc.addr;
5871 awlen[aw_cnt[int_wr_cntr_width-2:0]] = twc.len;
5872 awsize[aw_cnt[int_wr_cntr_width-2:0]] = twc.size;
5873 awbrst[aw_cnt[int_wr_cntr_width-2:0]] = twc.burst;
5874 awlock[aw_cnt[int_wr_cntr_width-2:0]] = twc.lock;
5875 awcache[aw_cnt[int_wr_cntr_width-2:0]]= twc.cache;
5876 awprot[aw_cnt[int_wr_cntr_width-2:0]] = twc.prot;
5877 awid[aw_cnt[int_wr_cntr_width-2:0]] = twc.id;
5878 aw_flag[aw_cnt[int_wr_cntr_width-2:0]] = 1;
5879 // aw_cnt = aw_cnt + 1;
5880 size_local = twc.size;
5881 burst_local = twc.burst;
5882 len_local = twc.len;
5883 if(burst_local == AXI_INCR || burst_local == AXI_FIXED) begin
5884 if(data_bus_width === 'd128) begin
5885 if(size_local ===
'd0) a = {twc.addr[3:0]};
5886 if(size_local === 'd1) a = {twc.addr[3:1],1
'b0};
5887 if(size_local === 'd2) a = {twc.addr[3:2],2
'b0};
5888 if(size_local === 'd3) a = {twc.addr[3],3
'b0};
5889 if(size_local === 'd4) a =
'b0;
5890 end else if(data_bus_width === 'd64 ) begin
5891 if(size_local ===
'd0) a = {twc.addr[2:0]};
5892 if(size_local === 'd1) a = {twc.addr[2:1],1
'b0};
5893 if(size_local === 'd2) a = {twc.addr[2],2
'b0};
5894 if(size_local === 'd3) a =
'b0;
5895 end else if(data_bus_width === 'd32 ) begin
5896 if(size_local ===
'd0) a = {twc.addr[1:0]};
5897 if(size_local === 'd1) a = {twc.addr[1],1
'b0};
5898 if(size_local === 'd2) a =
'b0;
5900 end if(burst_local == AXI_WRAP) begin
5901 if(data_bus_width === 'd128) begin
5902 if(size_local ===
'd0) a = {twc.addr[3:0]};
5903 if(size_local === 'd1) a = {twc.addr[3:1],1
'b0};
5904 if(size_local === 'd2) a = {twc.addr[3:2],2
'b0};
5905 if(size_local === 'd3) a = {twc.addr[3],3
'b0};
5906 if(size_local === 'd4) a =
'b0;
5907 end else if(data_bus_width === 'd64 ) begin
5908 if(size_local ===
'd0) a = {twc.addr[2:0]};
5909 if(size_local === 'd1) a = {twc.addr[2:1],1
'b0};
5910 if(size_local === 'd2) a = {twc.addr[2],2
'b0};
5911 if(size_local === 'd3) a =
'b0;
5912 end else if(data_bus_width === 'd32 ) begin
5913 if(size_local ===
'd0) a = {twc.addr[1:0]};
5914 if(size_local === 'd1) a = {twc.addr[1],1
'b0};
5915 if(size_local === 'd2) a =
'b0;
5917 // a = twc.addr[3:0];
5918 a_16_bits = twc.addr[7:0];
5919 num_bytes = ((len_local+1)*(2**size_local));
5920 // $display("num_bytes %0d num_bytes %0h",num_bytes,num_bytes);
5922 addr_wr_local = twc.addr;
5923 if(burst_local == AXI_INCR || burst_local == AXI_FIXED) begin
5925 0 : addr_wr_final = {addr_wr_local};
5926 1 : addr_wr_final = {addr_wr_local[31:1],1'b0};
5927 2 : addr_wr_final = {addr_wr_local[31:2],2
'b0};
5928 3 : addr_wr_final = {addr_wr_local[31:3],3'b0};
5929 4 : addr_wr_final = {addr_wr_local[31:4],4
'b0};
5930 5 : addr_wr_final = {addr_wr_local[31:5],5'b0};
5931 6 : addr_wr_final = {addr_wr_local[31:6],6
'b0};
5932 7 : addr_wr_final = {addr_wr_local[31:7],7'b0};
5934 awaddr[aw_cnt[int_wr_cntr_width-2:0]] = addr_wr_final;
5936 end
if(burst_local == AXI_WRAP) begin
5937 awaddr[aw_cnt[int_wr_cntr_width-2:0]] = twc.addr;
5940 aw_cnt = aw_cnt + 1;
5945 if(aw_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
5946 aw_cnt[int_wr_cntr_width-1] = ~aw_cnt[int_wr_cntr_width-1];
5947 aw_cnt[int_wr_cntr_width-2:0] = 0;
5985 always@(negedge S_RESETN or posedge S_ACLK)
5990 if(!wd_fifo_full && S_WVALID) begin
5991 slv.monitor.axi_wr_beat_port.get(twd);
5992 wait((aw_flag[wd_cnt[int_wr_cntr_width-2:0]] ===
'b1));
6004 // $display(" size_local %0d add_val %0d wd_cnt %0d",size_local,add_val,wd_cnt);
6005 // $display(" data depth : %0d size %0d srrb %0d last %0d burst %0d ",2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]],twd.get_data_size(),twd.get_strb_size(),twd.last,twc.burst);
6006 //$display(" a value is %0d ",a);
6008 for(i = 0; i < (2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]]); i = i+1) begin
6009 burst_data[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes*8)+(i*8))+:8] = twd.data[i+a];
6010 //$display("data burst %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h i %0d a %0d full data %0h",burst_data[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes*8)+(i*8))+:8],twd.data[i],twd.data[i+1],twd.data[i+2],twd.data[i+3],twd.data[i+4],twd.data[i+5],twd.data[i+a],i,a,twd.data[i+a]);
6011 //$display(" wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes*8)+(i*8) %0d wd_cnt %0d valid_bytes %0d int_wr_cntr_width %0d", wd_cnt[int_wr_cntr_width-2:0],wd_cnt,valid_bytes,int_wr_cntr_width);
6012 burst_strb[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes)+(i*1))+:1] = twd.strb[i+a];
6013 //$display("burst_strb %0h twd_strb %0h int_wr_cntr_width %0d valid_bytes %0d wd_cnt[int_wr_cntr_width-2:0] %0d twd.strb[i+a] %0b full strb %0h",burst_strb[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes)+(i*1))+:1],twd.strb[i],int_wr_cntr_width,valid_bytes,wd_cnt[int_wr_cntr_width-2:0],twd.strb[i+a],twd.strb[i+a]);
6014 //$display("burst_strb %0h twd.strb[i+1] %0h twd.strb[i+2] %0h twd.strb[i+3] %0h twd.strb[i+4] %0h twd.strb[i+5] %0h twd.strb[i+6] %0h twd.strb[i+7] %0h",twd.strb[i],twd.strb[i+1],twd.strb[i+1],twd.strb[i+2],twd.strb[i+3],twd.strb[i+4],twd.strb[i+5],twd.strb[i+6],twd.strb[i+7]);
6016 if(i == ((2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]])-1) ) begin
6017 if(burst_local == AXI_FIXED) begin
6019 end else if(burst_local == AXI_INCR) begin
6021 end else if(burst_local == AXI_WRAP) begin
6022 a_new = (a_16_bits/num_bytes)*num_bytes;
6023 a_wrap = a_new + (num_bytes);
6026 a_16_bits = a_16_bits+add_val;
6027 a_wrt_val = a_16_bits;
6028 //$display(" new a value for wrap a %0h add_val %0d a_wrap %0h a_wrt_val %0h a_new %0h num_bytes %0h a_cnt %0d ",a,add_val,a_wrap[3:0],a_wrt_val,a_new,num_bytes,a_cnt);
6029 if(a_wrt_val[15:0] >= a_wrap[15:0]) begin
6030 if(data_bus_width === 'd128)
6032 else if(data_bus_width ===
'd64)
6034 else if(data_bus_width === 'd32)
6045 if(burst_local == AXI_INCR) begin
6046 if( a >= (data_bus_width/8) || (burst_local == 0 ) || (twd.last) ) begin
6051 end
else if (burst_local == AXI_WRAP) begin
6052 if( ((a >= (data_bus_width/8)) ) || (burst_local == 0 ) || (twd.last) ) begin
6058 valid_bytes = valid_bytes+(2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
6061 if (twd.last ===
'b1) begin
6062 wlast_flag[wd_cnt[int_wr_cntr_width-2:0]] = 1'b1;
6063 burst_valid_bytes[wd_cnt[int_wr_cntr_width-2:0]] = valid_bytes;
6065 wd_cnt = wd_cnt + 1;
6069 if(wd_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
6070 wd_cnt[int_wr_cntr_width-1] = ~wd_cnt[int_wr_cntr_width-1];
6071 wd_cnt[int_wr_cntr_width-2:0] = 0;
6080 task automatic get_wrap_aligned_wr_data;
6081 output [(data_bus_width*axi_burst_len)-1:0] aligned_data;
6082 output [addr_width-1:0] start_addr;
6083 input [addr_width-1:0] addr;
6084 input [(data_bus_width*axi_burst_len)-1:0] b_data;
6085 input [max_burst_bytes_width:0] v_bytes;
6086 reg [(data_bus_width*axi_burst_len)-1:0] temp_data, wrp_data;
6090 start_addr = (addr/v_bytes) * v_bytes;
6091 wrp_bytes = addr - start_addr;
6094 wrp_data = wrp_data << ((data_bus_width*axi_burst_len) - (v_bytes*8));
6095 while(wrp_bytes > 0) begin
6096 temp_data = temp_data << 8;
6097 temp_data[7:0] = wrp_data[(data_bus_width*axi_burst_len)-1 : (data_bus_width*axi_burst_len)-8];
6098 wrp_data = wrp_data << 8;
6099 wrp_bytes = wrp_bytes - 1;
6101 wrp_bytes = addr - start_addr;
6102 wrp_data = b_data << (wrp_bytes*8);
6104 aligned_data = (temp_data | wrp_data);
6111 task automatic get_wrap_aligned_wr_strb;
6112 output [((data_bus_width/8)*axi_burst_len)-1:0] aligned_strb;
6113 output [addr_width-1:0] start_addr;
6114 input [addr_width-1:0] addr;
6115 input [((data_bus_width/8)*axi_burst_len)-1:0] b_strb;
6116 input [max_burst_bytes_width:0] v_bytes;
6117 reg [((data_bus_width/8)*axi_burst_len)-1:0] temp_strb, wrp_strb;
6122 start_addr = (addr/v_bytes) * v_bytes;
6124 wrp_bytes = addr - start_addr;
6130 wrp_strb = wrp_strb << (((data_bus_width/8)*axi_burst_len) - (v_bytes));
6132 while(wrp_bytes > 0) begin
6133 temp_strb = temp_strb << 1;
6134 temp_strb[0] = wrp_strb[((data_bus_width/8)*axi_burst_len) : ((data_bus_width/8)*axi_burst_len)-1];
6135 wrp_strb = wrp_strb << 1;
6136 wrp_bytes = wrp_bytes - 1;
6139 wrp_bytes = addr - start_addr;
6140 wrp_strb = b_strb << (wrp_bytes);
6142 aligned_strb = (temp_strb | wrp_strb);
6150 function [axi_rsp_width-1:0] calculate_resp;
6152 input [addr_width-1:0] awaddr;
6153 input [axi_prot_width-1:0] awprot;
6154 reg [axi_rsp_width-1:0] rsp;
6158 if(decode_address(awaddr) === INVALID_MEM_TYPE) begin
6160 $display(
"[%0d] : %0s : %0s : AXI Access to Invalid location(0x%0h) ",$time, DISP_ERR, slave_name, awaddr);
6162 if(!rd_wr && decode_address(awaddr) === REG_MEM) begin
6164 $display(
"[%0d] : %0s : %0s : AXI Write to Register Map(0x%0h) is not supported ",$time, DISP_ERR, slave_name, awaddr);
6166 if(secure_access_enabled && awprot[1])
6168 calculate_resp = rsp;
6175 always@(negedge S_RESETN or posedge S_ACLK)
6181 if((wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] ===
'b1) && (aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] === 'b1)) begin
6184 enable_write_bresp =
'b1;
6185 // $display("%t enable_write_bresp %0d wr_bresp_cnt %0d",$time ,enable_write_bresp,wr_bresp_cnt[int_wr_cntr_width-2:0]);
6187 // enable_write_bresp = aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] && wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]];
6188 /* calculate bresp only when AWVALID && WLAST is received */
6189 if(enable_write_bresp) begin
6190 aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] = 0;
6191 wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] = 0;
6192 // $display("awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]] %0h ",awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
6193 bresp = calculate_resp(1'b0, awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]],awprot[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
6194 fifo_bresp[wr_bresp_cnt[int_wr_cntr_width-2:0]] = {awid[wr_bresp_cnt[int_wr_cntr_width-2:0]],bresp};
6196 if(bresp === AXI_OK) begin
6197 if(awbrst[wr_bresp_cnt[int_wr_cntr_width-2:0]] === AXI_WRAP) begin
6198 get_wrap_aligned_wr_data(aligned_wr_data,aligned_wr_addr, awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_data[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
6199 get_wrap_aligned_wr_strb(aligned_wr_strb,aligned_wr_addr, awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_strb[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
6201 aligned_wr_data = burst_data[wr_bresp_cnt[int_wr_cntr_width-2:0]];
6202 aligned_wr_addr = awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]] ;
6203 aligned_wr_strb = burst_strb[wr_bresp_cnt[int_wr_cntr_width-2:0]];
6207 valid_data_bytes = burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-2:0]];
6209 valid_data_bytes = 0;
6211 if(awbrst[wr_bresp_cnt[int_wr_cntr_width-2:0]] != AXI_WRAP) begin
6213 wr_fifo[wr_fifo_wr_ptr[int_wr_cntr_width-2:0]] = {aligned_wr_strb,awqos[wr_bresp_cnt[int_wr_cntr_width-2:0]], aligned_wr_data, aligned_wr_addr, valid_data_bytes};
6215 wr_fifo[wr_fifo_wr_ptr[int_wr_cntr_width-2:0]] = {aligned_wr_strb,awqos[wr_bresp_cnt[int_wr_cntr_width-2:0]], aligned_wr_data, aligned_wr_addr, valid_data_bytes};
6217 wr_fifo_wr_ptr = wr_fifo_wr_ptr + 1;
6218 wr_bresp_cnt = wr_bresp_cnt+1;
6219 enable_write_bresp =
'b0;
6220 if(wr_bresp_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
6221 wr_bresp_cnt[int_wr_cntr_width-1] = ~ wr_bresp_cnt[int_wr_cntr_width-1];
6222 wr_bresp_cnt[int_wr_cntr_width-2:0] = 0;
6227 /*--------------------------------------------------------------------------------*/
6230 // /* Store the Write response for each write transaction */
6231 // always@(negedge S_RESETN or posedge S_ACLK)
6233 // if(!S_RESETN) begin
6234 // wr_bresp_cnt = 0;
6235 // wr_fifo_wr_ptr = 0;
6237 // enable_write_bresp = aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] && wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]];
6238 // /* calculate bresp only when AWVALID && WLAST is received */
6239 // if(enable_write_bresp) begin
6240 // aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] = 0;
6241 // wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] = 0;
6243 // bresp = calculate_resp(1'b0, awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]],awprot[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
6270 always@(negedge S_RESETN or posedge S_ACLK)
6274 wr_latency_count = get_wr_lat_number(1);
6285 if(awvalid_flag[bresp_time_cnt] && (($realtime - awvalid_receive_time[bresp_time_cnt])/diff_time >= wr_latency_count))
6287 if(!bresp_fifo_empty && wr_delayed) begin
6288 slv.wr_driver.get_wr_reactive(twr);
6289 twr.set_id(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-2:0]][rsp_id_msb : rsp_id_lsb]);
6290 case(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-2:0]][rsp_msb : rsp_lsb])
6291 2
'b00: twr.set_bresp(XIL_AXI_RESP_OKAY);
6292 2'b01: twr.set_bresp(XIL_AXI_RESP_EXOKAY);
6293 2
'b10: twr.set_bresp(XIL_AXI_RESP_SLVERR);
6294 2'b11: twr.set_bresp(XIL_AXI_RESP_DECERR);
6306 wready_gen.set_ready_policy(XIL_AXI_READY_GEN_NO_BACKPRESSURE);
6307 slv.wr_driver.send_wready(wready_gen);
6308 slv.wr_driver.send(twr);
6310 awvalid_flag[bresp_time_cnt] = 1
'b0;
6311 bresp_time_cnt = bresp_time_cnt+1;
6312 rd_bresp_cnt = rd_bresp_cnt + 1;
6313 if(rd_bresp_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
6314 rd_bresp_cnt[int_wr_cntr_width-1] = ~ rd_bresp_cnt[int_wr_cntr_width-1];
6315 rd_bresp_cnt[int_wr_cntr_width-2:0] = 0;
6317 if(bresp_time_cnt === max_wr_outstanding_transactions) begin
6320 wr_latency_count = get_wr_lat_number(1);
6326 /*--------------------------------------------------------------------------------*/
6328 // /* Send Write Response Channel handshake */
6329 // always@(negedge S_RESETN or posedge S_ACLK)
6331 // if(!S_RESETN) begin
6332 // rd_bresp_cnt = 0;
6333 // wr_latency_count = get_wr_lat_number(1);
6335 // bresp_time_cnt = 0;
6337 // if(static_count < 32 ) begin
6338 // wready_gen.set_ready_policy(XIL_AXI_READY_GEN_SINGLE);
6339 // wready_gen.set_low_time(0);
6340 // wready_gen.set_high_time(1);
6341 // slv.wr_driver.send_wready(wready_gen);
6343 // if(awvalid_flag[bresp_time_cnt] && (($time - awvalid_receive_time[bresp_time_cnt])/s_aclk_period >= wr_latency_count))
6345 // if(!bresp_fifo_empty && wr_delayed) begin
6346 // slv.wr_driver.get_wr_reactive(twr);
6347 // twr.set_id(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-2:0]][rsp_id_msb : rsp_id_lsb]);
6348 // case(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-2:0]][rsp_msb : rsp_lsb])
6349 // 2'b00: twr.set_bresp(XIL_AXI_RESP_OKAY);
6384 always@(negedge S_RESETN or posedge SW_CLK) begin
6386 WR_DATA_VALID_DDR = 1
'b0;
6387 WR_DATA_VALID_OCM = 1'b0;
6395 WR_DATA_VALID_OCM = 0;
6396 WR_DATA_VALID_DDR = 0;
6397 if(!wr_fifo_empty) begin
6398 WR_DATA = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_data_msb : wr_data_lsb];
6399 WR_ADDR = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_addr_msb : wr_addr_lsb];
6400 WR_BYTES = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_bytes_msb : wr_bytes_lsb];
6401 WR_QOS = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_qos_msb : wr_qos_lsb];
6402 WR_DATA_STRB = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_strb_msb : wr_strb_lsb];
6404 case (decode_address(wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_addr_msb : wr_addr_lsb]))
6405 OCM_MEM : WR_DATA_VALID_OCM = 1;
6406 DDR_MEM : WR_DATA_VALID_DDR = 1;
6407 default : state = SEND_DATA;
6409 wr_fifo_rd_ptr = wr_fifo_rd_ptr+1;
6414 if(WR_DATA_ACK_OCM | WR_DATA_ACK_DDR) begin
6415 WR_DATA_VALID_OCM = 1
'b0;
6416 WR_DATA_VALID_DDR = 1'b0;
6430 reg [7:0] ar_time_cnt = 0,rresp_time_cnt = 0;
6431 real arvalid_receive_time[0:max_rd_outstanding_transactions];
6432 reg arvalid_flag[0:max_rd_outstanding_transactions];
6433 reg [int_rd_cntr_width-1:0] ar_cnt = 0;
6436 reg [axi_size_width-1:0] arsize [0:max_rd_outstanding_transactions-1];
6437 reg [axi_prot_width-1:0] arprot [0:max_rd_outstanding_transactions-1];
6438 reg [axi_brst_type_width-1:0] arbrst [0:max_rd_outstanding_transactions-1];
6439 reg [axi_len_width-1:0] arlen [0:max_rd_outstanding_transactions-1];
6440 reg [axi_cache_width-1:0] arcache [0:max_rd_outstanding_transactions-1];
6441 reg [axi_lock_width-1:0] arlock [0:max_rd_outstanding_transactions-1];
6442 reg ar_flag [0:max_rd_outstanding_transactions-1];
6443 reg [addr_width-1:0] araddr [0:max_rd_outstanding_transactions-1];
6444 reg [addr_width-1:0] addr_local;
6445 reg [addr_width-1:0] addr_final;
6446 reg [id_bus_width-1:0] arid [0:max_rd_outstanding_transactions-1];
6447 reg [axi_qos_width-1:0] arqos [0:max_rd_outstanding_transactions-1];
6450 reg [int_rd_cntr_width-1:0] rd_cnt = 0;
6451 reg [int_rd_cntr_width-1:0] trr_rd_cnt = 0;
6452 reg [int_rd_cntr_width-1:0] wr_rresp_cnt = 0;
6453 reg [axi_rsp_width-1:0] rresp;
6454 reg [rsp_fifo_bits-1:0] fifo_rresp [0:max_rd_outstanding_transactions-1];
6457 integer rd_latency_count;
6459 reg read_fifo_empty;
6462 reg [max_burst_bits-1:0] read_fifo [0:max_rd_outstanding_transactions-1];
6463 reg [int_rd_cntr_width-1:0] rd_fifo_wr_ptr = 0, rd_fifo_rd_ptr = 0;
6464 wire read_fifo_full;
6466 assign read_fifo_full = (rd_fifo_wr_ptr[int_rd_cntr_width-1] !== rd_fifo_rd_ptr[int_rd_cntr_width-1] && rd_fifo_wr_ptr[int_rd_cntr_width-2:0] === rd_fifo_rd_ptr[int_rd_cntr_width-2:0])?1
'b1: 1'b0;
6467 assign read_fifo_empty = (rd_fifo_wr_ptr === rd_fifo_rd_ptr)?1
'b1: 1'b0;
6468 assign ar_fifo_full = ((ar_cnt[int_rd_cntr_width-1] !== rd_cnt[int_rd_cntr_width-1]) && (ar_cnt[int_rd_cntr_width-2:0] === rd_cnt[int_rd_cntr_width-2:0]))?1
'b1 :1'b0;
6471 always@(negedge S_RESETN or posedge S_ACLK)
6476 if(net_ARVALID ==
'b1 && S_ARREADY == 'b1) begin
6477 arvalid_receive_time[ar_time_cnt] = $time;
6478 arvalid_flag[ar_time_cnt] = 1
'b1;
6479 ar_time_cnt = ar_time_cnt + 1;
6480 if((ar_time_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) )
6481 ar_time_cnt[int_rd_cntr_width-1:0] = 0;
6485 /*--------------------------------------------------------------------------------*/
6486 always@(posedge S_ACLK)
6488 if(net_ARVALID == 'b1 && S_ARREADY ==
'b1) begin
6489 if(S_ARQOS === 0) begin
6490 arqos[ar_cnt[int_rd_cntr_width-2:0]] = ar_qos;
6492 arqos[ar_cnt[int_rd_cntr_width-2:0]] = S_ARQOS;
6496 /*--------------------------------------------------------------------------------*/
6498 always@(ar_fifo_full)
6500 if(ar_fifo_full && DEBUG_INFO)
6501 $display("[%0d] : %0s : %0s : Reached the maximum outstanding Read transactions limit (%0d). Blocking all future Read transactions until at least 1 of the outstanding Read transaction has completed.",$time, DISP_INFO, slave_name,max_rd_outstanding_transactions);
6503 /*--------------------------------------------------------------------------------*/
6505 /* Address Read Channel handshake*/
6506 always@(negedge S_RESETN or posedge S_ACLK)
6511 if(!ar_fifo_full) begin
6512 slv.monitor.axi_rd_cmd_port.get(trc);
6513 // araddr[ar_cnt[int_rd_cntr_width-2:0]] = trc.addr;
6514 arlen[ar_cnt[int_rd_cntr_width-2:0]] = trc.len;
6515 arsize[ar_cnt[int_rd_cntr_width-2:0]] = trc.size;
6516 arbrst[ar_cnt[int_rd_cntr_width-2:0]] = trc.burst;
6517 arlock[ar_cnt[int_rd_cntr_width-2:0]] = trc.lock;
6518 arcache[ar_cnt[int_rd_cntr_width-2:0]]= trc.cache;
6519 arprot[ar_cnt[int_rd_cntr_width-2:0]] = trc.prot;
6520 arid[ar_cnt[int_rd_cntr_width-2:0]] = trc.id;
6521 ar_flag[ar_cnt[int_rd_cntr_width-2:0]] = 1'b1;
6522 size_local = trc.size;
6523 addr_local = trc.addr;
6525 0 : addr_final = {addr_local};
6526 1 : addr_final = {addr_local[31:1],1
'b0};
6527 2 : addr_final = {addr_local[31:2],2'b0};
6528 3 : addr_final = {addr_local[31:3],3
'b0};
6529 4 : addr_final = {addr_local[31:4],4'b0};
6530 5 : addr_final = {addr_local[31:5],5
'b0};
6531 6 : addr_final = {addr_local[31:6],6'b0};
6532 7 : addr_final = {addr_local[31:7],7
'b0};
6534 araddr[ar_cnt[int_rd_cntr_width-2:0]] = addr_final;
6536 // $display(" %m before resetting ar_cnt %0d max_rd_outstanding_transactions %0d",ar_cnt,max_rd_outstanding_transactions-1);
6537 if(ar_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
6538 // ar_cnt[int_rd_cntr_width-1] = ~ ar_cnt[int_rd_cntr_width-1];
6539 ar_cnt[int_rd_cntr_width-1:0] = 0;
6540 // $display(" %m resetting ar_cnt %0d",ar_cnt);
6542 end /// if(!ar_fifo_full)
6545 /*--------------------------------------------------------------------------------*/
6547 /* Align Wrap data for read transaction*/
6548 task automatic get_wrap_aligned_rd_data;
6549 output [(data_bus_width*axi_burst_len)-1:0] aligned_data;
6550 input [addr_width-1:0] addr;
6551 input [(data_bus_width*axi_burst_len)-1:0] b_data;
6552 input [max_burst_bytes_width:0] v_bytes;
6553 reg [addr_width-1:0] start_addr;
6554 reg [(data_bus_width*axi_burst_len)-1:0] temp_data, wrp_data;
6558 start_addr = (addr/v_bytes) * v_bytes;
6559 wrp_bytes = addr - start_addr;
6562 while(wrp_bytes > 0) begin /// get the data that is wrapped
6563 temp_data = temp_data >> 8;
6564 temp_data[(data_bus_width*axi_burst_len)-1 : (data_bus_width*axi_burst_len)-8] = wrp_data[7:0];
6565 wrp_data = wrp_data >> 8;
6566 wrp_bytes = wrp_bytes - 1;
6568 temp_data = temp_data >> ((data_bus_width*axi_burst_len) - (v_bytes*8));
6569 wrp_bytes = addr - start_addr;
6570 wrp_data = b_data >> (wrp_bytes*8);
6572 aligned_data = (temp_data | wrp_data);
6575 /*--------------------------------------------------------------------------------*/
6577 parameter RD_DATA_REQ = 1'b0, WAIT_RD_VALID = 1
'b1;
6578 reg [addr_width-1:0] temp_read_address;
6579 reg [max_burst_bytes_width:0] temp_rd_valid_bytes;
6582 /* get the data from memory && also calculate the rresp*/
6583 always@(negedge S_RESETN or posedge SW_CLK)
6588 rd_fifo_state = RD_DATA_REQ;
6589 temp_rd_valid_bytes = 0;
6590 temp_read_address = 0;
6599 rd_fifo_state = RD_DATA_REQ;
6604 if(ar_flag[wr_rresp_cnt[int_rd_cntr_width-2:0]] && !read_fifo_full) begin
6605 ar_flag[wr_rresp_cnt[int_rd_cntr_width-2:0]] = 0;
6606 rresp = calculate_resp(1'b1, araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]],arprot[wr_rresp_cnt[int_rd_cntr_width-2:0]]);
6607 fifo_rresp[wr_rresp_cnt[int_rd_cntr_width-2:0]] = {arid[wr_rresp_cnt[int_rd_cntr_width-2:0]],rresp};
6608 temp_rd_valid_bytes = (arlen[wr_rresp_cnt[int_rd_cntr_width-2:0]]+1)*(2**arsize[wr_rresp_cnt[int_rd_cntr_width-2:0]]);
6610 if(arbrst[wr_rresp_cnt[int_rd_cntr_width-2:0]] === AXI_WRAP)
6611 temp_read_address = (araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]]/temp_rd_valid_bytes) * temp_rd_valid_bytes;
6613 temp_read_address = araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]];
6614 if(rresp === AXI_OK) begin
6615 case(decode_address(temp_read_address))
6616 OCM_MEM : RD_REQ_OCM = 1;
6617 DDR_MEM : RD_REQ_DDR = 1;
6618 REG_MEM : RD_REQ_REG = 1;
6619 default : invalid_rd_req = 1;
6624 RD_QOS = arqos[wr_rresp_cnt[int_rd_cntr_width-2:0]];
6625 RD_ADDR = temp_read_address;
6626 RD_BYTES = temp_rd_valid_bytes;
6627 rd_fifo_state = WAIT_RD_VALID;
6628 wr_rresp_cnt = wr_rresp_cnt + 1;
6629 if(wr_rresp_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
6631 wr_rresp_cnt[int_rd_cntr_width-1:0] = 0;
6635 WAIT_RD_VALID : begin
6636 rd_fifo_state = WAIT_RD_VALID;
6637 if(RD_DATA_VALID_OCM | RD_DATA_VALID_DDR | RD_DATA_VALID_REG | invalid_rd_req) begin
6638 if(RD_DATA_VALID_DDR)
6639 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = RD_DATA_DDR;
6640 else if(RD_DATA_VALID_OCM)
6641 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = RD_DATA_OCM;
6642 else if(RD_DATA_VALID_REG)
6643 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = RD_DATA_REG;
6645 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = 0;
6646 rd_fifo_wr_ptr = rd_fifo_wr_ptr + 1;
6652 rd_fifo_state = RD_DATA_REQ;
6660 reg[max_burst_bytes_width:0] rd_v_b;
6661 reg [(data_bus_width*axi_burst_len)-1:0] temp_read_data;
6662 reg [(data_bus_width*axi_burst_len)-1:0] temp_wrap_data;
6663 reg[(axi_rsp_width*axi_burst_len)-1:0] temp_read_rsp;
6665 xil_axi_data_beat new_data;
6682 slv.rd_driver.get_rd_reactive(trr);
6683 trr_rd.push_back(trr.my_clone());
6700 rd_latency_count = get_rd_lat_number(1);
6707 wait(arvalid_flag[rresp_time_cnt] == 1);
6711 rd_latency_count = get_rd_lat_number(1);
6718 wait(trr_rd.size() > 0);
6719 trr_get_rd = trr_rd.pop_front();
6721 while ((arvalid_flag[rresp_time_cnt] ==
'b1 )&& ((($realtime - arvalid_receive_time[rresp_time_cnt])/diff_time) < rd_latency_count)) begin
6725 //if(arvalid_flag[rresp_time_cnt] && ((($realtime - arvalid_receive_time[rresp_time_cnt])/diff_time) >= rd_latency_count))
6727 if(!read_fifo_empty && rd_delayed)begin
6729 arvalid_flag[rresp_time_cnt] = 1'b0;
6730 rd_v_b = ((arlen[rd_cnt[int_rd_cntr_width-2:0]]+1)*(2**arsize[rd_cnt[int_rd_cntr_width-2:0]]));
6731 temp_read_data = read_fifo[rd_fifo_rd_ptr[int_rd_cntr_width-2:0]];
6732 rd_fifo_rd_ptr = rd_fifo_rd_ptr+1;
6734 if(arbrst[rd_cnt[int_rd_cntr_width-2:0]]=== AXI_WRAP) begin
6735 get_wrap_aligned_rd_data(temp_wrap_data, araddr[rd_cnt[int_rd_cntr_width-2:0]], temp_read_data, rd_v_b);
6736 temp_read_data = temp_wrap_data;
6739 repeat(axi_burst_len) begin
6740 temp_read_rsp = temp_read_rsp >> axi_rsp_width;
6741 temp_read_rsp[(axi_rsp_width*axi_burst_len)-1:(axi_rsp_width*axi_burst_len)-axi_rsp_width] = fifo_rresp[rd_cnt[int_rd_cntr_width-2:0]][rsp_msb : rsp_lsb];
6743 case (arsize[rd_cnt[int_rd_cntr_width-2:0]])
6744 3
'b000: trr_get_rd.size = XIL_AXI_SIZE_1BYTE;
6745 3'b001: trr_get_rd.size = XIL_AXI_SIZE_2BYTE;
6746 3
'b010: trr_get_rd.size = XIL_AXI_SIZE_4BYTE;
6747 3'b011: trr_get_rd.size = XIL_AXI_SIZE_8BYTE;
6748 3
'b100: trr_get_rd.size = XIL_AXI_SIZE_16BYTE;
6749 3'b101: trr_get_rd.size = XIL_AXI_SIZE_32BYTE;
6750 3
'b110: trr_get_rd.size = XIL_AXI_SIZE_64BYTE;
6751 3'b111: trr_get_rd.size = XIL_AXI_SIZE_128BYTE;
6753 trr_get_rd.len = arlen[rd_cnt[int_rd_cntr_width-2:0]];
6754 trr_get_rd.id = (arid[rd_cnt[int_rd_cntr_width-2:0]]);
6756 trr_get_rd.rresp =
new[((2**arsize[rd_cnt[int_rd_cntr_width-2:0]])*(arlen[rd_cnt[int_rd_cntr_width-2:0]]+1))];
6757 for(j = 0; j < (arlen[rd_cnt[int_rd_cntr_width-2:0]]+1); j = j+1) begin
6758 for(k = 0; k < (2**arsize[rd_cnt[int_rd_cntr_width-2:0]]); k = k+1) begin
6759 new_data[(k*8)+:8] = temp_read_data[7:0];
6760 temp_read_data = temp_read_data >> 8;
6762 trr_get_rd.set_data_beat(j, new_data);
6763 case(temp_read_rsp[(j*2)+:2])
6764 2
'b00: trr_get_rd.rresp[j] = XIL_AXI_RESP_OKAY;
6765 2'b01: trr_get_rd.rresp[j] = XIL_AXI_RESP_EXOKAY;
6766 2
'b10: trr_get_rd.rresp[j] = XIL_AXI_RESP_SLVERR;
6767 2'b11: trr_get_rd.rresp[j] = XIL_AXI_RESP_DECERR;
6770 slv.rd_driver.send(trr_get_rd);
6771 rd_cnt = rd_cnt + 1;
6772 rresp_time_cnt = rresp_time_cnt+1;
6774 if(rresp_time_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
6775 rresp_time_cnt[int_rd_cntr_width-1:0] = 0;
6777 if(rd_cnt[int_rd_cntr_width-1:0] === (max_rd_outstanding_transactions)) begin
6779 rd_cnt[int_rd_cntr_width-1:0] = 0;
6781 rd_latency_count = get_rd_lat_number(1);
6868 import axi_vip_pkg::*;
6939 parameter enable_this_port = 0;
6940 parameter slave_name =
"Slave";
6941 parameter data_bus_width = 32;
6942 parameter address_bus_width = 32;
6943 parameter id_bus_width = 6;
6944 parameter awuser_bus_width = 1;
6945 parameter aruser_bus_width = 1;
6946 parameter ruser_bus_width = 1;
6947 parameter wuser_bus_width = 1;
6948 parameter buser_bus_width = 1;
6949 parameter slave_base_address = 0;
6950 parameter slave_high_address = 4;
6951 parameter max_outstanding_transactions = 8;
6952 parameter exclusive_access_supported = 0;
6953 parameter max_wr_outstanding_transactions = 8;
6954 parameter max_rd_outstanding_transactions = 8;
6955 parameter region_bus_width = 4;
6957 `include
"processing_system7_vip_v1_0_10_local_params.v"
6965 parameter int_wr_cntr_width = clogb2(max_wr_outstanding_transactions+1);
6966 parameter int_rd_cntr_width = clogb2(max_rd_outstanding_transactions+1);
6969 parameter wr_fifo_data_bits = ((data_bus_width/8)*axi_burst_len) + (data_bus_width*axi_burst_len) + axi_qos_width + addr_width + (max_burst_bytes_width+1);
6970 parameter wr_bytes_lsb = 0;
6971 parameter wr_bytes_msb = max_burst_bytes_width;
6972 parameter wr_addr_lsb = wr_bytes_msb + 1;
6973 parameter wr_addr_msb = wr_addr_lsb + addr_width-1;
6974 parameter wr_data_lsb = wr_addr_msb + 1;
6975 parameter wr_data_msb = wr_data_lsb + (data_bus_width*axi_burst_len)-1;
6976 parameter wr_qos_lsb = wr_data_msb + 1;
6977 parameter wr_qos_msb = wr_qos_lsb + axi_qos_width-1;
6978 parameter wr_strb_lsb = wr_qos_msb + 1;
6979 parameter wr_strb_msb = wr_strb_lsb + ((data_bus_width/8)*axi_burst_len)-1;
6981 parameter rsp_fifo_bits = axi_rsp_width+id_bus_width;
6982 parameter rsp_lsb = 0;
6983 parameter rsp_msb = axi_rsp_width-1;
6984 parameter rsp_id_lsb = rsp_msb + 1;
6985 parameter rsp_id_msb = rsp_id_lsb + id_bus_width-1;
6995 output [axi_rsp_width-1:0] S_BRESP;
6996 output [axi_rsp_width-1:0] S_RRESP;
6997 output [data_bus_width-1:0] S_RDATA;
6998 output [id_bus_width-1:0] S_BID;
6999 output [id_bus_width-1:0] S_RID;
7007 input [axi_brst_type_width-1:0] S_ARBURST;
7008 input [axi_lock_width-1:0] S_ARLOCK;
7009 input [axi_size_width-1:0] S_ARSIZE;
7010 input [axi_brst_type_width-1:0] S_AWBURST;
7011 input [axi_lock_width-1:0] S_AWLOCK;
7012 input [axi_size_width-1:0] S_AWSIZE;
7013 input [axi_prot_width-1:0] S_ARPROT;
7014 input [axi_prot_width-1:0] S_AWPROT;
7015 input [address_bus_width-1:0] S_ARADDR;
7016 input [address_bus_width-1:0] S_AWADDR;
7017 input [data_bus_width-1:0] S_WDATA;
7018 input [axi_cache_width-1:0] S_ARCACHE;
7019 input [axi_len_width-1:0] S_ARLEN;
7021 input [axi_qos_width-1:0] S_ARQOS;
7026 input [axi_cache_width-1:0] S_AWCACHE;
7027 input [axi_len_width-1:0] S_AWLEN;
7029 input [axi_qos_width-1:0] S_AWQOS;
7035 input [(data_bus_width/8)-1:0] S_WSTRB;
7036 input [id_bus_width-1:0] S_ARID;
7037 input [id_bus_width-1:0] S_AWID;
7038 input [id_bus_width-1:0] S_WID;
7042 input WR_DATA_ACK_DDR, WR_DATA_ACK_OCM;
7043 output reg WR_DATA_VALID_DDR, WR_DATA_VALID_OCM;
7044 output reg [(data_bus_width*axi_burst_len)-1:0] WR_DATA;
7045 output reg [((data_bus_width/8)*axi_burst_len)-1:0] WR_DATA_STRB;
7046 output reg [addr_width-1:0] WR_ADDR;
7047 output reg [max_burst_bytes_width:0] WR_BYTES;
7048 output reg RD_REQ_OCM, RD_REQ_DDR, RD_REQ_REG;
7049 output reg [addr_width-1:0] RD_ADDR;
7050 input [(data_bus_width*axi_burst_len)-1:0] RD_DATA_DDR,RD_DATA_OCM, RD_DATA_REG;
7051 output reg[max_burst_bytes_width:0] RD_BYTES;
7052 input RD_DATA_VALID_OCM,RD_DATA_VALID_DDR, RD_DATA_VALID_REG;
7053 output reg [axi_qos_width-1:0] WR_QOS, RD_QOS;
7057 bit [31:0] static_count;
7059 real s_aclk_period1;
7060 real s_aclk_period2;
7062 axi_slv_agent#(1,address_bus_width, data_bus_width, data_bus_width, id_bus_width,id_bus_width,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1) slv;
7066 .C_AXI_INTERFACE_MODE(2),
7067 .C_AXI_ADDR_WIDTH(address_bus_width),
7068 .C_AXI_WDATA_WIDTH(data_bus_width),
7069 .C_AXI_RDATA_WIDTH(data_bus_width),
7070 .C_AXI_WID_WIDTH(id_bus_width),
7071 .C_AXI_RID_WIDTH(id_bus_width),
7072 .C_AXI_AWUSER_WIDTH(0),
7073 .C_AXI_ARUSER_WIDTH(0),
7074 .C_AXI_WUSER_WIDTH(0),
7075 .C_AXI_RUSER_WIDTH(0),
7076 .C_AXI_BUSER_WIDTH(0),
7077 .C_AXI_SUPPORTS_NARROW(1),
7078 .C_AXI_HAS_BURST(1),
7080 .C_AXI_HAS_CACHE(1),
7081 .C_AXI_HAS_REGION(0),
7084 .C_AXI_HAS_WSTRB(1),
7085 .C_AXI_HAS_BRESP(1),
7086 .C_AXI_HAS_RRESP(1),
7087 .C_AXI_HAS_ARESETN(1)
7092 .s_axi_awid(S_AWID),
7093 .s_axi_awaddr(S_AWADDR),
7094 .s_axi_awlen(S_AWLEN),
7095 .s_axi_awsize(S_AWSIZE),
7096 .s_axi_awburst(S_AWBURST),
7097 .s_axi_awlock(S_AWLOCK),
7098 .s_axi_awcache(S_AWCACHE),
7099 .s_axi_awprot(S_AWPROT),
7100 .s_axi_awregion(4'B0),
7102 .s_axi_awuser(1'B0),
7103 .s_axi_awvalid(S_AWVALID),
7104 .s_axi_awready(S_AWREADY),
7106 .s_axi_wdata(S_WDATA),
7107 .s_axi_wstrb(S_WSTRB),
7108 .s_axi_wlast(S_WLAST),
7110 .s_axi_wvalid(S_WVALID),
7111 .s_axi_wready(S_WREADY),
7113 .s_axi_bresp(S_BRESP),
7115 .s_axi_bvalid(S_BVALID),
7116 .s_axi_bready(S_BREADY),
7117 .s_axi_arid(S_ARID),
7118 .s_axi_araddr(S_ARADDR),
7119 .s_axi_arlen(S_ARLEN),
7120 .s_axi_arsize(S_ARSIZE),
7121 .s_axi_arburst(S_ARBURST),
7122 .s_axi_arlock(S_ARLOCK),
7123 .s_axi_arcache(S_ARCACHE),
7124 .s_axi_arprot(S_ARPROT),
7125 .s_axi_arregion(4'B0),
7126 .s_axi_arqos(S_ARQOS),
7127 .s_axi_aruser(1
'B0),
7128 .s_axi_arvalid(S_ARVALID),
7129 .s_axi_arready(S_ARREADY),
7131 .s_axi_rdata(S_RDATA),
7132 .s_axi_rresp(S_RRESP),
7133 .s_axi_rlast(S_RLAST),
7135 .s_axi_rvalid(S_RVALID),
7136 .s_axi_rready(S_RREADY),
7149 .m_axi_awready(1'b0),
7156 .m_axi_wready(1
'b0),
7157 .m_axi_bid(12'h000),
7158 .m_axi_bresp(2
'b00),
7160 .m_axi_bvalid(1
'b0),
7174 .m_axi_arready(1'b0),
7175 .m_axi_rid(12
'h000),
7176 .m_axi_rdata(32'h00000000),
7177 .m_axi_rresp(2
'b00),
7180 .m_axi_rvalid(1'b0),
7185 xil_axi_cmd_beat twc, trc;
7186 xil_axi_write_beat twd;
7187 xil_axi_read_beat trd;
7188 axi_transaction twr, trr,trr_get_rd;
7189 axi_transaction trr_rd[$];
7190 axi_ready_gen awready_gen;
7191 axi_ready_gen wready_gen;
7192 axi_ready_gen arready_gen;
7193 integer i,j,k,add_val,size_local,burst_local,len_local,num_bytes;
7195 bit [15:0] a_16_bits,a_new,a_wrap,a_wrt_val,a_cnt;
7198 slv =
new(
"slv",slave.IF);
7201 trr_get_rd =
new(
"trr_get_rd");
7202 wready_gen = slv.wr_driver.create_ready(
"wready");
7203 slv.monitor.axi_wr_cmd_port.set_enabled();
7204 slv.monitor.axi_wr_beat_port.set_enabled();
7205 slv.monitor.axi_rd_cmd_port.set_enabled();
7206 slv.wr_driver.set_transaction_depth(max_wr_outstanding_transactions);
7207 slv.rd_driver.set_transaction_depth(max_rd_outstanding_transactions);
7212 slave.IF.set_enable_xchecks_to_warn();
7213 repeat(10) @(posedge S_ACLK);
7214 slave.IF.set_enable_xchecks();
7219 reg[1:0] latency_type = RANDOM_CASE;
7221 reg STOP_ON_ERROR = 1
'b1;
7223 /* WR_FIFO stores 32-bit address, valid data and valid bytes for each AXI Write burst transaction */
7224 reg [wr_fifo_data_bits-1:0] wr_fifo [0:max_wr_outstanding_transactions-1];
7225 reg [int_wr_cntr_width-1:0] wr_fifo_wr_ptr = 0, wr_fifo_rd_ptr = 0;
7228 /* Store the awvalid receive time --- necessary for calculating the latency in sending the bresp*/
7229 // reg [7:0] aw_time_cnt = 0, bresp_time_cnt = 0;
7230 reg [int_wr_cntr_width-1:0] aw_time_cnt = 0, bresp_time_cnt = 0;
7231 real awvalid_receive_time[0:max_wr_outstanding_transactions-1]; // store the time when a new awvalid is received
7232 reg awvalid_flag[0:max_wr_outstanding_transactions-1]; // indicates awvalid is received
7234 /* Address Write Channel handshake*/
7235 reg[int_wr_cntr_width-1:0] aw_cnt = 0;// count of awvalid
7237 /* various FIFOs for storing the ADDR channel info */
7238 reg [axi_size_width-1:0] awsize [0:max_wr_outstanding_transactions-1];
7239 reg [axi_prot_width-1:0] awprot [0:max_wr_outstanding_transactions-1];
7240 reg [axi_lock_width-1:0] awlock [0:max_wr_outstanding_transactions-1];
7241 reg [axi_cache_width-1:0] awcache [0:max_wr_outstanding_transactions-1];
7242 reg [axi_brst_type_width-1:0] awbrst [0:max_wr_outstanding_transactions-1];
7243 reg [axi_len_width-1:0] awlen [0:max_wr_outstanding_transactions-1];
7244 reg aw_flag [0:max_wr_outstanding_transactions-1];
7245 reg [addr_width-1:0] awaddr [0:max_wr_outstanding_transactions-1];
7246 reg [addr_width-1:0] addr_wr_local;
7247 reg [addr_width-1:0] addr_wr_final;
7248 reg [id_bus_width-1:0] awid [0:max_wr_outstanding_transactions-1];
7249 reg [axi_qos_width-1:0] awqos [0:max_wr_outstanding_transactions-1];
7250 wire aw_fifo_full; // indicates awvalid_fifo is full (max outstanding transactions reached)
7252 /* internal fifos to store burst write data, ID & strobes*/
7253 reg [(data_bus_width*axi_burst_len)-1:0] burst_data [0:max_wr_outstanding_transactions-1];
7254 reg [((data_bus_width/8)*axi_burst_len)-1:0] burst_strb [0:max_wr_outstanding_transactions-1];
7255 reg [max_burst_bytes_width:0] burst_valid_bytes [0:max_wr_outstanding_transactions-1]; /// total valid bytes received in a complete burst transfer
7256 reg [max_burst_bytes_width:0] valid_bytes = 0; /// total valid bytes received in a complete burst transfer
7257 reg wlast_flag [0:max_wr_outstanding_transactions-1]; // flag to indicate WLAST received
7260 /* Write Data Channel and Write Response handshake signals*/
7261 reg [int_wr_cntr_width-1:0] wd_cnt = 0;
7262 reg [(data_bus_width*axi_burst_len)-1:0] aligned_wr_data;
7263 reg [((data_bus_width/8)*axi_burst_len)-1:0] aligned_wr_strb;
7264 reg [addr_width-1:0] aligned_wr_addr;
7265 reg [max_burst_bytes_width:0] valid_data_bytes;
7266 reg [int_wr_cntr_width-1:0] wr_bresp_cnt = 0;
7267 reg [axi_rsp_width-1:0] bresp;
7268 reg [rsp_fifo_bits-1:0] fifo_bresp [0:max_wr_outstanding_transactions-1]; // store the ID and its corresponding response
7269 reg enable_write_bresp;
7270 reg [int_wr_cntr_width-1:0] rd_bresp_cnt = 0;
7271 integer wr_latency_count;
7272 reg wr_delayed,wr_fifo_full_flag;
7273 wire bresp_fifo_empty;
7275 /* states for managing read/write to WR_FIFO */
7276 parameter SEND_DATA = 0, WAIT_ACK = 1;
7280 reg [axi_qos_width-1:0] ar_qos, aw_qos;
7283 if(DEBUG_INFO) begin
7284 if(enable_this_port)
7285 $display("[%0d] : %0s : %0s : Port is ENABLED.",$time, DISP_INFO, slave_name);
7287 $display("[%0d] : %0s : %0s : Port is DISABLED.",$time, DISP_INFO, slave_name);
7291 //initial slave.set_disable_reset_value_checks(1);
7293 repeat(2) @(posedge S_ACLK);
7294 if(!enable_this_port) begin
7296 // slave.RESPONSE_TIMEOUT = 0;
7298 /*--------------------------------------------------------------------------------*/
7300 /* Set Latency type to be used */
7301 task set_latency_type;
7304 if(enable_this_port)
7308 $display("[%0d] : %0s : %0s : Port is disabled. 'Latency Profile
' will not be set...",$time, DISP_WARN, slave_name);
7312 /*--------------------------------------------------------------------------------*/
7314 /* Set verbosity to be used */
7315 task automatic set_verbosity;
7318 if(enable_this_port) begin
7319 slv.set_verbosity(verb);
7322 $display("[%0d] : %0s : %0s : Port is disabled. set_verbosity will not be set...",$time, DISP_WARN, slave_name);
7327 /*--------------------------------------------------------------------------------*/
7329 /* Set ARQoS to be used */
7330 task automatic set_arqos;
7331 input[axi_qos_width-1:0] qos;
7333 if(enable_this_port) begin
7337 $display("[%0d] : %0s : %0s : Port is disabled. 'ARQOS' will not be set...",$time, DISP_WARN, slave_name);
7342 /*--------------------------------------------------------------------------------*/
7344 /* Set AWQoS to be used */
7346 input[axi_qos_width-1:0] qos;
7348 if(enable_this_port)
7352 $display("[%0d] : %0s : %0s : Port is disabled. 'AWQOS' will not be set...",$time, DISP_WARN, slave_name);
7356 /*--------------------------------------------------------------------------------*/
7357 /* get the wr latency number */
7358 function [31:0] get_wr_lat_number;
7363 BEST_CASE : if(slave_name == axi_acp_name) get_wr_lat_number = acp_wr_min; else get_wr_lat_number = gp_wr_min;
7364 AVG_CASE : if(slave_name == axi_acp_name) get_wr_lat_number = acp_wr_avg; else get_wr_lat_number = gp_wr_avg;
7365 WORST_CASE : if(slave_name == axi_acp_name) get_wr_lat_number = acp_wr_max; else get_wr_lat_number = gp_wr_max;
7366 default : begin // RANDOM_CASE
7369 2'b00 :
if(slave_name == axi_acp_name) get_wr_lat_number = ($random()%10+ acp_wr_min);
else get_wr_lat_number = ($random()%10+ gp_wr_min);
7370 2
'b01 : if(slave_name == axi_acp_name) get_wr_lat_number = ($random()%40+ acp_wr_avg); else get_wr_lat_number = ($random()%40+ gp_wr_avg);
7371 default : if(slave_name == axi_acp_name) get_wr_lat_number = ($random()%60+ acp_wr_max); else get_wr_lat_number = ($random()%60+ gp_wr_max);
7377 /*--------------------------------------------------------------------------------*/
7379 /* get the rd latency number */
7380 function [31:0] get_rd_lat_number;
7385 BEST_CASE : if(slave_name == axi_acp_name) get_rd_lat_number = acp_rd_min; else get_rd_lat_number = gp_rd_min;
7386 AVG_CASE : if(slave_name == axi_acp_name) get_rd_lat_number = acp_rd_avg; else get_rd_lat_number = gp_rd_avg;
7387 WORST_CASE : if(slave_name == axi_acp_name) get_rd_lat_number = acp_rd_max; else get_rd_lat_number = gp_rd_max;
7388 default : begin // RANDOM_CASE
7391 2'b00 :
if(slave_name == axi_acp_name) get_rd_lat_number = ($random()%10+ acp_rd_min);
else get_rd_lat_number = ($random()%10+ gp_rd_min);
7392 2
'b01 : if(slave_name == axi_acp_name) get_rd_lat_number = ($random()%40+ acp_rd_avg); else get_rd_lat_number = ($random()%40+ gp_rd_avg);
7393 default : if(slave_name == axi_acp_name) get_rd_lat_number = ($random()%60+ acp_rd_max); else get_rd_lat_number = ($random()%60+ gp_rd_max);
7399 /*--------------------------------------------------------------------------------*/
7401 /* Store the Clock cycle time period */
7407 s_aclk_period1 = $realtime;
7409 s_aclk_period2 = $realtime;
7410 diff_time = s_aclk_period2 - s_aclk_period1;
7413 /*--------------------------------------------------------------------------------*/
7415 /* Check for any WRITE/READs when this port is disabled */
7416 always@(S_AWVALID or S_WVALID or S_ARVALID)
7418 if((S_AWVALID | S_WVALID | S_ARVALID) && !enable_this_port) begin
7419 $display("[%0d] : %0s : %0s : Port is disabled. AXI transaction is initiated on this port ...\nSimulation will halt ..",$time, DISP_ERR, slave_name);
7425 /*--------------------------------------------------------------------------------*/
7428 assign net_ARVALID = enable_this_port ? S_ARVALID : 1'b0;
7429 assign net_AWVALID = enable_this_port ? S_AWVALID : 1
'b0;
7430 assign net_WVALID = enable_this_port ? S_WVALID : 1'b0;
7432 assign wr_fifo_empty = (wr_fifo_wr_ptr === wr_fifo_rd_ptr)?1
'b1: 1'b0;
7435 assign aw_fifo_full = ((aw_cnt[1] !== rd_bresp_cnt[1]) && (aw_cnt[0] === rd_bresp_cnt[0]))?1
'b1 :1'b0;
7436 assign wd_fifo_full = ((wd_cnt[1] !== rd_bresp_cnt[1]) && (wd_cnt[0] === rd_bresp_cnt[0]))?1
'b1 :1'b0;
7437 assign bresp_fifo_empty = ((wr_fifo_full_flag == 1
'b0) && (wr_bresp_cnt === rd_bresp_cnt))?1'b1:1
'b0;
7440 /* Store the awvalid receive time --- necessary for calculating the bresp latency */
7441 always@(negedge S_RESETN or posedge S_ACLK)
7446 if(net_AWVALID && S_AWREADY) begin
7447 awvalid_receive_time[aw_time_cnt] = $realtime;
7448 awvalid_flag[aw_time_cnt] = 1'b1;
7450 aw_time_cnt = aw_time_cnt + 1;
7451 if(aw_time_cnt === max_wr_outstanding_transactions) begin
7459 always@(posedge S_ACLK)
7461 if(net_AWVALID && S_AWREADY) begin
7462 if(S_AWQOS === 0) begin awqos[aw_cnt[int_wr_cntr_width-2:0]] = aw_qos;
7463 end
else awqos[aw_cnt[int_wr_cntr_width-2:0]] = S_AWQOS;
7468 always@(aw_fifo_full)
7470 if(aw_fifo_full && DEBUG_INFO)
7471 $display(
"[%0d] : %0s : %0s : Reached the maximum outstanding Write transactions limit (%0d). Blocking all future Write transactions until at least 1 of the outstanding Write transaction has completed.",$time, DISP_INFO, slave_name,max_wr_outstanding_transactions);
7484 wait(aw_fifo_full == 0) begin
7486 slv.monitor.axi_wr_cmd_port.get(twc);
7488 awlen[aw_cnt[int_wr_cntr_width-1:0]] = twc.len;
7489 awsize[aw_cnt[int_wr_cntr_width-1:0]] = twc.size;
7490 awbrst[aw_cnt[int_wr_cntr_width-1:0]] = twc.burst;
7491 awlock[aw_cnt[int_wr_cntr_width-1:0]] = twc.lock;
7492 awcache[aw_cnt[int_wr_cntr_width-1:0]]= twc.cache;
7493 awprot[aw_cnt[int_wr_cntr_width-1:0]] = twc.prot;
7494 awid[aw_cnt[int_wr_cntr_width-1:0]] = twc.
id;
7495 aw_flag[aw_cnt[int_wr_cntr_width-1:0]] = 1'b1;
7496 size_local = twc.size;
7497 burst_local = twc.burst;
7498 len_local = twc.len;
7499 if(burst_local == AXI_INCR || burst_local == AXI_FIXED) begin
7500 if(data_bus_width === 'd128) begin
7501 if(size_local === 'd0) a = {twc.addr[3:0]};
7502 if(size_local ===
'd1) a = {twc.addr[3:1],1'b0};
7503 if(size_local ===
'd2) a = {twc.addr[3:2],2'b0};
7504 if(size_local ===
'd3) a = {twc.addr[3],3'b0};
7505 if(size_local ===
'd4) a = 'b0;
7506 end
else if(data_bus_width ===
'd64 ) begin
7507 if(size_local === 'd0) a = {twc.addr[2:0]};
7508 if(size_local ===
'd1) a = {twc.addr[2:1],1'b0};
7509 if(size_local ===
'd2) a = {twc.addr[2],2'b0};
7510 if(size_local ===
'd3) a = 'b0;
7511 end
else if(data_bus_width ===
'd32 ) begin
7512 if(size_local === 'd0) a = {twc.addr[1:0]};
7513 if(size_local ===
'd1) a = {twc.addr[1],1'b0};
7514 if(size_local ===
'd2) a = 'b0;
7516 end
if(burst_local == AXI_WRAP) begin
7517 if(data_bus_width ===
'd128) begin
7518 if(size_local === 'd0) a = {twc.addr[3:0]};
7519 if(size_local ===
'd1) a = {twc.addr[3:1],1'b0};
7520 if(size_local ===
'd2) a = {twc.addr[3:2],2'b0};
7521 if(size_local ===
'd3) a = {twc.addr[3],3'b0};
7522 if(size_local ===
'd4) a = 'b0;
7523 end
else if(data_bus_width ===
'd64 ) begin
7524 if(size_local === 'd0) a = {twc.addr[2:0]};
7525 if(size_local ===
'd1) a = {twc.addr[2:1],1'b0};
7526 if(size_local ===
'd2) a = {twc.addr[2],2'b0};
7527 if(size_local ===
'd3) a = 'b0;
7528 end
else if(data_bus_width ===
'd32 ) begin
7529 if(size_local === 'd0) a = {twc.addr[1:0]};
7530 if(size_local ===
'd1) a = {twc.addr[1],1'b0};
7531 if(size_local ===
'd2) a = 'b0;
7534 a_16_bits = twc.addr[7:0];
7535 num_bytes = ((len_local+1)*(2**size_local));
7538 addr_wr_local = twc.addr;
7539 if(burst_local == AXI_INCR || burst_local == AXI_FIXED) begin
7541 0 : addr_wr_final = {addr_wr_local};
7542 1 : addr_wr_final = {addr_wr_local[31:1],1
'b0};
7543 2 : addr_wr_final = {addr_wr_local[31:2],2'b0};
7544 3 : addr_wr_final = {addr_wr_local[31:3],3
'b0};
7545 4 : addr_wr_final = {addr_wr_local[31:4],4'b0};
7546 5 : addr_wr_final = {addr_wr_local[31:5],5
'b0};
7547 6 : addr_wr_final = {addr_wr_local[31:6],6'b0};
7548 7 : addr_wr_final = {addr_wr_local[31:7],7
'b0};
7550 awaddr[aw_cnt[int_wr_cntr_width-1:0]] = addr_wr_final;
7551 // $display("addr_wr_final %0h aw_cnt %0d",addr_wr_final,aw_cnt);
7552 end if(burst_local == AXI_WRAP) begin
7553 awaddr[aw_cnt[int_wr_cntr_width-1:0]] = twc.addr;
7554 // $display(" awaddr[aw_cnt[int_wr_cntr_width-2:0]] %0h",awaddr[aw_cnt[int_wr_cntr_width-1:0]]);
7556 aw_cnt = aw_cnt + 1;
7557 // $display(" %0t ACP aw_cnt %0d",$time,aw_cnt);
7558 // if(data_bus_width === 'd32) a = 0;
7563 if(aw_cnt[int_wr_cntr_width-1:0] === (max_wr_outstanding_transactions)) begin
7565 aw_cnt[int_wr_cntr_width-1:0] = 0;
7580 wr_fifo_full_flag = 0;
7585 wait(wd_fifo_full == 0 ) begin
7587 slv.monitor.axi_wr_beat_port.get(twd);
7589 wait((aw_flag[wd_cnt[int_wr_cntr_width-1:0]] === 'b1));
7605 for(i = 0; i < (2**awsize[wr_bresp_cnt[int_wr_cntr_width-1:0]]); i = i+1) begin
7606 burst_data[wd_cnt[int_wr_cntr_width-1:0]][((valid_bytes*8)+(i*8))+:8] = twd.data[i+a];
7610 burst_strb[wd_cnt[int_wr_cntr_width-1:0]][((valid_bytes)+(i*1))+:1] = twd.strb[i+a];
7615 if(i == ((2**awsize[wr_bresp_cnt[int_wr_cntr_width-1:0]])-1) ) begin
7616 if(burst_local == AXI_FIXED) begin
7618 end else if(burst_local == AXI_INCR) begin
7620 end else if(burst_local == AXI_WRAP) begin
7621 a_new = (a_16_bits/num_bytes)*num_bytes;
7622 a_wrap = a_new + (num_bytes);
7625 a_16_bits = a_16_bits+add_val;
7626 a_wrt_val = a_16_bits;
7628 if(a_wrt_val[15:0] >= a_wrap[15:0]) begin
7629 if(data_bus_width === 'd128)
7631 else if(data_bus_width === 'd64)
7633 else if(data_bus_width === 'd32)
7644 if(burst_local == AXI_INCR) begin
7645 if( a >= (data_bus_width/8) || (burst_local == 0 ) || (twd.last) ) begin
7650 end else if (burst_local == AXI_WRAP) begin
7651 if( ((a >= (data_bus_width/8)) ) || (burst_local == 0 ) || (twd.last) ) begin
7657 valid_bytes = valid_bytes+(2**awsize[wr_bresp_cnt[int_wr_cntr_width-1:0]]);
7658 $display("ACP valid bytes in valid_bytes %0d",valid_bytes);
7660 if (twd.last === 'b1) begin
7661 wlast_flag[wd_cnt[int_wr_cntr_width-1:0]] = 1'b1;
7662 burst_valid_bytes[wd_cnt[int_wr_cntr_width-1:0]] = valid_bytes;
7664 wd_cnt = wd_cnt + 1;
7668 if(wd_cnt[int_wr_cntr_width-1:0] === (max_wr_outstanding_transactions)) begin
7670 wd_cnt[int_wr_cntr_width-1:0] = 0;
7713 task automatic get_wrap_aligned_wr_data;
7714 output [(data_bus_width*axi_burst_len)-1:0] aligned_data;
7715 output [addr_width-1:0] start_addr;
7716 input [addr_width-1:0] addr;
7717 input [(data_bus_width*axi_burst_len)-1:0] b_data;
7718 input [max_burst_bytes_width:0] v_bytes;
7719 reg [(data_bus_width*axi_burst_len)-1:0] temp_data, wrp_data;
7724 start_addr = (addr/v_bytes) * v_bytes;
7726 wrp_bytes = addr - start_addr;
7730 wrp_data = wrp_data << ((data_bus_width*axi_burst_len) - (v_bytes*8));
7732 while(wrp_bytes > 0) begin
7733 temp_data = temp_data << 8;
7734 temp_data[7:0] = wrp_data[(data_bus_width*axi_burst_len)-1 : (data_bus_width*axi_burst_len)-8];
7735 wrp_data = wrp_data << 8;
7736 wrp_bytes = wrp_bytes - 1;
7739 wrp_bytes = addr - start_addr;
7740 wrp_data = b_data << (wrp_bytes*8);
7742 aligned_data = (temp_data | wrp_data);
7749 task automatic get_wrap_aligned_wr_strb;
7750 output [((data_bus_width/8)*axi_burst_len)-1:0] aligned_strb;
7751 output [addr_width-1:0] start_addr;
7752 input [addr_width-1:0] addr;
7753 input [((data_bus_width/8)*axi_burst_len)-1:0] b_strb;
7754 input [max_burst_bytes_width:0] v_bytes;
7755 reg [((data_bus_width/8)*axi_burst_len)-1:0] temp_strb, wrp_strb;
7760 start_addr = (addr/v_bytes) * v_bytes;
7762 wrp_bytes = addr - start_addr;
7768 wrp_strb = wrp_strb << (((data_bus_width/8)*axi_burst_len) - (v_bytes));
7770 while(wrp_bytes > 0) begin
7771 temp_strb = temp_strb << 1;
7772 temp_strb[0] = wrp_strb[((data_bus_width/8)*axi_burst_len) : ((data_bus_width/8)*axi_burst_len)-1];
7773 wrp_strb = wrp_strb << 1;
7774 wrp_bytes = wrp_bytes - 1;
7777 wrp_bytes = addr - start_addr;
7778 wrp_strb = b_strb << (wrp_bytes);
7780 aligned_strb = (temp_strb | wrp_strb);
7787 function [axi_rsp_width-1:0] calculate_resp;
7789 input [addr_width-1:0] awaddr;
7790 input [axi_prot_width-1:0] awprot;
7791 reg [axi_rsp_width-1:0] rsp;
7795 if(decode_address(awaddr) === INVALID_MEM_TYPE) begin
7797 $display("[%0d] : %0s : %0s : AXI Access to Invalid location(0x%0h) awaddr %0h",$time, DISP_ERR, slave_name, awaddr,awaddr);
7799 if(!rd_wr && decode_address(awaddr) === REG_MEM) begin
7801 $display("[%0d] : %0s : %0s : AXI Write to Register Map(0x%0h) is not supported ",$time, DISP_ERR, slave_name, awaddr);
7803 if(secure_access_enabled && awprot[1])
7805 calculate_resp = rsp;
7822 wait((wlast_flag[wr_bresp_cnt[int_wr_cntr_width-1:0]] === 'b1) && (aw_flag[wr_bresp_cnt[int_wr_cntr_width-1:0]] === 'b1)) begin
7825 enable_write_bresp = 'b1;
7831 if(enable_write_bresp) begin
7832 aw_flag[wr_bresp_cnt[int_wr_cntr_width-1:0]] = 0;
7833 wlast_flag[wr_bresp_cnt[int_wr_cntr_width-1:0]] = 0;
7835 bresp = calculate_resp(1'b0, awaddr[wr_bresp_cnt[int_wr_cntr_width-1:0]],awprot[wr_bresp_cnt[int_wr_cntr_width-1:0]]);
7836 fifo_bresp[wr_bresp_cnt[int_wr_cntr_width-1:0]] = {awid[wr_bresp_cnt[int_wr_cntr_width-1:0]],bresp};
7838 if(bresp === AXI_OK) begin
7839 if(awbrst[wr_bresp_cnt[int_wr_cntr_width-1:0]] === AXI_WRAP) begin
7840 get_wrap_aligned_wr_data(aligned_wr_data,aligned_wr_addr, awaddr[wr_bresp_cnt[int_wr_cntr_width-1:0]],burst_data[wr_bresp_cnt[int_wr_cntr_width-1:0]],burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-1:0]]);
7841 get_wrap_aligned_wr_strb(aligned_wr_strb,aligned_wr_addr, awaddr[wr_bresp_cnt[int_wr_cntr_width-1:0]],burst_strb[wr_bresp_cnt[int_wr_cntr_width-1:0]],burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-1:0]]);
7843 aligned_wr_data = burst_data[wr_bresp_cnt[int_wr_cntr_width-1:0]];
7844 aligned_wr_addr = awaddr[wr_bresp_cnt[int_wr_cntr_width-1:0]] ;
7845 aligned_wr_strb = burst_strb[wr_bresp_cnt[int_wr_cntr_width-1:0]];
7849 valid_data_bytes = burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-1:0]];
7851 valid_data_bytes = 0;
7853 if(awbrst[wr_bresp_cnt[int_wr_cntr_width-1:0]] != AXI_WRAP) begin
7855 wr_fifo[wr_fifo_wr_ptr[int_wr_cntr_width-1:0]] = {aligned_wr_strb,awqos[wr_bresp_cnt[int_wr_cntr_width-1:0]], aligned_wr_data, aligned_wr_addr, valid_data_bytes};
7858 wr_fifo[wr_fifo_wr_ptr[int_wr_cntr_width-1:0]] = {aligned_wr_strb,awqos[wr_bresp_cnt[int_wr_cntr_width-1:0]], aligned_wr_data, aligned_wr_addr, valid_data_bytes};
7861 wr_fifo_wr_ptr = wr_fifo_wr_ptr + 1
'b1;
7862 wr_bresp_cnt = wr_bresp_cnt+1'b1;
7863 enable_write_bresp =
'b0;
7864 if(wr_bresp_cnt == 2'd2) begin
7865 wr_fifo_full_flag = 1
'b1;
7868 // $display(" %0t ACP before resetting the wr_bresp_cnt counter %0d max_wr_outstanding_transactions %0d int_wr_cntr_width %0d wr_fifo_wr_ptr %0d" ,$time, wr_bresp_cnt[int_wr_cntr_width-1:0],max_wr_outstanding_transactions,int_wr_cntr_width,wr_fifo_wr_ptr);
7869 if(wr_bresp_cnt[int_wr_cntr_width-1:0] === (max_wr_outstanding_transactions)) begin
7870 // wr_bresp_cnt[int_wr_cntr_width] = ~ wr_bresp_cnt[int_wr_cntr_width];
7871 wr_bresp_cnt[int_wr_cntr_width-1:0] = 0;
7872 // $display(" ACP resetting the wr_bresp_cnt counter %0d " , wr_bresp_cnt);
7875 if(wr_fifo_wr_ptr[int_wr_cntr_width-1:0] === (max_wr_outstanding_transactions)) begin
7876 wr_fifo_wr_ptr[int_wr_cntr_width-1:0] = 0;
7877 // $display(" ACP resetting the wr_fifo_wr_ptr counter %0d " , wr_fifo_wr_ptr);
7884 /*--------------------------------------------------------------------------------*/
7886 /* Send Write Response Channel handshake */
7887 always@(negedge S_RESETN or posedge S_ACLK)
7891 wr_latency_count = get_wr_lat_number(1);
7892 // wr_latency_count = 5;
7896 // if(static_count < 32 ) begin
7897 // // wready_gen.set_ready_policy(XIL_AXI_READY_GEN_SINGLE);
7898 // wready_gen.set_ready_policy(XIL_AXI_READY_GEN_NO_BACKPRESSURE);
7899 // //wready_gen.set_low_time(0);
7900 // //wready_gen.set_high_time(1);
7901 // slv.wr_driver.send_wready(wready_gen);
7903 // $display(" ACP waiting for awvalid_flag[bresp_time_cnt] %0d $realtime %0t awvalid_receive_time[bresp_time_cnt] %0t",awvalid_flag[bresp_time_cnt],$realtime ,awvalid_receive_time[bresp_time_cnt]);
7904 // $display(" ACP waiting for wr_latency_count %0t bresp_time_cnt %0d",wr_latency_count,bresp_time_cnt);
7905 // $display(" ACP waiting for diff_time %0t",diff_time);
7906 if(awvalid_flag[bresp_time_cnt] && (($realtime - awvalid_receive_time[bresp_time_cnt])/diff_time >= wr_latency_count)) begin
7909 // $display(" ACP waiting for wr_delayed wr_delayed %0d bresp_fifo_empty %0d ",wr_delayed,bresp_fifo_empty);
7910 if(!bresp_fifo_empty && wr_delayed) begin
7911 // $display(" ACP before getting twr wr_delayed %0d bresp_fifo_empty %0d ",wr_delayed,bresp_fifo_empty);
7912 slv.wr_driver.get_wr_reactive(twr);
7913 // $display(" ACP after getting twr wr_delayed %0d bresp_fifo_empty %0d ",wr_delayed,bresp_fifo_empty);
7914 twr.set_id(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-1:0]][rsp_id_msb : rsp_id_lsb]);
7915 case(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-1:0]][rsp_msb : rsp_lsb])
7916 2'b00: twr.set_bresp(XIL_AXI_RESP_OKAY);
7917 2
'b01: twr.set_bresp(XIL_AXI_RESP_EXOKAY);
7918 2'b10: twr.set_bresp(XIL_AXI_RESP_SLVERR);
7919 2
'b11: twr.set_bresp(XIL_AXI_RESP_DECERR);
7921 // if(static_count > 32 ) begin
7922 // wready_gen.set_ready_policy(XIL_AXI_READY_GEN_SINGLE);
7923 wready_gen.set_ready_policy(XIL_AXI_READY_GEN_NO_BACKPRESSURE);
7924 // wready_gen.set_low_time(3);
7925 // wready_gen.set_high_time(3);
7926 // wready_gen.set_low_time_range(3,6);
7927 // wready_gen.set_high_time_range(3,6);
7928 // slv.wr_driver.send_wready(wready_gen);
7930 slv.wr_driver.send_wready(wready_gen);
7931 slv.wr_driver.send(twr);
7932 // $display("%0t ACP sending the element to driver",$time);
7934 awvalid_flag[bresp_time_cnt] = 1'b0;
7935 bresp_time_cnt = bresp_time_cnt+1;
7936 rd_bresp_cnt = rd_bresp_cnt + 1;
7937 if(rd_bresp_cnt == 2
'd2) begin
7938 wr_fifo_full_flag = 1'b0;
7940 if(rd_bresp_cnt[int_wr_cntr_width-1:0] === (max_wr_outstanding_transactions)) begin
7942 rd_bresp_cnt[int_wr_cntr_width-1:0] = 0;
7944 if(bresp_time_cnt[int_wr_cntr_width-1:0] === max_wr_outstanding_transactions) begin
7945 bresp_time_cnt[int_wr_cntr_width-1:0] = 0;
7947 wr_latency_count = get_wr_lat_number(1);
7957 always@(negedge S_RESETN or posedge SW_CLK) begin
7959 WR_DATA_VALID_DDR = 1
'b0;
7960 WR_DATA_VALID_OCM = 1'b0;
7968 WR_DATA_VALID_OCM = 0;
7969 WR_DATA_VALID_DDR = 0;
7970 if(!wr_fifo_empty) begin
7971 WR_DATA = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-1:0]][wr_data_msb : wr_data_lsb];
7972 WR_ADDR = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-1:0]][wr_addr_msb : wr_addr_lsb];
7973 WR_BYTES = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-1:0]][wr_bytes_msb : wr_bytes_lsb];
7974 WR_QOS = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-1:0]][wr_qos_msb : wr_qos_lsb];
7975 WR_DATA_STRB = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-1:0]][wr_strb_msb : wr_strb_lsb];
7977 $display(
"ACP final WR_ADDR %0h WR_DATA %0h WR_DATA_STRB %0h wr_fifo_rd_ptr %0d",WR_ADDR,WR_DATA[31:0],WR_DATA_STRB,wr_fifo_rd_ptr[int_wr_cntr_width-1:0]);
7978 case (decode_address(wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-1:0]][wr_addr_msb : wr_addr_lsb]))
7979 OCM_MEM : WR_DATA_VALID_OCM = 1;
7980 DDR_MEM : WR_DATA_VALID_DDR = 1;
7981 default : state = SEND_DATA;
7983 wr_fifo_rd_ptr = wr_fifo_rd_ptr+1;
7984 if(wr_fifo_rd_ptr[int_wr_cntr_width-1:0] === (max_wr_outstanding_transactions)) begin
7985 wr_fifo_rd_ptr[int_wr_cntr_width] = ~ wr_fifo_rd_ptr[int_wr_cntr_width];
7986 wr_fifo_rd_ptr[int_wr_cntr_width-1:0] = 0;
7994 if(WR_DATA_ACK_OCM | WR_DATA_ACK_DDR) begin
7995 WR_DATA_VALID_OCM = 1
'b0;
7996 WR_DATA_VALID_DDR = 1'b0;
8010 reg [int_rd_cntr_width-1:0] ar_time_cnt = 0,rresp_time_cnt = 0;
8011 real arvalid_receive_time[0:max_rd_outstanding_transactions-1];
8012 reg arvalid_flag[0:max_rd_outstanding_transactions-1];
8013 reg [int_rd_cntr_width-1:0] ar_cnt = 0;
8016 reg [axi_size_width-1:0] arsize [0:max_rd_outstanding_transactions-1];
8017 reg [axi_prot_width-1:0] arprot [0:max_rd_outstanding_transactions-1];
8018 reg [axi_brst_type_width-1:0] arbrst [0:max_rd_outstanding_transactions-1];
8019 reg [axi_len_width-1:0] arlen [0:max_rd_outstanding_transactions-1];
8020 reg [axi_cache_width-1:0] arcache [0:max_rd_outstanding_transactions-1];
8021 reg [axi_lock_width-1:0] arlock [0:max_rd_outstanding_transactions-1];
8022 reg ar_flag [0:max_rd_outstanding_transactions-1];
8023 reg [addr_width-1:0] araddr [0:max_rd_outstanding_transactions-1];
8024 reg [addr_width-1:0] addr_local;
8025 reg [addr_width-1:0] addr_final;
8026 reg [id_bus_width-1:0] arid [0:max_rd_outstanding_transactions-1];
8027 reg [axi_qos_width-1:0] arqos [0:max_rd_outstanding_transactions-1];
8030 reg [int_rd_cntr_width-1:0] rd_cnt = 0;
8031 reg [int_rd_cntr_width-1:0] trr_rd_cnt = 0;
8032 reg [int_rd_cntr_width-1:0] wr_rresp_cnt = 0;
8033 reg [axi_rsp_width-1:0] rresp;
8034 reg [rsp_fifo_bits-1:0] fifo_rresp [0:max_rd_outstanding_transactions-1];
8037 integer rd_latency_count;
8039 reg read_fifo_empty;
8041 reg [max_burst_bits-1:0] read_fifo [0:max_rd_outstanding_transactions-1];
8042 reg [int_rd_cntr_width-1:0] rd_fifo_wr_ptr = 0, rd_fifo_rd_ptr = 0;
8043 wire read_fifo_full;
8045 assign read_fifo_full = (rd_fifo_wr_ptr[int_rd_cntr_width-1] !== rd_fifo_rd_ptr[int_rd_cntr_width-1] && rd_fifo_wr_ptr[int_rd_cntr_width-1:0] === rd_fifo_rd_ptr[int_rd_cntr_width-1:0])?1
'b1: 1'b0;
8046 assign read_fifo_empty = (rd_fifo_wr_ptr === rd_fifo_rd_ptr)?1
'b1: 1'b0;
8047 assign ar_fifo_full = ((ar_cnt[int_rd_cntr_width-1] !== rd_cnt[int_rd_cntr_width-1]) && (ar_cnt[int_rd_cntr_width-1:0] === rd_cnt[int_rd_cntr_width-1:0]))?1
'b1 :1'b0;
8050 always@(negedge S_RESETN or posedge S_ACLK)
8055 if(net_ARVALID ==
'b1 && S_ARREADY == 'b1) begin
8056 arvalid_receive_time[ar_time_cnt] = $time;
8057 arvalid_flag[ar_time_cnt] = 1
'b1;
8058 ar_time_cnt = ar_time_cnt + 1;
8059 // $display(" %m current ar_time_cnt %0d",ar_time_cnt);
8060 if((ar_time_cnt === max_rd_outstanding_transactions) ) begin
8062 // $display("reached max count max_rd_outstanding_transactions %0d aw_time_cnt %0d",max_rd_outstanding_transactions,ar_time_cnt);
8063 // $display(" resetting the read ar_time_cnt counter %0d", ar_time_cnt);
8068 /*--------------------------------------------------------------------------------*/
8069 always@(posedge S_ACLK)
8071 if(net_ARVALID == 'b1 && S_ARREADY ==
'b1) begin
8072 if(S_ARQOS === 0) begin
8073 arqos[ar_cnt[int_rd_cntr_width-1:0]] = ar_qos;
8075 arqos[ar_cnt[int_rd_cntr_width-1:0]] = S_ARQOS;
8079 /*--------------------------------------------------------------------------------*/
8081 always@(ar_fifo_full)
8083 if(ar_fifo_full && DEBUG_INFO)
8084 $display("[%0d] : %0s : %0s : Reached the maximum outstanding Read transactions limit (%0d). Blocking all future Read transactions until at least 1 of the outstanding Read transaction has completed.",$time, DISP_INFO, slave_name,max_rd_outstanding_transactions);
8086 /*--------------------------------------------------------------------------------*/
8088 /* Address Read Channel handshake*/
8089 // always@(negedge S_RESETN or posedge S_ACLK)
8096 // if(!ar_fifo_full) begin
8097 wait(ar_fifo_full != 1) begin
8098 slv.monitor.axi_rd_cmd_port.get(trc);
8099 // araddr[ar_cnt[int_rd_cntr_width-2:0]] = trc.addr;
8100 arlen[ar_cnt[int_rd_cntr_width-1:0]] = trc.len;
8101 arsize[ar_cnt[int_rd_cntr_width-1:0]] = trc.size;
8102 arbrst[ar_cnt[int_rd_cntr_width-1:0]] = trc.burst;
8103 arlock[ar_cnt[int_rd_cntr_width-1:0]] = trc.lock;
8104 arcache[ar_cnt[int_rd_cntr_width-1:0]]= trc.cache;
8105 arprot[ar_cnt[int_rd_cntr_width-1:0]] = trc.prot;
8106 arid[ar_cnt[int_rd_cntr_width-1:0]] = trc.id;
8107 ar_flag[ar_cnt[int_rd_cntr_width-1:0]] = 1'b1;
8108 size_local = trc.size;
8109 addr_local = trc.addr;
8111 0 : addr_final = {addr_local};
8112 1 : addr_final = {addr_local[31:1],1
'b0};
8113 2 : addr_final = {addr_local[31:2],2'b0};
8114 3 : addr_final = {addr_local[31:3],3
'b0};
8115 4 : addr_final = {addr_local[31:4],4'b0};
8116 5 : addr_final = {addr_local[31:5],5
'b0};
8117 6 : addr_final = {addr_local[31:6],6'b0};
8118 7 : addr_final = {addr_local[31:7],7
'b0};
8120 araddr[ar_cnt[int_rd_cntr_width-1:0]] = addr_final;
8122 // $display(" READ address addr_final %0h ar_cnt %0d",addr_final,ar_cnt);
8123 if(ar_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
8124 ar_cnt[int_rd_cntr_width] = ~ ar_cnt[int_rd_cntr_width];
8125 ar_cnt[int_rd_cntr_width-1:0] = 0;
8126 // $display(" reseeting the read ar_cnt %0d",ar_cnt);
8128 end /// if(!ar_fifo_full)
8132 /*--------------------------------------------------------------------------------*/
8134 /* Align Wrap data for read transaction*/
8135 task automatic get_wrap_aligned_rd_data;
8136 output [(data_bus_width*axi_burst_len)-1:0] aligned_data;
8137 input [addr_width-1:0] addr;
8138 input [(data_bus_width*axi_burst_len)-1:0] b_data;
8139 input [max_burst_bytes_width:0] v_bytes;
8140 reg [addr_width-1:0] start_addr;
8141 reg [(data_bus_width*axi_burst_len)-1:0] temp_data, wrp_data;
8145 start_addr = (addr/v_bytes) * v_bytes;
8146 wrp_bytes = addr - start_addr;
8149 while(wrp_bytes > 0) begin /// get the data that is wrapped
8150 temp_data = temp_data >> 8;
8151 temp_data[(data_bus_width*axi_burst_len)-1 : (data_bus_width*axi_burst_len)-8] = wrp_data[7:0];
8152 wrp_data = wrp_data >> 8;
8153 wrp_bytes = wrp_bytes - 1;
8155 temp_data = temp_data >> ((data_bus_width*axi_burst_len) - (v_bytes*8));
8156 wrp_bytes = addr - start_addr;
8157 wrp_data = b_data >> (wrp_bytes*8);
8159 aligned_data = (temp_data | wrp_data);
8162 /*--------------------------------------------------------------------------------*/
8164 parameter RD_DATA_REQ = 1'b0, WAIT_RD_VALID = 1
'b1;
8165 reg [addr_width-1:0] temp_read_address;
8166 reg [max_burst_bytes_width:0] temp_rd_valid_bytes;
8169 /* get the data from memory && also calculate the rresp*/
8170 always@(negedge S_RESETN or posedge SW_CLK)
8175 rd_fifo_state = RD_DATA_REQ;
8176 temp_rd_valid_bytes = 0;
8177 temp_read_address = 0;
8186 rd_fifo_state = RD_DATA_REQ;
8191 wait(ar_flag[wr_rresp_cnt[int_rd_cntr_width-1:0]] == 1'b1 && read_fifo_full == 0) begin
8193 ar_flag[wr_rresp_cnt[int_rd_cntr_width-1:0]] = 0;
8194 rresp = calculate_resp(1
'b1, araddr[wr_rresp_cnt[int_rd_cntr_width-1:0]],arprot[wr_rresp_cnt[int_rd_cntr_width-1:0]]);
8195 fifo_rresp[wr_rresp_cnt[int_rd_cntr_width-1:0]] = {arid[wr_rresp_cnt[int_rd_cntr_width-1:0]],rresp};
8196 temp_rd_valid_bytes = (arlen[wr_rresp_cnt[int_rd_cntr_width-1:0]]+1)*(2**arsize[wr_rresp_cnt[int_rd_cntr_width-1:0]]);//data_bus_width/8;
8197 // $display(" got the element for id %0h ",arid[wr_rresp_cnt[int_rd_cntr_width-1:0]]);
8199 if(arbrst[wr_rresp_cnt[int_rd_cntr_width-1:0]] === AXI_WRAP) /// wrap begin
8200 temp_read_address = (araddr[wr_rresp_cnt[int_rd_cntr_width-1:0]]/temp_rd_valid_bytes) * temp_rd_valid_bytes;
8202 temp_read_address = araddr[wr_rresp_cnt[int_rd_cntr_width-1:0]];
8203 if(rresp === AXI_OK) begin
8204 case(decode_address(temp_read_address))//decode_address(araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]]);
8205 OCM_MEM : RD_REQ_OCM = 1;
8206 DDR_MEM : RD_REQ_DDR = 1;
8207 REG_MEM : RD_REQ_REG = 1;
8208 default : invalid_rd_req = 1;
8213 RD_QOS = arqos[wr_rresp_cnt[int_rd_cntr_width-1:0]];
8214 RD_ADDR = temp_read_address; ///araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]];
8215 RD_BYTES = temp_rd_valid_bytes;
8216 rd_fifo_state = WAIT_RD_VALID;
8217 wr_rresp_cnt = wr_rresp_cnt + 1;
8218 // $display(" before resetting the read wr_rresp_cnt counter %0d", wr_rresp_cnt);
8219 // $display(" final read address RD_ADDR %0h RD_BYTES %0h" , RD_ADDR,RD_BYTES);
8220 if(wr_rresp_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
8221 wr_rresp_cnt[int_rd_cntr_width] = ~ wr_rresp_cnt[int_rd_cntr_width];
8222 wr_rresp_cnt[int_rd_cntr_width-1:0] = 0;
8223 // $display(" resetting the read wr_rresp_cnt counter %0d", wr_rresp_cnt);
8227 WAIT_RD_VALID : begin
8228 rd_fifo_state = WAIT_RD_VALID;
8229 if(RD_DATA_VALID_OCM | RD_DATA_VALID_DDR | RD_DATA_VALID_REG | invalid_rd_req) begin ///temp_dec == 2'b11) begin
8230 if(RD_DATA_VALID_DDR)
8231 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-1:0]] = RD_DATA_DDR;
8232 else if(RD_DATA_VALID_OCM)
8233 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-1:0]] = RD_DATA_OCM;
8234 else if(RD_DATA_VALID_REG)
8235 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-1:0]] = RD_DATA_REG;
8237 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-1:0]] = 0;
8238 rd_fifo_wr_ptr = rd_fifo_wr_ptr + 1;
8239 if(rd_fifo_wr_ptr[int_rd_cntr_width-1:0] === (max_rd_outstanding_transactions)) begin
8240 rd_fifo_wr_ptr[int_rd_cntr_width] = ~rd_fifo_wr_ptr[int_rd_cntr_width] ;
8241 rd_fifo_wr_ptr[int_rd_cntr_width-1:0] = 0;
8249 rd_fifo_state = RD_DATA_REQ;
8257 reg[max_burst_bytes_width:0] rd_v_b;
8258 reg [(data_bus_width*axi_burst_len)-1:0] temp_read_data;
8259 reg [(data_bus_width*axi_burst_len)-1:0] temp_wrap_data;
8260 reg[(axi_rsp_width*axi_burst_len)-1:0] temp_read_rsp;
8262 xil_axi_data_beat new_data;
8280 slv.rd_driver.get_rd_reactive(trr);
8282 trr_rd.push_back(trr.my_clone());
8301 rd_latency_count = 20;
8308 wait(arvalid_flag[rresp_time_cnt] == 1);
8313 rd_latency_count = 20;
8320 wait(trr_rd.size() > 0);
8321 trr_get_rd = trr_rd.pop_front();
8323 while ((arvalid_flag[rresp_time_cnt] ==
'b1 )&& ((($realtime - arvalid_receive_time[rresp_time_cnt])/diff_time) < rd_latency_count)) begin
8327 //if(arvalid_flag[rresp_time_cnt] && ((($realtime - arvalid_receive_time[rresp_time_cnt])/diff_time) >= rd_latency_count))
8329 // $display("%m reading form rd_delayed %0d read_fifo_empty %0d next transfer rresp_time_cnt %0d trr_get_rd.id %0h",rd_delayed ,~read_fifo_empty,rresp_time_cnt,trr_get_rd.id);
8330 if(!read_fifo_empty && rd_delayed)begin
8332 // $display("%m reading form rd_delayed %0d next transfer rresp_time_cnt %0d trr_get_rd.id %0h",rd_delayed ,rresp_time_cnt,trr_get_rd.id);
8333 arvalid_flag[rresp_time_cnt] = 1'b0;
8334 rd_v_b = ((arlen[rd_cnt[int_rd_cntr_width-1:0]]+1)*(2**arsize[rd_cnt[int_rd_cntr_width-1:0]]));
8335 temp_read_data = read_fifo[rd_fifo_rd_ptr[int_rd_cntr_width-1:0]];
8336 rd_fifo_rd_ptr = rd_fifo_rd_ptr+1;
8338 if(arbrst[rd_cnt[int_rd_cntr_width-1:0]]=== AXI_WRAP) begin
8339 get_wrap_aligned_rd_data(temp_wrap_data, araddr[rd_cnt[int_rd_cntr_width-1:0]], temp_read_data, rd_v_b);
8340 temp_read_data = temp_wrap_data;
8343 repeat(axi_burst_len) begin
8344 temp_read_rsp = temp_read_rsp >> axi_rsp_width;
8345 temp_read_rsp[(axi_rsp_width*axi_burst_len)-1:(axi_rsp_width*axi_burst_len)-axi_rsp_width] = fifo_rresp[rd_cnt[int_rd_cntr_width-1:0]][rsp_msb : rsp_lsb];
8347 case (arsize[rd_cnt[int_rd_cntr_width-1:0]])
8348 3
'b000: trr_get_rd.size = XIL_AXI_SIZE_1BYTE;
8349 3'b001: trr_get_rd.size = XIL_AXI_SIZE_2BYTE;
8350 3
'b010: trr_get_rd.size = XIL_AXI_SIZE_4BYTE;
8351 3'b011: trr_get_rd.size = XIL_AXI_SIZE_8BYTE;
8352 3
'b100: trr_get_rd.size = XIL_AXI_SIZE_16BYTE;
8353 3'b101: trr_get_rd.size = XIL_AXI_SIZE_32BYTE;
8354 3
'b110: trr_get_rd.size = XIL_AXI_SIZE_64BYTE;
8355 3'b111: trr_get_rd.size = XIL_AXI_SIZE_128BYTE;
8357 trr_get_rd.len = arlen[rd_cnt[int_rd_cntr_width-1:0]];
8358 trr_get_rd.id = (arid[rd_cnt[int_rd_cntr_width-1:0]]);
8360 trr_get_rd.rresp =
new[((2**arsize[rd_cnt[int_rd_cntr_width-1:0]])*(arlen[rd_cnt[int_rd_cntr_width-1:0]]+1))];
8362 for(j = 0; j < (arlen[rd_cnt[int_rd_cntr_width-1:0]]+1); j = j+1) begin
8363 for(k = 0; k < (2**arsize[rd_cnt[int_rd_cntr_width-1:0]]); k = k+1) begin
8364 new_data[(k*8)+:8] = temp_read_data[7:0];
8365 temp_read_data = temp_read_data >> 8;
8367 trr_get_rd.set_data_beat(j, new_data);
8369 case(temp_read_rsp[(j*2)+:2])
8370 2
'b00: trr_get_rd.rresp[j] = XIL_AXI_RESP_OKAY;
8371 2'b01: trr_get_rd.rresp[j] = XIL_AXI_RESP_EXOKAY;
8372 2
'b10: trr_get_rd.rresp[j] = XIL_AXI_RESP_SLVERR;
8373 2'b11: trr_get_rd.rresp[j] = XIL_AXI_RESP_DECERR;
8376 slv.rd_driver.send(trr_get_rd);
8377 rd_cnt = rd_cnt + 1;
8378 rresp_time_cnt = rresp_time_cnt+1;
8380 if(rd_cnt[int_rd_cntr_width-1:0] === (max_rd_outstanding_transactions)) begin
8381 rd_cnt[int_rd_cntr_width] = ~ rd_cnt[int_rd_cntr_width];
8382 rd_cnt[int_rd_cntr_width-1:0] = 0;
8385 if(rresp_time_cnt[int_rd_cntr_width-1:0] === (max_rd_outstanding_transactions)) begin
8386 rresp_time_cnt[int_rd_cntr_width] = ~ rresp_time_cnt[int_rd_cntr_width] ;
8387 rresp_time_cnt[int_rd_cntr_width-1:0] = 0;
8390 if(rd_fifo_rd_ptr[int_rd_cntr_width-1:0] === (max_rd_outstanding_transactions)) begin
8391 rd_fifo_rd_ptr[int_rd_cntr_width] = ~rd_fifo_rd_ptr[int_rd_cntr_width] ;
8392 rd_fifo_rd_ptr[int_rd_cntr_width-1:0] = 0;
8395 rd_latency_count = get_rd_lat_number(1);
8415 import axi_vip_pkg::*;
8460 parameter enable_this_port = 0;
8461 parameter master_name =
"Master";
8462 parameter data_bus_width = 32;
8463 parameter address_bus_width = 32;
8464 parameter id_bus_width = 6;
8465 parameter max_outstanding_transactions = 8;
8466 parameter exclusive_access_supported = 0;
8467 parameter ID = 12
'hC00;
8468 `include "processing_system7_vip_v1_0_10_local_params.v"
8471 12'b11_000_000_00_00
8472 12
'b11_010_000_00_00
8473 12'b11_011_000_00_00
8474 12
'b11_100_000_00_00
8475 12'b11_101_000_00_00
8476 12
'b11_110_000_00_00
8477 12'b11_111_000_00_00
8479 12
'b11_000_001_00_00
8480 12'b11_010_001_00_00
8481 12
'b11_011_001_00_00
8482 12'b11_100_001_00_00
8483 12
'b11_101_001_00_00
8484 12'b11_110_001_00_00
8485 12
'b11_111_001_00_00
8496 output [id_bus_width-1:0] M_ARID;
8497 output [id_bus_width-1:0] M_AWID;
8498 output [id_bus_width-1:0] M_WID;
8499 output [axi_brst_type_width-1:0] M_ARBURST;
8500 output [axi_lock_width-1:0] M_ARLOCK;
8501 output [axi_size_width-1:0] M_ARSIZE;
8502 output [axi_brst_type_width-1:0] M_AWBURST;
8503 output [axi_lock_width-1:0] M_AWLOCK;
8504 output [axi_size_width-1:0] M_AWSIZE;
8505 output [axi_prot_width-1:0] M_ARPROT;
8506 output [axi_prot_width-1:0] M_AWPROT;
8507 output [address_bus_width-1:0] M_ARADDR;
8508 output [address_bus_width-1:0] M_AWADDR;
8509 output [data_bus_width-1:0] M_WDATA;
8510 output [axi_cache_width-1:0] M_ARCACHE;
8511 output [axi_len_width-1:0] M_ARLEN;
8512 output [axi_qos_width-1:0] M_ARQOS; // not connected to AXI VIP
8513 output [axi_cache_width-1:0] M_AWCACHE;
8514 output [axi_len_width-1:0] M_AWLEN;
8515 output [axi_qos_width-1:0] M_AWQOS; // not connected to AXI VIP
8516 output [(data_bus_width/8)-1:0] M_WSTRB;
8524 input [id_bus_width-1:0] M_BID;
8525 input [id_bus_width-1:0] M_RID;
8526 input [axi_rsp_width-1:0] M_BRESP;
8527 input [axi_rsp_width-1:0] M_RRESP;
8528 input [data_bus_width-1:0] M_RDATA;
8533 reg DEBUG_INFO = 1'b1;
8534 reg STOP_ON_ERROR = 1
'b1;
8536 integer use_id_no = 0;
8538 assign M_ARQOS = 'b0;
8539 assign M_AWQOS =
'b0;
8540 assign net_RESETN = M_RESETN; //ENABLE_THIS_PORT ? M_RESETN : 1'b0;
8541 assign net_RVALID = enable_this_port ? M_RVALID : 1
'b0;
8542 assign net_BVALID = enable_this_port ? M_BVALID : 1'b0;
8545 if(DEBUG_INFO) begin
8546 if(enable_this_port)
8547 $display(
"[%0d] : %0s : %0s : Port is ENABLED.",$time, DISP_INFO, master_name);
8549 $display(
"[%0d] : %0s : %0s : Port is DISABLED.",$time, DISP_INFO, master_name);
8553 initial master.IF.xilinx_slave_ready_check_enable = 0;
8555 repeat(2) @(posedge M_ACLK);
8556 if(!enable_this_port) begin
8563 axi_mst_agent #(1,address_bus_width, data_bus_width, data_bus_width, id_bus_width,id_bus_width,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1) mst;
8567 .C_AXI_INTERFACE_MODE(0),
8568 .C_AXI_ADDR_WIDTH(address_bus_width),
8569 .C_AXI_WDATA_WIDTH(data_bus_width),
8570 .C_AXI_RDATA_WIDTH(data_bus_width),
8571 .C_AXI_WID_WIDTH(id_bus_width),
8572 .C_AXI_RID_WIDTH(id_bus_width),
8573 .C_AXI_AWUSER_WIDTH(0),
8574 .C_AXI_ARUSER_WIDTH(0),
8575 .C_AXI_WUSER_WIDTH(0),
8576 .C_AXI_RUSER_WIDTH(0),
8577 .C_AXI_BUSER_WIDTH(0),
8578 .C_AXI_SUPPORTS_NARROW(1),
8579 .C_AXI_HAS_BURST(1),
8581 .C_AXI_HAS_CACHE(1),
8582 .C_AXI_HAS_REGION(0),
8585 .C_AXI_HAS_WSTRB(1),
8586 .C_AXI_HAS_BRESP(1),
8587 .C_AXI_HAS_RRESP(1),
8588 .C_AXI_HAS_ARESETN(1)
8592 .aresetn(net_RESETN),
8593 .s_axi_awid(12'h000),
8594 .s_axi_awaddr(32
'B0),
8596 .s_axi_awsize(3
'B0),
8597 .s_axi_awburst(2'B0),
8598 .s_axi_awlock(2
'b00),
8599 .s_axi_awcache(4'B0),
8600 .s_axi_awprot(3
'B0),
8601 .s_axi_awregion(4'B0),
8603 .s_axi_awuser(1'B0),
8604 .s_axi_awvalid(1
'B0),
8606 .s_axi_wid(12'h000),
8607 .s_axi_wdata(32
'B0),
8611 .s_axi_wvalid(1
'B0),
8617 .s_axi_bready(1'B0),
8618 .s_axi_arid(12
'h000),
8619 .s_axi_araddr(32'B0),
8621 .s_axi_arsize(3'B0),
8622 .s_axi_arburst(2
'B0),
8623 .s_axi_arlock(2'b00),
8624 .s_axi_arcache(4
'B0),
8625 .s_axi_arprot(3'B0),
8626 .s_axi_arregion(4
'B0),
8628 .s_axi_aruser(1
'B0),
8629 .s_axi_arvalid(1'B0),
8637 .s_axi_rready(1
'B0),
8638 .m_axi_awid(M_AWID),
8639 .m_axi_awaddr(M_AWADDR),
8640 .m_axi_awlen(M_AWLEN),
8641 .m_axi_awsize(M_AWSIZE),
8642 .m_axi_awburst(M_AWBURST),
8643 .m_axi_awlock(M_AWLOCK),
8644 .m_axi_awcache(M_AWCACHE),
8645 .m_axi_awprot(M_AWPROT),
8649 .m_axi_awvalid(M_AWVALID),
8650 .m_axi_awready(M_AWREADY),
8652 .m_axi_wdata(M_WDATA),
8653 .m_axi_wstrb(M_WSTRB),
8654 .m_axi_wlast(M_WLAST),
8656 .m_axi_wvalid(M_WVALID),
8657 .m_axi_wready(M_WREADY),
8659 .m_axi_bresp(M_BRESP),
8661 .m_axi_bvalid(M_BVALID),
8662 .m_axi_bready(M_BREADY),
8663 .m_axi_arid(M_ARID),
8664 .m_axi_araddr(M_ARADDR),
8665 .m_axi_arlen(M_ARLEN),
8666 .m_axi_arsize(M_ARSIZE),
8667 .m_axi_arburst(M_ARBURST),
8668 .m_axi_arlock(M_ARLOCK),
8669 .m_axi_arcache(M_ARCACHE),
8670 .m_axi_arprot(M_ARPROT),
8672 .m_axi_arqos(M_ARQOS),
8674 .m_axi_arvalid(M_ARVALID),
8675 .m_axi_arready(M_ARREADY),
8677 .m_axi_rdata(M_RDATA),
8678 .m_axi_rresp(M_RRESP),
8679 .m_axi_rlast(M_RLAST),
8681 .m_axi_rvalid(M_RVALID),
8682 .m_axi_rready(M_RREADY)
8685 axi_transaction tw, tr;
8686 axi_monitor_transaction tr_m, tw_m;
8687 axi_ready_gen bready_gen;
8688 axi_ready_gen rready_gen;
8691 mst = new("mst",master.IF);
8692 tr_m = new("master monitor trans");
8697 master.IF.set_enable_xchecks_to_warn();
8698 repeat(10) @(posedge M_ACLK);
8699 master.IF.set_enable_xchecks();
8703 /* Call to VIP APIs */
8704 task automatic read_burst(input [address_bus_width-1:0] addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,output [(axi_burst_len*data_bus_width)-1:0] data, output [(axi_rsp_width*axi_burst_len)-1:0] response);
8706 xil_axi_burst_t burst_i;
8707 xil_axi_size_t size_i;
8708 xil_axi_data_beat new_data;
8709 xil_axi_lock_t lock_i;
8713 2'b00: burst_i = XIL_AXI_BURST_TYPE_FIXED;
8714 2
'b01: burst_i = XIL_AXI_BURST_TYPE_INCR;
8715 2'b10: burst_i = XIL_AXI_BURST_TYPE_WRAP;
8716 2
'b11: burst_i = XIL_AXI_BURST_TYPE_RSVD;
8719 3'b000: size_i = XIL_AXI_SIZE_1BYTE;
8720 3
'b001: size_i = XIL_AXI_SIZE_2BYTE;
8721 3'b010: size_i = XIL_AXI_SIZE_4BYTE;
8722 3
'b011: size_i = XIL_AXI_SIZE_8BYTE;
8723 3'b100: size_i = XIL_AXI_SIZE_16BYTE;
8724 3
'b101: size_i = XIL_AXI_SIZE_32BYTE;
8725 3'b110: size_i = XIL_AXI_SIZE_64BYTE;
8726 3
'b111: size_i = XIL_AXI_SIZE_128BYTE;
8729 2'b00: lock_i = XIL_AXI_ALOCK_NOLOCK;
8730 2
'b01: lock_i = XIL_AXI_ALOCK_EXCL;
8731 2'b10: lock_i = XIL_AXI_ALOCK_LOCKED;
8732 2
'b11: lock_i = XIL_AXI_ALOCK_RSVD;
8734 if(enable_this_port)begin
8737 rready_gen = mst.rd_driver.create_ready("rready");
8738 rready_gen.set_ready_policy(XIL_AXI_READY_GEN_OSC);
8739 // rready_gen.set_high_time(len+1);
8740 mst.rd_driver.send_rready(rready_gen);
8743 tr = mst.rd_driver.create_transaction("write_tran");
8744 mst.rd_driver.set_transaction_depth(max_outstanding_transactions);
8745 assert(tr.randomize());
8748 $display($time,"ID2 in read strb task is %0h",ID2);
8749 tr.set_read_cmd(addr,burst_i,ID2,len,size_i);
8750 tr.set_cache(cache);
8751 tr.set_lock(lock_i);
8753 mst.rd_driver.send(tr);
8756 mst.monitor.item_collected_port.get(tr_m);
8758 for(i = 0; i < (len+1); i = i+1) begin
8759 new_data = tr_m.get_data_beat(i);
8760 //$display("axi_master new_data %0h i value %0d",new_data , i );
8761 for(int k = 0; k < (2**siz); k = k+1) begin
8762 data[(datasize*8)+:8] = new_data[(k*8)+:8];
8763 //$display("axi_master data %0h new_data %0h k value %0d datasize %0d ",data[(datasize*8)+:8],new_data[(k*8)+:8], k ,datasize );
8764 datasize = datasize+1;
8766 response = response << 2;
8767 response[1:0] = tr_m.rresp[i];
8770 $display("[%0d] : %0s : %0s : Port is disabled. 'read_burst
' will not be executed...",$time, DISP_ERR, master_name);
8771 if(STOP_ON_ERROR) $stop;
8773 //$display("axi_master data %0h response %0h ",data, response );
8776 // task automatic read_burst(input [address_bus_width-1:0] addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,output [(axi_mgp_data_width*axi_burst_len)-1:0] data, output [(axi_rsp_width*axi_burst_len)-1:0] response);
8778 // xil_axi_burst_t burst_i;
8779 // xil_axi_size_t size_i;
8780 // xil_axi_data_beat new_data;
8781 // xil_axi_lock_t lock_i;
8782 // integer datasize;
8784 // 2'b00: burst_i = XIL_AXI_BURST_TYPE_FIXED;
8840 task automatic write_burst(input [address_bus_width-1:0] addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,input [(axi_burst_len*data_bus_width)-1:0] data,input integer datasize, output [axi_rsp_width-1:0] response);
8842 xil_axi_burst_t burst_i;
8843 xil_axi_size_t size_i;
8844 xil_axi_lock_t lock_i;
8845 xil_axi_data_beat new_data;
8846 xil_axi_strb_beat new_strb;
8849 2
'b00: burst_i = XIL_AXI_BURST_TYPE_FIXED;
8850 2'b01: burst_i = XIL_AXI_BURST_TYPE_INCR;
8851 2
'b10: burst_i = XIL_AXI_BURST_TYPE_WRAP;
8852 2'b11: burst_i = XIL_AXI_BURST_TYPE_RSVD;
8855 3
'b000: size_i = XIL_AXI_SIZE_1BYTE;
8856 3'b001: size_i = XIL_AXI_SIZE_2BYTE;
8857 3
'b010: size_i = XIL_AXI_SIZE_4BYTE;
8858 3'b011: size_i = XIL_AXI_SIZE_8BYTE;
8859 3
'b100: size_i = XIL_AXI_SIZE_16BYTE;
8860 3'b101: size_i = XIL_AXI_SIZE_32BYTE;
8861 3
'b110: size_i = XIL_AXI_SIZE_64BYTE;
8862 3'b111: size_i = XIL_AXI_SIZE_128BYTE;
8865 2
'b00: lock_i = XIL_AXI_ALOCK_NOLOCK;
8866 2'b01: lock_i = XIL_AXI_ALOCK_EXCL;
8867 2
'b10: lock_i = XIL_AXI_ALOCK_LOCKED;
8868 2'b11: lock_i = XIL_AXI_ALOCK_RSVD;
8870 if(enable_this_port)begin
8873 bready_gen = mst.wr_driver.create_ready(
"bready");
8874 bready_gen.set_ready_policy(XIL_AXI_READY_GEN_OSC);
8876 mst.wr_driver.send_bready(bready_gen);
8879 tw = mst.wr_driver.create_transaction(
"write_tran");
8880 mst.wr_driver.set_transaction_depth(max_outstanding_transactions);
8881 assert(tw.randomize());
8882 tw.set_write_cmd(addr,burst_i,ID,len,size_i);
8883 tw.set_cache(cache);
8884 tw.set_lock(lock_i);
8886 for(i = 0; i < (len+1); i = i+1) begin
8887 for(j = 0; j < (2**siz); j = j+1) begin
8888 new_data[j*8+:8] = data[7:0];
8889 new_strb[j*1+:1] = 1
'b1;
8891 // $display(" addr %0h i %0d J %0d data %0h new_strb %0d axi_mgp_data_width %0d",addr,i,j,data,new_strb[j*1+:1],axi_mgp_data_width);
8893 tw.set_data_beat(i, new_data);
8894 tw.set_strb_beat(i, new_strb);
8895 // $display(" addr %0h i %0d J %0d new_data %0h new_strb %0d ",addr,i,j,new_data,new_strb);
8897 mst.wr_driver.send(tw);
8900 mst.monitor.item_collected_port.get(tw_m);
8901 response = tw_m.bresp;
8903 // $display("[%0d] : %0s : %0s : Port is disabled. 'write_burst
' will not be executed...",$time, DISP_ERR, master_name);
8904 if(STOP_ON_ERROR) $stop;
8908 // task automatic write_burst(input [address_bus_width-1:0] addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,input [(axi_mgp_data_width*axi_burst_len)-1:0] data,input integer datasize, output [axi_rsp_width-1:0] response);
8910 // xil_axi_burst_t burst_i;
8911 // xil_axi_size_t size_i;
8912 // xil_axi_lock_t lock_i;
8913 // xil_axi_data_beat new_data;
8914 // xil_axi_strb_beat new_strb;
8917 // 2'b00: burst_i = XIL_AXI_BURST_TYPE_FIXED;
8973 task automatic write_burst_strb(input [address_bus_width-1:0] addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,input [((axi_burst_len*data_bus_width))-1:0] data,input strb_en,input [((axi_burst_len*data_bus_width)/8)-1:0] strb,input integer datasize, output [axi_rsp_width-1:0] response);
8975 xil_axi_burst_t burst_i;
8976 xil_axi_size_t size_i;
8977 xil_axi_lock_t lock_i;
8978 xil_axi_data_beat new_data;
8979 xil_axi_strb_beat new_strb;
8984 2
'b00: burst_i = XIL_AXI_BURST_TYPE_FIXED;
8985 2'b01: burst_i = XIL_AXI_BURST_TYPE_INCR;
8986 2
'b10: burst_i = XIL_AXI_BURST_TYPE_WRAP;
8987 2'b11: burst_i = XIL_AXI_BURST_TYPE_RSVD;
8990 3
'b000: size_i = XIL_AXI_SIZE_1BYTE;
8991 3'b001: size_i = XIL_AXI_SIZE_2BYTE;
8992 3
'b010: size_i = XIL_AXI_SIZE_4BYTE;
8993 3'b011: size_i = XIL_AXI_SIZE_8BYTE;
8994 3
'b100: size_i = XIL_AXI_SIZE_16BYTE;
8995 3'b101: size_i = XIL_AXI_SIZE_32BYTE;
8996 3
'b110: size_i = XIL_AXI_SIZE_64BYTE;
8997 3'b111: size_i = XIL_AXI_SIZE_128BYTE;
9000 2
'b00: lock_i = XIL_AXI_ALOCK_NOLOCK;
9001 2'b01: lock_i = XIL_AXI_ALOCK_EXCL;
9002 2
'b10: lock_i = XIL_AXI_ALOCK_LOCKED;
9003 2'b11: lock_i = XIL_AXI_ALOCK_RSVD;
9005 if(enable_this_port)begin
9008 bready_gen = mst.wr_driver.create_ready(
"bready");
9009 bready_gen.set_ready_policy(XIL_AXI_READY_GEN_OSC);
9011 mst.wr_driver.send_bready(bready_gen);
9014 tw = mst.wr_driver.create_transaction(
"write_tran");
9015 mst.wr_driver.set_transaction_depth(max_outstanding_transactions);
9016 assert(tw.randomize());
9019 $display($time,
"ID1 in strb task is %0h",ID1);
9020 tw.set_write_cmd(addr,burst_i,ID1,len,size_i);
9021 tw.set_cache(cache);
9022 tw.set_lock(lock_i);
9024 if(strb_en == 0) begin
9025 for(i = 0; i < (len+1); i = i+1) begin
9026 for(j = 0; j < (2**siz); j = j+1) begin
9027 new_data[j*8+:8] = data[7:0];
9028 new_strb[j*1+:1] = 1
'b1;
9031 tw.set_data_beat(i, new_data);
9032 tw.set_strb_beat(i, new_strb);
9036 for(i = 0; i < (len+1); i = i+1) begin
9037 for(j = 0; j < (2**siz); j = j+1) begin
9038 new_data[j*8+:8] = data[7:0];
9039 new_strb[j*1+:1] = strb[0];
9043 tw.set_data_beat(i, new_data);
9044 tw.set_strb_beat(i, new_strb);
9045 // $display(" write_burst_strb new_data %0h new_strb %0h ",new_data,new_strb);
9048 mst.wr_driver.send(tw);
9051 mst.monitor.item_collected_port.get(tw_m);
9052 response = tw_m.bresp;
9054 $display("[%0d] : %0s : %0s : Port is disabled. 'write_burst_strb
' will not be executed...",$time, DISP_ERR, master_name);
9055 if(STOP_ON_ERROR) $stop;
9059 task automatic write_burst_concurrent(input [address_bus_width-1:0] addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,input [(axi_burst_len*data_bus_width)-1:0] data,input integer datasize, output [axi_rsp_width-1:0] response);
9061 if(enable_this_port)begin
9062 write_burst(addr,len,siz,burst,lck,cache,prot,data,datasize,response);
9064 $display("[%0d] : %0s : %0s : Port is disabled. 'write_burst_concurrent
' will not be executed...",$time, DISP_ERR, master_name);
9065 if(STOP_ON_ERROR) $stop;
9069 // task automatic write_burst_concurrent(input [address_bus_width-1:0] addr,input [axi_len_width-1:0] len,input [axi_size_width-1:0] siz,input [axi_brst_type_width-1:0] burst,input [axi_lock_width-1:0] lck,input [axi_cache_width-1:0] cache,input [axi_prot_width-1:0] prot,input [(axi_mgp_data_width*axi_burst_len)-1:0] data,input integer datasize, output [axi_rsp_width-1:0] response);
9071 // if(enable_this_port)begin
9072 // write_burst(addr,len,siz,burst,lck,cache,prot,data,datasize,response);
9074 // $display("[%0d] : %0s : %0s : Port is disabled. 'write_burst_concurrent
' will not be executed...",$time, DISP_ERR, master_name);
9075 // if(STOP_ON_ERROR) $stop;
9079 /* Write data from file */
9080 task automatic write_from_file;
9081 input [(max_chars*8)-1:0] file_name;
9082 input [addr_width-1:0] start_addr;
9083 input [int_width-1:0] wr_size;
9084 output [axi_rsp_width-1:0] response;
9085 reg [axi_rsp_width-1:0] wresp,rwrsp;
9086 reg [addr_width-1:0] addr;
9087 reg [(axi_burst_len*data_bus_width)-1 : 0] wr_data;
9089 integer trnsfr_bytes;
9092 integer trnsfr_lngth;
9097 reg [id_bus_width-1:0] wr_id;
9098 reg [axi_size_width-1:0] siz;
9099 reg [axi_brst_type_width-1:0] burst;
9100 reg [axi_lock_width-1:0] lck;
9101 reg [axi_cache_width-1:0] cache;
9102 reg [axi_prot_width-1:0] prot;
9104 if(!enable_this_port) begin
9105 $display("[%0d] : %0s : %0s : Port is disabled. 'write_from_file
' will not be executed...",$time, DISP_ERR, master_name);
9106 if(STOP_ON_ERROR) $stop;
9117 concurrent = $random;
9118 if(bytes > (axi_burst_len * data_bus_width/8)) begin
9119 trnsfr_bytes = (axi_burst_len * data_bus_width/8);
9120 trnsfr_lngth = axi_burst_len-1;
9121 siz_in_bytes = (data_bus_width/8);
9123 trnsfr_bytes = bytes;
9126 if(bytes > (axi_burst_len * data_bus_width/8)) begin
9127 trnsfr_lngth = axi_burst_len-1;
9128 end else if(bytes%(data_bus_width/8) == 0) begin
9129 trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9130 siz_in_bytes = (data_bus_width/8);
9132 trnsfr_lngth = bytes/(data_bus_width/8);
9133 siz_in_bytes = (data_bus_width/8);
9137 wr_fd = $fopen(file_name,"r");
9139 while (bytes > 0) begin
9151 repeat(axi_burst_len) begin /// get the data for 1 AXI burst transaction
9152 wr_data = wr_data >> data_bus_width;
9153 succ = $fscanf(wr_fd,"%h",wr_data[(axi_burst_len*data_bus_width)-1 :(axi_burst_len*data_bus_width)-data_bus_width ]); /// write as 4 bytes (data_bus_width) ..
9155 write_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, wr_data, trnsfr_bytes, rwrsp);
9156 bytes = bytes - trnsfr_bytes;
9157 addr = addr + trnsfr_bytes;
9158 if(bytes >= (axi_burst_len * data_bus_width/8) )
9159 trnsfr_bytes = (axi_burst_len * data_bus_width/8); //
9161 trnsfr_bytes = bytes;
9163 if(bytes > (axi_burst_len * data_bus_width/8))
9164 trnsfr_lngth = axi_burst_len-1;
9165 else if(bytes%(data_bus_width/8) == 0)
9166 trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9168 trnsfr_lngth = bytes/(data_bus_width/8);
9170 wresp = wresp | rwrsp;
9177 // /* Write data from file */
9178 // task automatic write_from_file;
9179 // input [(max_chars*8)-1:0] file_name;
9180 // input [addr_width-1:0] start_addr;
9181 // input [int_width-1:0] wr_size;
9182 // output [axi_rsp_width-1:0] response;
9183 // reg [axi_rsp_width-1:0] wresp,rwrsp;
9184 // reg [addr_width-1:0] addr;
9185 // reg [(axi_burst_len*data_bus_width)-1 : 0] wr_data;
9187 // integer trnsfr_bytes;
9190 // integer trnsfr_lngth;
9194 // reg [id_bus_width-1:0] wr_id;
9195 // reg [axi_size_width-1:0] siz;
9196 // reg [axi_brst_type_width-1:0] burst;
9197 // reg [axi_lock_width-1:0] lck;
9198 // reg [axi_cache_width-1:0] cache;
9199 // reg [axi_prot_width-1:0] prot;
9201 // if(!enable_this_port) begin
9202 // $display("[%0d] : %0s : %0s : Port is disabled. 'write_from_file
' will not be executed...",$time, DISP_ERR, master_name);
9203 // if(STOP_ON_ERROR) $stop;
9211 // addr = start_addr;
9214 // concurrent = $random;
9215 // if(bytes > (axi_burst_len * data_bus_width/8))
9216 // trnsfr_bytes = (axi_burst_len * data_bus_width/8);
9218 // trnsfr_bytes = bytes;
9220 // if(bytes > (axi_burst_len * data_bus_width/8))
9221 // trnsfr_lngth = axi_burst_len-1;
9222 // else if(bytes%(data_bus_width/8) == 0)
9223 // trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9225 // trnsfr_lngth = bytes/(data_bus_width/8);
9228 // wr_fd = $fopen(file_name,"r");
9230 // while (bytes > 0) begin
9231 // repeat(axi_burst_len) begin /// get the data for 1 AXI burst transaction
9232 // wr_data = wr_data >> data_bus_width;
9233 // succ = $fscanf(wr_fd,"%h",wr_data[(axi_burst_len*data_bus_width)-1 :(axi_burst_len*data_bus_width)-data_bus_width ]); /// write as 4 bytes (data_bus_width) ..
9235 // write_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, wr_data, trnsfr_bytes, rwrsp);
9236 // bytes = bytes - trnsfr_bytes;
9237 // addr = addr + trnsfr_bytes;
9238 // if(bytes >= (axi_burst_len * data_bus_width/8) )
9239 // trnsfr_bytes = (axi_burst_len * data_bus_width/8); //
9241 // trnsfr_bytes = bytes;
9243 // if(bytes > (axi_burst_len * data_bus_width/8))
9244 // trnsfr_lngth = axi_burst_len-1;
9245 // else if(bytes%(data_bus_width/8) == 0)
9246 // trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9248 // trnsfr_lngth = bytes/(data_bus_width/8);
9250 // wresp = wresp | rwrsp;
9252 // response = wresp;
9257 /* Read data to file */
9258 task automatic read_to_file;
9259 input [(max_chars*8)-1:0] file_name;
9260 input [addr_width-1:0] start_addr;
9261 input [int_width-1:0] rd_size;
9262 output [axi_rsp_width-1:0] response;
9263 reg [axi_rsp_width-1:0] rresp, rrrsp;
9264 reg [addr_width-1:0] addr;
9266 integer trnsfr_lngth;
9267 reg [(axi_burst_len*data_bus_width)-1 :0] rd_data;
9269 reg [id_bus_width-1:0] rd_id;
9271 reg [axi_size_width-1:0] siz;
9273 reg [axi_brst_type_width-1:0] burst;
9274 reg [axi_lock_width-1:0] lck;
9275 reg [axi_cache_width-1:0] cache;
9276 reg [axi_prot_width-1:0] prot;
9278 if(!enable_this_port) begin
9279 $display("[%0d] : %0s : %0s : Port is disabled. 'read_to_file
' will not be executed...",$time, DISP_ERR, master_name);
9280 if(STOP_ON_ERROR) $stop;
9294 if(bytes > (axi_burst_len * data_bus_width/8)) begin
9295 trnsfr_lngth = axi_burst_len-1;
9296 siz_in_bytes = (data_bus_width/8);
9298 else if(bytes%(data_bus_width/8) == 0) begin
9299 trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9300 siz_in_bytes = (data_bus_width/8);
9303 trnsfr_lngth = bytes/(data_bus_width/8);
9304 siz_in_bytes = (data_bus_width/8);
9307 rd_fd = $fopen(file_name,"w");
9309 while (bytes > 0) begin
9320 read_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, rd_data, rrrsp);
9321 repeat(trnsfr_lngth+1) begin
9322 $fdisplayh(rd_fd,rd_data[data_bus_width-1:0]);
9323 rd_data = rd_data >> data_bus_width;
9326 addr = addr + (trnsfr_lngth+1)*4;
9328 if(bytes >= (axi_burst_len * data_bus_width/8) )
9329 bytes = bytes - (axi_burst_len * data_bus_width/8); //
9333 if(bytes > (axi_burst_len * data_bus_width/8))
9334 trnsfr_lngth = axi_burst_len-1;
9335 else if(bytes%(data_bus_width/8) == 0)
9336 trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9338 trnsfr_lngth = bytes/(data_bus_width/8);
9340 rresp = rresp | rrrsp;
9347 // task automatic read_to_file;
9348 // input [(max_chars*8)-1:0] file_name;
9349 // input [addr_width-1:0] start_addr;
9350 // input [int_width-1:0] rd_size;
9351 // output [axi_rsp_width-1:0] response;
9352 // reg [axi_rsp_width-1:0] rresp, rrrsp;
9353 // reg [addr_width-1:0] addr;
9355 // integer trnsfr_lngth;
9356 // reg [(axi_burst_len*data_bus_width)-1 :0] rd_data;
9358 // reg [id_bus_width-1:0] rd_id;
9360 // reg [axi_size_width-1:0] siz;
9361 // reg [axi_brst_type_width-1:0] burst;
9362 // reg [axi_lock_width-1:0] lck;
9363 // reg [axi_cache_width-1:0] cache;
9364 // reg [axi_prot_width-1:0] prot;
9366 // if(!enable_this_port) begin
9367 // $display("[%0d] : %0s : %0s : Port is disabled. 'read_to_file
' will not be executed...",$time, DISP_ERR, master_name);
9368 // if(STOP_ON_ERROR) $stop;
9376 // addr = start_addr;
9382 // if(bytes > (axi_burst_len * data_bus_width/8))
9383 // trnsfr_lngth = axi_burst_len-1;
9384 // else if(bytes%(data_bus_width/8) == 0)
9385 // trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9387 // trnsfr_lngth = bytes/(data_bus_width/8);
9389 // rd_fd = $fopen(file_name,"w");
9391 // while (bytes > 0) begin
9392 // read_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, rd_data, rrrsp);
9393 // repeat(trnsfr_lngth+1) begin
9394 // $fdisplayh(rd_fd,rd_data[data_bus_width-1:0]);
9395 // rd_data = rd_data >> data_bus_width;
9398 // addr = addr + (trnsfr_lngth+1)*4;
9400 // if(bytes >= (axi_burst_len * data_bus_width/8) )
9401 // bytes = bytes - (axi_burst_len * data_bus_width/8); //
9405 // if(bytes > (axi_burst_len * data_bus_width/8))
9406 // trnsfr_lngth = axi_burst_len-1;
9407 // else if(bytes%(data_bus_width/8) == 0)
9408 // trnsfr_lngth = bytes/(data_bus_width/8) - 1;
9410 // trnsfr_lngth = bytes/(data_bus_width/8);
9412 // rresp = rresp | rrrsp;
9414 // response = rresp;
9419 /* Write data (used for transfer size <= 128 Bytes */
9420 task automatic write_data;
9421 input [addr_width-1:0] start_addr;
9422 input [max_transfer_bytes_width:0] wr_size;
9423 input [((axi_burst_len*data_bus_width))-1:0] w_data;
9424 output [axi_rsp_width-1:0] response;
9425 reg [axi_rsp_width-1:0] wresp,rwrsp;
9426 reg [addr_width-1:0] addr;
9427 reg [addr_width-1:0] mask_addr;
9428 reg [7:0] bytes,tmp_bytes;
9430 // reg [max_transfer_bytes_width*8:0] wr_strb;
9431 reg [((axi_burst_len*data_bus_width)/8):0] wr_strb;
9432 integer trnsfr_bytes,strb_cnt;
9433 reg [((axi_burst_len*data_bus_width))-1:0] wr_data;
9434 integer trnsfr_lngth;
9437 reg [id_bus_width-1:0] wr_id;
9438 reg [axi_size_width-1:0] siz;
9440 reg [axi_brst_type_width-1:0] burst;
9441 reg [axi_lock_width-1:0] lck;
9442 reg [axi_cache_width-1:0] cache;
9443 reg [axi_prot_width-1:0] prot;
9449 if(!enable_this_port) begin
9450 $display("[%0d] : %0s : %0s : Port is disabled. 'write_data
' will not be executed...",$time, DISP_ERR, master_name);
9451 //==if(STOP_ON_ERROR) $stop;
9452 if(STOP_ON_ERROR) $finish;
9458 concurrent = $random;
9465 pad_bytes = start_addr[clogb2(data_bus_width/8)-1:0];
9466 ID_tmp = $urandom();
9470 $display("wr_id called with wr_size %0h ",wr_id);
9471 // $display("outside pad_bytes %0d ",pad_bytes);
9472 if(bytes+pad_bytes > (data_bus_width/8*axi_burst_len)) begin /// for unaligned address
9473 trnsfr_bytes = (data_bus_width*axi_burst_len)/8 - pad_bytes;//start_addr[1:0];
9474 trnsfr_lngth = axi_burst_len-1;
9475 siz_in_bytes = (data_bus_width/8);
9476 // $display("0 pad_bytes %0d ",pad_bytes);
9478 trnsfr_bytes = bytes;
9479 tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9480 if(tmp_bytes%(data_bus_width/8) == 0) begin
9481 trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9482 siz_in_bytes = (data_bus_width/8);
9483 // $display("1 pad_bytes %0d ",pad_bytes);
9485 trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9486 siz_in_bytes = (data_bus_width/8);
9487 // $display("2 pad_bytes %0d ",pad_bytes);
9491 if(bytes > siz_in_bytes) begin
9492 strb_cnt = ((bytes/siz_in_bytes)*siz_in_bytes) + (bytes%siz_in_bytes);
9493 // $display("strb_cnt %0d (bytes/siz_in_bytes) %0d (bytes) %0d",strb_cnt,bytes/siz_in_bytes,bytes%siz_in_bytes);
9496 // $display("strb_cnt %0d max_transfer_bytes_width %0d",strb_cnt,max_transfer_bytes_width);
9499 while (bytes > 0) begin
9510 // $display("bytes %0d",bytes);
9511 // $display("addr %0h trnsfr_lngth %0d siz %0d burst %0d wr_data %0h trnsfr_bytes %0d siz_in_bytes %0d ",addr,trnsfr_lngth,siz,burst,wr_data,trnsfr_bytes,siz_in_bytes);
9512 mask_addr = addr[27:0] & (~(1 << siz));
9513 // $display("mask_addr %0h addr %0h (~(1 << siz)) %0h ((1 << siz)) %0h size %0d ",mask_addr,addr,(~(1 << siz)), ((1 << siz)),siz);
9514 if(pad_bytes != 0) begin
9515 wr_data = (wr_data << (mask_addr[3:0]*8) );
9516 // $display(" pading bytes wr_data %0h ",wr_data);
9519 // $display(" non pading bytes wr_data %0h ",wr_data);
9522 // $display("wr_data %0h",wr_data);
9523 for(j=0;j<strb_cnt;j=j+1) begin
9524 wr_strb = {wr_strb, 1'b1};
9527 for(j=0;j<pad_bytes;j=j+1) begin
9528 wr_strb = {wr_strb ,1
'b0};
9529 // $display("new wr_strb %0h",wr_strb);
9532 // write_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, wr_data[(axi_burst_len*data_bus_width)-1:0], trnsfr_bytes, rwrsp);
9533 write_burst_strb(addr, trnsfr_lngth, siz, burst, lck, cache, prot, wr_data[((axi_burst_len*data_bus_width))-1:0], 1,wr_strb,trnsfr_bytes, rwrsp);
9534 wr_data = wr_data >> (trnsfr_bytes*8);
9535 // $display("wr_data %0h",wr_data);
9536 // $display("trnsfr_bytes %0d",trnsfr_bytes);
9537 bytes = bytes - trnsfr_bytes;
9538 addr = addr + trnsfr_bytes;
9539 // $display("addr %0d",addr);
9540 if(bytes > (axi_burst_len * data_bus_width/8)) begin
9541 trnsfr_bytes = (axi_burst_len * data_bus_width/8) - pad_bytes;//start_addr[1:0];
9542 trnsfr_lngth = axi_burst_len-1;
9544 // $display("trnsfr_lngth %0d pad_bytes %0d",trnsfr_lngth,pad_bytes);
9546 trnsfr_bytes = bytes;
9547 // $display(" 1 trnsfr_bytes %0d",trnsfr_bytes);
9548 tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9549 if(tmp_bytes%(data_bus_width/8) == 0) begin
9550 trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9551 // $display("2 trnsfr_lngth %0d",trnsfr_lngth);
9553 trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9555 // $display("3 trnsfr_lngth %0d pad_bytes %0d",trnsfr_lngth,pad_bytes);
9558 wresp = wresp | rwrsp;
9565 // task automatic write_data;
9566 // input [addr_width-1:0] start_addr;
9567 // input [max_transfer_bytes_width:0] wr_size;
9568 // input [(max_transfer_bytes*8)-1:0] w_data;
9569 // output [axi_rsp_width-1:0] response;
9570 // reg [axi_rsp_width-1:0] wresp,rwrsp;
9571 // reg [addr_width-1:0] addr;
9572 // reg [7:0] bytes,tmp_bytes;
9573 // integer trnsfr_bytes;
9574 // reg [(max_transfer_bytes*8)-1:0] wr_data;
9575 // integer trnsfr_lngth;
9578 // reg [id_bus_width-1:0] wr_id;
9579 // reg [axi_size_width-1:0] siz;
9580 // reg [axi_brst_type_width-1:0] burst;
9581 // reg [axi_lock_width-1:0] lck;
9582 // reg [axi_cache_width-1:0] cache;
9583 // reg [axi_prot_width-1:0] prot;
9585 // integer pad_bytes;
9587 // if(!enable_this_port) begin
9588 // $display("[%0d] : %0s : %0s : Port is disabled. 'write_data
' will not be executed...",$time, DISP_ERR, master_name);
9589 // if(STOP_ON_ERROR) $stop;
9591 // addr = start_addr;
9594 // wr_data = w_data;
9595 // concurrent = $random;
9601 // pad_bytes = start_addr[clogb2(data_bus_width/8)-1:0];
9603 // if(bytes+pad_bytes > (data_bus_width/8*axi_burst_len)) begin /// for unaligned address
9604 // trnsfr_bytes = (data_bus_width*axi_burst_len)/8 - pad_bytes;//start_addr[1:0];
9605 // trnsfr_lngth = axi_burst_len-1;
9607 // trnsfr_bytes = bytes;
9608 // tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9609 // if(tmp_bytes%(data_bus_width/8) == 0)
9610 // trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9612 // trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9615 // while (bytes > 0) begin
9616 // write_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, wr_data[(axi_burst_len*data_bus_width)-1:0], trnsfr_bytes, rwrsp);
9617 // wr_data = wr_data >> (trnsfr_bytes*8);
9618 // bytes = bytes - trnsfr_bytes;
9619 // addr = addr + trnsfr_bytes;
9620 // if(bytes > (axi_burst_len * data_bus_width/8)) begin
9621 // trnsfr_bytes = (axi_burst_len * data_bus_width/8) - pad_bytes;//start_addr[1:0];
9622 // trnsfr_lngth = axi_burst_len-1;
9624 // trnsfr_bytes = bytes;
9625 // tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9626 // if(tmp_bytes%(data_bus_width/8) == 0)
9627 // trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9629 // trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9631 // wresp = wresp | rwrsp;
9633 // response = wresp;
9638 /* Read data (used for transfer size <= 128 Bytes */
9639 task automatic read_data;
9640 input [addr_width-1:0] start_addr;
9641 input [max_transfer_bytes_width:0] rd_size;
9642 // output [(axi_burst_len*data_bus_width)-1:0] r_data;
9643 output [(max_transfer_bytes*8)-1:0] r_data;
9644 output [axi_rsp_width-1:0] response;
9645 reg [axi_rsp_width-1:0] rresp,rdrsp;
9646 reg [addr_width-1:0] addr;
9647 reg [max_transfer_bytes_width:0] bytes,tmp_bytes;
9648 integer trnsfr_bytes;
9649 // reg [(axi_burst_len*data_bus_width)-1:0] rd_data;
9650 reg [(max_transfer_bytes*8)-1:0] rd_data;
9651 reg [(axi_burst_len*data_bus_width)-1:0] rcv_rd_data;
9652 integer total_rcvd_bytes;
9653 integer trnsfr_lngth;
9655 reg [id_bus_width-1:0] rd_id;
9657 reg [axi_size_width-1:0] siz;
9659 reg [axi_brst_type_width-1:0] burst;
9660 reg [axi_lock_width-1:0] lck;
9661 reg [axi_cache_width-1:0] cache;
9662 reg [axi_prot_width-1:0] prot;
9667 if(!enable_this_port) begin
9668 $display("[%0d] : %0s : %0s : Port is disabled. 'read_data
' will not be executed...",$time, DISP_ERR, master_name);
9669 if(STOP_ON_ERROR) $stop;
9674 total_rcvd_bytes = 0;
9683 pad_bytes = start_addr[clogb2(data_bus_width/8)-1:0];
9685 if(bytes+ pad_bytes > (axi_burst_len * data_bus_width/8)) begin /// for unaligned address
9686 trnsfr_bytes = (axi_burst_len * data_bus_width/8) - pad_bytes;//start_addr[1:0];
9687 trnsfr_lngth = axi_burst_len-1;
9688 siz_in_bytes = (data_bus_width/8);
9689 // $display("0 pad_bytes %0d ",pad_bytes);
9691 trnsfr_bytes = bytes;
9692 tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9693 if(tmp_bytes%(data_bus_width/8) == 0) begin
9694 trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9695 siz_in_bytes = (data_bus_width/8);
9696 // $display("1 pad_bytes %0d ",pad_bytes);
9699 trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9700 siz_in_bytes = (data_bus_width/8);
9701 // $display("2 pad_bytes %0d ",pad_bytes);
9704 while (bytes > 0) begin
9715 read_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, rcv_rd_data, rdrsp);
9716 //$display(" axi_master read_data rcv_rd_data %0h rdrsp %0h",rcv_rd_data, rdrsp);
9717 for(i = 0; i < trnsfr_bytes; i = i+1) begin
9718 rd_data = rd_data >> 8;
9719 rd_data[(max_transfer_bytes*8)-1 : (max_transfer_bytes*8)-8] = rcv_rd_data[7:0];
9720 rcv_rd_data = rcv_rd_data >> 8;
9721 total_rcvd_bytes = total_rcvd_bytes+1;
9722 //$display(" axi_master read_data rcv_rd_data %0h rd_data %0h total_rcvd_bytes %0d",rcv_rd_data, rd_data,total_rcvd_bytes);
9723 // $display(" axi_master max_transfer_bytes %0d",max_transfer_bytes);
9725 bytes = bytes - trnsfr_bytes;
9726 addr = addr + trnsfr_bytes;
9727 if(bytes > (axi_burst_len * data_bus_width/8)) begin
9728 trnsfr_bytes = (axi_burst_len * data_bus_width/8) - pad_bytes;//start_addr[1:0];
9731 trnsfr_bytes = bytes;
9732 tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9733 if(tmp_bytes%(data_bus_width/8) == 0)
9734 trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9736 trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9738 rresp = rresp | rdrsp;
9740 rd_data = rd_data >> (max_transfer_bytes - total_rcvd_bytes)*8;
9742 //$display(" afi_master read_data r_data %0h",r_data);
9748 // task automatic read_data;
9749 // input [addr_width-1:0] start_addr;
9750 // input [max_transfer_bytes_width:0] rd_size;
9751 // output [(max_transfer_bytes*8)-1:0] r_data;
9752 // output [axi_rsp_width-1:0] response;
9753 // reg [axi_rsp_width-1:0] rresp,rdrsp;
9754 // reg [addr_width-1:0] addr;
9755 // reg [max_transfer_bytes_width:0] bytes,tmp_bytes;
9756 // integer trnsfr_bytes;
9757 // reg [(max_transfer_bytes*8)-1 : 0] rd_data;
9758 // reg [(axi_burst_len*data_bus_width)-1:0] rcv_rd_data;
9759 // integer total_rcvd_bytes;
9760 // integer trnsfr_lngth;
9762 // reg [id_bus_width-1:0] rd_id;
9764 // reg [axi_size_width-1:0] siz;
9765 // reg [axi_brst_type_width-1:0] burst;
9766 // reg [axi_lock_width-1:0] lck;
9767 // reg [axi_cache_width-1:0] cache;
9768 // reg [axi_prot_width-1:0] prot;
9770 // integer pad_bytes;
9773 // if(!enable_this_port) begin
9774 // $display("[%0d] : %0s : %0s : Port is disabled. 'read_data
' will not be executed...",$time, DISP_ERR, master_name);
9775 // if(STOP_ON_ERROR) $stop;
9777 // addr = start_addr;
9780 // total_rcvd_bytes = 0;
9789 // pad_bytes = start_addr[clogb2(data_bus_width/8)-1:0];
9791 // if(bytes+ pad_bytes > (axi_burst_len * data_bus_width/8)) begin /// for unaligned address
9792 // trnsfr_bytes = (axi_burst_len * data_bus_width/8) - pad_bytes;//start_addr[1:0];
9793 // trnsfr_lngth = axi_burst_len-1;
9795 // trnsfr_bytes = bytes;
9796 // tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9797 // if(tmp_bytes%(data_bus_width/8) == 0)
9798 // trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9800 // trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9802 // while (bytes > 0) begin
9803 // read_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, rcv_rd_data, rdrsp);
9804 // for(i = 0; i < trnsfr_bytes; i = i+1) begin
9805 // rd_data = rd_data >> 8;
9806 // rd_data[(max_transfer_bytes*8)-1 : (max_transfer_bytes*8)-8] = rcv_rd_data[7:0];
9807 // rcv_rd_data = rcv_rd_data >> 8;
9808 // total_rcvd_bytes = total_rcvd_bytes+1;
9810 // bytes = bytes - trnsfr_bytes;
9811 // addr = addr + trnsfr_bytes;
9812 // if(bytes > (axi_burst_len * data_bus_width/8)) begin
9813 // trnsfr_bytes = (axi_burst_len * data_bus_width/8) - pad_bytes;//start_addr[1:0];
9814 // trnsfr_lngth = 15;
9816 // trnsfr_bytes = bytes;
9817 // tmp_bytes = bytes + pad_bytes;//start_addr[1:0];
9818 // if(tmp_bytes%(data_bus_width/8) == 0)
9819 // trnsfr_lngth = tmp_bytes/(data_bus_width/8) - 1;
9821 // trnsfr_lngth = tmp_bytes/(data_bus_width/8);
9823 // rresp = rresp | rdrsp;
9825 // rd_data = rd_data >> (max_transfer_bytes - total_rcvd_bytes)*8;
9826 // r_data = rd_data;
9827 // response = rresp;
9833 /* Wait Register Update in PL */
9834 /* Issue a series of 1 burst length reads until the expected data pattern is received */
9836 task automatic wait_reg_update;
9837 input [addr_width-1:0] addri;
9838 input [data_width-1:0] datai;
9839 input [data_width-1:0] maski;
9840 input [int_width-1:0] time_interval;
9841 input [int_width-1:0] time_out;
9842 output [data_width-1:0] data_o;
9845 reg [addr_width-1:0] addr;
9846 reg [data_width-1:0] data_i;
9847 reg [data_width-1:0] mask_i;
9851 reg [axi_rsp_width-1:0] rdrsp;
9852 reg [id_bus_width-1:0] rd_id;
9853 reg [axi_size_width-1:0] siz;
9854 reg [axi_brst_type_width-1:0] burst;
9855 reg [axi_lock_width-1:0] lck;
9856 reg [axi_cache_width-1:0] cache;
9857 reg [axi_prot_width-1:0] prot;
9858 reg [data_width-1:0] rcv_data;
9859 integer trnsfr_lngth;
9869 time_int = time_interval;
9874 if(!enable_this_port) begin
9875 $display("[%0d] : %0s : %0s : Port is disabled. 'wait_reg_update
' will not be executed...",$time, DISP_ERR, master_name);
9877 if(STOP_ON_ERROR) $stop;
9889 while(!timed_out & rd_loop) begin
9890 cycle_cnt = cycle_cnt + 1;
9891 if(cycle_cnt >= timeout) timed_out = 1;
9896 while (rd_loop) begin
9898 $display("[%0d] : %0s : %0s : Reading Register mapped at Address(0x%0h) ",$time, master_name, DISP_INFO, addr);
9899 read_burst(addr, trnsfr_lngth, siz, burst, lck, cache, prot, rcv_data, rdrsp);
9901 $display("[%0d] : %0s : %0s : Reading Register returned (0x%0h) ",$time, master_name, DISP_INFO, rcv_data);
9902 if(((rcv_data & ~mask_i) === (data_i & ~mask_i)) | timed_out)
9905 repeat(time_int) @(posedge M_ACLK);
9909 data_o = rcv_data & ~mask_i;
9911 $display("[%0d] : %0s : %0s : 'wait_reg_update
' timed out ... Register is not updated ",$time, DISP_ERR, master_name);
9912 if(STOP_ON_ERROR) $stop;
9919 /* Set verbosity to be used */
9920 task automatic set_verbosity;
9923 if(enable_this_port) begin
9924 mst.set_verbosity(verb);
9927 $display("[%0d] : %0s : %0s : Port is disabled. 'ARQOS' will not be set...",$time, DISP_WARN, master_name);
9946 import axi_vip_pkg::*;
9948 module processing_system7_vip_v1_0_10_afi_slave (
10020 parameter enable_this_port = 0;
10021 parameter slave_name = "Slave";
10022 parameter data_bus_width = 32;
10023 parameter address_bus_width = 32;
10024 parameter id_bus_width = 6;
10025 parameter slave_base_address = 0;
10026 parameter slave_high_address = 4;
10027 parameter max_outstanding_transactions = 8;
10028 parameter exclusive_access_supported = 0;
10029 parameter max_wr_outstanding_transactions = 8;
10030 parameter max_rd_outstanding_transactions = 8;
10032 `include "processing_system7_vip_v1_0_10_local_params.v"
10034 /* Local parameters only for this module */
10035 /* Internal counters that are used as Read/Write pointers to the fifo's that store all the transaction info on all channles.
10036 This parameter is used to define the width of these pointers --> depending on Maximum outstanding transactions supported.
10037 1-bit extra width than the no.of.bits needed to represent the outstanding transactions
10038 Extra bit helps in generating the empty and full flags
10040 parameter int_cntr_width = clogb2(max_outstanding_transactions)+1;
10041 parameter int_wr_cntr_width = clogb2(max_wr_outstanding_transactions+1);
10042 parameter int_rd_cntr_width = clogb2(max_rd_outstanding_transactions+1);
10045 parameter wr_afi_fifo_data_bits = ((data_bus_width/8)*axi_burst_len) + (data_bus_width*axi_burst_len) + axi_qos_width + addr_width + (max_burst_bytes_width+1);
10047 parameter wr_bytes_lsb = 0;
10048 parameter wr_bytes_msb = max_burst_bytes_width;
10049 parameter wr_addr_lsb = wr_bytes_msb + 1;
10050 parameter wr_addr_msb = wr_addr_lsb + addr_width-1;
10051 parameter wr_data_lsb = wr_addr_msb + 1;
10052 parameter wr_data_msb = wr_data_lsb + (data_bus_width*axi_burst_len)-1;
10053 parameter wr_afi_bytes_lsb = 0;
10054 parameter wr_afi_bytes_msb = max_burst_bytes_width;
10055 parameter wr_afi_addr_lsb = wr_afi_bytes_msb + 1;
10056 parameter wr_afi_addr_msb = wr_afi_addr_lsb + addr_width-1;
10057 parameter wr_afi_data_lsb = wr_afi_addr_msb + 1;
10058 parameter wr_afi_data_msb = wr_data_lsb + (data_bus_width*axi_burst_len)-1;
10059 parameter wr_afi_rsp_lsb = axi_rsp_width-1;
10060 parameter wr_afi_rsp_msb = wr_afi_rsp_lsb + axi_rsp_width-1;
10061 parameter wr_afi_id_lsb = wr_afi_rsp_msb + 1;
10062 parameter wr_afi_id_msb = wr_afi_id_lsb + axi_hp_id_width-1;
10063 parameter wr_afi_ln_lsb = wr_afi_id_msb + 1;
10064 parameter wr_afi_ln_msb = wr_afi_ln_lsb + axi_len_width-1;
10065 parameter wr_afi_qos_lsb = wr_afi_ln_msb + 1;
10066 parameter wr_afi_qos_msb = wr_afi_qos_lsb + axi_qos_width-1;
10068 parameter wr_qos_lsb = wr_data_msb + 1;
10069 parameter wr_qos_msb = wr_qos_lsb + axi_qos_width-1;
10070 parameter wr_strb_lsb = wr_qos_msb + 1;
10071 parameter wr_strb_msb = wr_strb_lsb + ((data_bus_width/8)*axi_burst_len)-1;
10074 parameter rsp_fifo_bits = axi_rsp_width+id_bus_width;
10075 parameter rsp_lsb = 0;
10076 parameter rsp_msb = axi_rsp_width-1;
10077 parameter rsp_id_lsb = rsp_msb + 1;
10078 parameter rsp_id_msb = rsp_id_lsb + id_bus_width-1;
10088 output [axi_rsp_width-1:0] S_BRESP;
10089 output [axi_rsp_width-1:0] S_RRESP;
10090 output [data_bus_width-1:0] S_RDATA;
10091 output [id_bus_width-1:0] S_BID;
10092 output [id_bus_width-1:0] S_RID;
10100 input [axi_brst_type_width-1:0] S_ARBURST;
10101 input [axi_lock_width-1:0] S_ARLOCK;
10102 input [axi_size_width-1:0] S_ARSIZE;
10103 input [axi_brst_type_width-1:0] S_AWBURST;
10104 input [axi_lock_width-1:0] S_AWLOCK;
10105 input [axi_size_width-1:0] S_AWSIZE;
10106 input [axi_prot_width-1:0] S_ARPROT;
10107 input [axi_prot_width-1:0] S_AWPROT;
10108 input [address_bus_width-1:0] S_ARADDR;
10109 input [address_bus_width-1:0] S_AWADDR;
10110 input [data_bus_width-1:0] S_WDATA;
10111 input [axi_cache_width-1:0] S_ARCACHE;
10112 input [axi_len_width-1:0] S_ARLEN;
10114 input [axi_qos_width-1:0] S_ARQOS;
10116 input [axi_cache_width-1:0] S_AWCACHE;
10117 input [axi_len_width-1:0] S_AWLEN;
10119 input [axi_qos_width-1:0] S_AWQOS;
10120 input [(data_bus_width/8)-1:0] S_WSTRB;
10121 input [id_bus_width-1:0] S_ARID;
10122 input [id_bus_width-1:0] S_AWID;
10123 input [id_bus_width-1:0] S_WID;
10126 input WR_DATA_ACK_DDR, WR_DATA_ACK_OCM;
10127 output reg WR_DATA_VALID_DDR, WR_DATA_VALID_OCM;
10128 output reg [max_burst_bits-1:0] WR_DATA;
10129 output reg [addr_width-1:0] WR_ADDR;
10130 output reg [max_transfer_bytes_width:0] WR_BYTES;
10131 output reg [((data_bus_width/8)*axi_burst_len)-1:0] WR_DATA_STRB;
10133 output reg RD_REQ_OCM, RD_REQ_DDR;
10134 output reg [addr_width-1:0] RD_ADDR;
10135 input [max_burst_bits-1:0] RD_DATA_DDR,RD_DATA_OCM;
10137 output reg[max_transfer_bytes_width:0] RD_BYTES;
10138 input RD_DATA_VALID_OCM,RD_DATA_VALID_DDR;
10140 output reg [axi_qos_width-1:0] WR_QOS;
10141 output reg [axi_qos_width-1:0] RD_QOS;
10143 input S_RDISSUECAP1_EN;
10144 input S_WRISSUECAP1_EN;
10146 output [7:0] S_RCOUNT;
10147 output [7:0] S_WCOUNT;
10148 output [2:0] S_RACOUNT;
10149 output [5:0] S_WACOUNT;
10154 bit [31:0] static_count;
10156 real s_aclk_period1;
10157 real s_aclk_period2;
10158 real diff_time = 1;
10161 axi_slv_agent #(1,address_bus_width, data_bus_width, data_bus_width, id_bus_width,id_bus_width,0,0,0,0,0,1,1,1,1,0,1,1,1,1,1,1) slv;
10164 .C_AXI_PROTOCOL(1),
10165 .C_AXI_INTERFACE_MODE(2),
10166 .C_AXI_ADDR_WIDTH(address_bus_width),
10167 .C_AXI_WDATA_WIDTH(data_bus_width),
10168 .C_AXI_RDATA_WIDTH(data_bus_width),
10169 .C_AXI_WID_WIDTH(id_bus_width),
10170 .C_AXI_RID_WIDTH(id_bus_width),
10171 .C_AXI_AWUSER_WIDTH(0),
10172 .C_AXI_ARUSER_WIDTH(0),
10173 .C_AXI_WUSER_WIDTH(0),
10174 .C_AXI_RUSER_WIDTH(0),
10175 .C_AXI_BUSER_WIDTH(0),
10176 .C_AXI_SUPPORTS_NARROW(1),
10177 .C_AXI_HAS_BURST(1),
10178 .C_AXI_HAS_LOCK(1),
10179 .C_AXI_HAS_CACHE(1),
10180 .C_AXI_HAS_REGION(0),
10181 .C_AXI_HAS_PROT(1),
10183 .C_AXI_HAS_WSTRB(1),
10184 .C_AXI_HAS_BRESP(1),
10185 .C_AXI_HAS_RRESP(1),
10186 .C_AXI_HAS_ARESETN(1)
10190 .aresetn(S_RESETN),
10191 .s_axi_awid(S_AWID),
10192 .s_axi_awaddr(S_AWADDR),
10193 .s_axi_awlen(S_AWLEN),
10194 .s_axi_awsize(S_AWSIZE),
10195 .s_axi_awburst(S_AWBURST),
10196 .s_axi_awlock(S_AWLOCK),
10197 .s_axi_awcache(S_AWCACHE),
10198 .s_axi_awprot(S_AWPROT),
10199 .s_axi_awregion(4'B0),
10200 .s_axi_awqos(S_AWQOS),
10201 .s_axi_awuser(1
'B0),
10202 .s_axi_awvalid(S_AWVALID),
10203 .s_axi_awready(S_AWREADY),
10205 .s_axi_wdata(S_WDATA),
10206 .s_axi_wstrb(S_WSTRB),
10207 .s_axi_wlast(S_WLAST),
10208 .s_axi_wuser(1'B0),
10209 .s_axi_wvalid(S_WVALID),
10210 .s_axi_wready(S_WREADY),
10212 .s_axi_bresp(S_BRESP),
10214 .s_axi_bvalid(S_BVALID),
10215 .s_axi_bready(S_BREADY),
10216 .s_axi_arid(S_ARID),
10217 .s_axi_araddr(S_ARADDR),
10218 .s_axi_arlen(S_ARLEN),
10219 .s_axi_arsize(S_ARSIZE),
10220 .s_axi_arburst(S_ARBURST),
10221 .s_axi_arlock(S_ARLOCK),
10222 .s_axi_arcache(S_ARCACHE),
10223 .s_axi_arprot(S_ARPROT),
10224 .s_axi_arregion(4
'B0),
10225 .s_axi_arqos(S_ARQOS),
10226 .s_axi_aruser(1'B0),
10227 .s_axi_arvalid(S_ARVALID),
10228 .s_axi_arready(S_ARREADY),
10230 .s_axi_rdata(S_RDATA),
10231 .s_axi_rresp(S_RRESP),
10232 .s_axi_rlast(S_RLAST),
10234 .s_axi_rvalid(S_RVALID),
10235 .s_axi_rready(S_RREADY),
10248 .m_axi_awready(1
'b0),
10255 .m_axi_wready(1'b0),
10256 .m_axi_bid(12
'h000),
10257 .m_axi_bresp(2'b00),
10258 .m_axi_buser(1
'B0),
10259 .m_axi_bvalid(1'b0),
10273 .m_axi_arready(1
'b0),
10274 .m_axi_rid(12'h000),
10275 .m_axi_rdata(32
'h00000000),
10276 .m_axi_rresp(2'b00),
10277 .m_axi_rlast(1
'b0),
10278 .m_axi_ruser(1'B0),
10279 .m_axi_rvalid(1
'b0),
10283 xil_axi_cmd_beat twc, trc;
10284 xil_axi_write_beat twd;
10285 xil_axi_read_beat trd;
10286 axi_transaction twr, trr,trr_get_rd;
10287 axi_transaction trr_rd[$];
10288 axi_ready_gen awready_gen;
10289 axi_ready_gen wready_gen;
10290 axi_ready_gen arready_gen;
10291 integer i,j,k,add_val,size_local,burst_local,len_local,num_bytes;
10293 bit [15:0] a_16_bits,a_new,a_wrap,a_wrt_val,a_cnt;
10296 slv = new("slv",slave.IF);
10299 trr_get_rd = new("trr_get_rd");
10300 wready_gen = slv.wr_driver.create_ready("wready");
10301 slv.monitor.axi_wr_cmd_port.set_enabled();
10302 slv.monitor.axi_wr_beat_port.set_enabled();
10303 slv.monitor.axi_rd_cmd_port.set_enabled();
10304 // slv.wr_driver.set_transaction_depth(max_outstanding_transactions);
10305 // slv.rd_driver.set_transaction_depth(max_outstanding_transactions);
10306 slv.wr_driver.set_transaction_depth(max_wr_outstanding_transactions);
10307 slv.rd_driver.set_transaction_depth(max_rd_outstanding_transactions);
10312 slave.IF.set_enable_xchecks_to_warn();
10313 repeat(10) @(posedge S_ACLK);
10314 slave.IF.set_enable_xchecks();
10317 wire wr_intr_fifo_full;
10318 reg temp_wr_intr_fifo_full;
10320 /* Interconnect WR_FIFO model instance */
10321 // processing_system7_vip_v1_0_10_intr_wr_mem wr_intr_fifo(SW_CLK, S_RESETN, wr_intr_fifo_full, WR_DATA_ACK_OCM, WR_DATA_ACK_DDR, WR_ADDR, WR_DATA, WR_BYTES, WR_QOS, WR_DATA_VALID_OCM, WR_DATA_VALID_DDR);
10323 /* Register the async 'full
' signal to S_ACLK clock */
10324 always@(posedge S_ACLK) temp_wr_intr_fifo_full = wr_intr_fifo_full;
10326 /* Latency type and Debug/Error Control */
10327 reg[1:0] latency_type = RANDOM_CASE;
10328 reg DEBUG_INFO = 1;
10329 reg STOP_ON_ERROR = 1'b1;
10332 reg [wr_afi_fifo_data_bits-1:0] wr_fifo [0:max_wr_outstanding_transactions-1];
10333 reg [int_wr_cntr_width-1:0] wr_fifo_wr_ptr = 0, wr_fifo_rd_ptr = 0;
10334 wire wr_fifo_empty;
10337 reg [7:0] aw_time_cnt = 0,bresp_time_cnt = 0;
10338 real awvalid_receive_time[0:max_wr_outstanding_transactions];
10339 reg awvalid_flag[0:max_wr_outstanding_transactions];
10342 reg[int_wr_cntr_width-1:0] aw_cnt = 0;
10345 reg [axi_size_width-1:0] awsize [0:max_wr_outstanding_transactions-1];
10346 reg [axi_prot_width-1:0] awprot [0:max_wr_outstanding_transactions-1];
10347 reg [axi_lock_width-1:0] awlock [0:max_wr_outstanding_transactions-1];
10348 reg [axi_cache_width-1:0] awcache [0:max_wr_outstanding_transactions-1];
10349 reg [axi_brst_type_width-1:0] awbrst [0:max_wr_outstanding_transactions-1];
10350 reg [axi_len_width-1:0] awlen [0:max_wr_outstanding_transactions-1];
10351 reg aw_flag [0:max_wr_outstanding_transactions-1];
10352 reg [addr_width-1:0] awaddr [0:max_wr_outstanding_transactions-1];
10353 reg [addr_width-1:0] addr_wr_local;
10354 reg [addr_width-1:0] addr_wr_final;
10355 reg [id_bus_width-1:0] awid [0:max_wr_outstanding_transactions-1];
10356 reg [axi_qos_width-1:0] awqos [0:max_wr_outstanding_transactions-1];
10360 reg [(data_bus_width*axi_burst_len)-1:0] burst_data [0:max_wr_outstanding_transactions-1];
10361 reg [((data_bus_width/8)*axi_burst_len)-1:0] burst_strb [0:max_wr_outstanding_transactions-1];
10362 reg [max_burst_bytes_width:0] burst_valid_bytes [0:max_wr_outstanding_transactions-1];
10363 reg [max_burst_bytes_width:0] valid_bytes = 0;
10364 reg wlast_flag [0:max_wr_outstanding_transactions-1];
10368 reg [int_wr_cntr_width-1:0] wd_cnt = 0;
10369 reg [(data_bus_width*axi_burst_len)-1:0] aligned_wr_data;
10370 reg [((data_bus_width/8)*axi_burst_len)-1:0] aligned_wr_strb;
10371 reg [addr_width-1:0] aligned_wr_addr;
10372 reg [max_burst_bytes_width:0] valid_data_bytes;
10373 reg [int_wr_cntr_width-1:0] wr_bresp_cnt = 0;
10374 reg [axi_rsp_width-1:0] bresp;
10375 reg [rsp_fifo_bits-1:0] fifo_bresp [0:max_wr_outstanding_transactions-1];
10376 reg enable_write_bresp;
10377 reg [int_wr_cntr_width-1:0] rd_bresp_cnt = 0;
10378 integer wr_latency_count;
10380 wire bresp_fifo_empty;
10387 parameter SEND_DATA = 0, WAIT_ACK = 1;
10391 reg [axi_qos_width-1:0] ar_qos=0, aw_qos=0;
10394 if(DEBUG_INFO) begin
10395 if(enable_this_port)
10396 $display(
"[%0d] : %0s : %0s : Port is ENABLED.",$time, DISP_INFO, slave_name);
10398 $display(
"[%0d] : %0s : %0s : Port is DISABLED.",$time, DISP_INFO, slave_name);
10418 repeat(2) @(posedge S_ACLK);
10419 if(!enable_this_port) begin
10428 task set_latency_type;
10431 if(enable_this_port)
10432 latency_type = lat;
10435 $display(
"[%0d] : %0s : %0s : Port is disabled. 'Latency Profile' will not be set...",$time, DISP_WARN, slave_name);
10442 task automatic set_verbosity;
10445 if(enable_this_port) begin
10446 slv.set_verbosity(verb);
10449 $display(
"[%0d] : %0s : %0s : Port is disabled. set_verbosity will not be set...",$time, DISP_WARN, slave_name);
10459 task automatic set_arqos;
10460 input[axi_qos_width-1:0] qos;
10462 if(enable_this_port) begin
10466 $display(
"[%0d] : %0s : %0s : Port is disabled. 'ARQOS' will not be set...",$time, DISP_WARN, slave_name);
10474 input[axi_qos_width-1:0] qos;
10476 if(enable_this_port)
10480 $display(
"[%0d] : %0s : %0s : Port is disabled. 'AWQOS' will not be set...",$time, DISP_WARN, slave_name);
10487 function [31:0] get_wr_lat_number;
10492 BEST_CASE : get_wr_lat_number = afi_wr_min;
10493 AVG_CASE : get_wr_lat_number = afi_wr_avg;
10494 WORST_CASE : get_wr_lat_number = afi_wr_max;
10498 2
'b00 : get_wr_lat_number = ($random()%10+ afi_wr_min);
10499 2'b01 : get_wr_lat_number = ($random()%40+ afi_wr_avg);
10500 default : get_wr_lat_number = ($random()%60+ afi_wr_max);
10509 function [31:0] get_rd_lat_number;
10514 BEST_CASE : get_rd_lat_number = afi_rd_min;
10515 AVG_CASE : get_rd_lat_number = afi_rd_avg;
10516 WORST_CASE : get_rd_lat_number = afi_rd_max;
10520 2
'b00 : get_rd_lat_number = ($random()%10+ afi_rd_min);
10521 2'b01 : get_rd_lat_number = ($random()%40+ afi_rd_avg);
10522 default : get_rd_lat_number = ($random()%60+ afi_rd_max);
10536 s_aclk_period1 = $realtime;
10538 s_aclk_period2 = $realtime;
10539 diff_time = s_aclk_period2 - s_aclk_period1;
10546 always@(S_AWVALID or S_WVALID or S_ARVALID)
10548 if((S_AWVALID | S_WVALID | S_ARVALID) && !enable_this_port) begin
10549 $display(
"[%0d] : %0s : %0s : Port is disabled. AXI transaction is initiated on this port ...\nSimulation will halt ..",$time, DISP_ERR, slave_name);
10557 assign net_ARVALID = enable_this_port ? S_ARVALID : 1
'b0;
10558 assign net_AWVALID = enable_this_port ? S_AWVALID : 1'b0;
10559 assign net_WVALID = enable_this_port ? S_WVALID : 1
'b0;
10561 assign wr_fifo_empty = (wr_fifo_wr_ptr === wr_fifo_rd_ptr)?1'b1: 1
'b0;
10562 assign aw_fifo_full = ((aw_cnt[int_wr_cntr_width-1] !== rd_bresp_cnt[int_wr_cntr_width-1]) && (aw_cnt[int_wr_cntr_width-2:0] === rd_bresp_cnt[int_wr_cntr_width-2:0]))?1'b1 :1
'b0; /// complete this
10563 assign wd_fifo_full = ((wd_cnt[int_wr_cntr_width-1] !== rd_bresp_cnt[int_wr_cntr_width-1]) && (wd_cnt[int_wr_cntr_width-2:0] === rd_bresp_cnt[int_wr_cntr_width-2:0]))?1'b1 :1
'b0; /// complete this
10564 assign bresp_fifo_empty = (wr_bresp_cnt === rd_bresp_cnt)?1'b1:1
'b0;
10565 assign bresp_fifo_full = ((wr_bresp_cnt[int_wr_cntr_width-1] !== rd_bresp_cnt[int_wr_cntr_width-1]) && (wr_bresp_cnt[int_wr_cntr_width-2:0] === rd_bresp_cnt[int_wr_cntr_width-2:0]))?1'b1:1
'b0;
10567 assign S_WCOUNT = wcount;
10568 assign S_WACOUNT = wacount;
10570 // FIFO_STATUS (only if AFI port) 1- full
10571 function automatic wrfifo_full ;
10572 input [axi_len_width:0] fifo_space_exp;
10573 integer fifo_space_left;
10575 fifo_space_left = afi_fifo_locations - wcount;
10576 if(fifo_space_left < fifo_space_exp)
10582 /*--------------------------------------------------------------------------------*/
10584 /* Store the awvalid receive time --- necessary for calculating the bresp latency */
10586 always@(negedge S_RESETN or posedge S_ACLK)
10591 if(net_AWVALID && S_AWREADY) begin
10592 awvalid_receive_time[aw_time_cnt] = $realtime;
10593 awvalid_flag[aw_time_cnt] = 1'b1;
10594 aw_time_cnt = aw_time_cnt + 1;
10595 if(aw_time_cnt === max_wr_outstanding_transactions) aw_time_cnt = 0;
10613 always@(posedge S_ACLK)
10615 if(net_AWVALID && S_AWREADY) begin
10616 if(S_AWQOS === 0) begin awqos[aw_cnt[int_wr_cntr_width-2:0]] = aw_qos;
10617 if(DEBUG_INFO) $display(
" afi_slave aw_qos %0h aw_cnt[int_wr_cntr_width-2:0] %0d int_wr_cntr_width %0d",aw_qos,aw_cnt[int_wr_cntr_width-2:0],int_wr_cntr_width);
10618 end
else awqos[aw_cnt[int_wr_cntr_width-2:0]] = S_AWQOS;
10623 always@(aw_fifo_full)
10625 if(aw_fifo_full && DEBUG_INFO)
10626 $display(
"[%0d] : %0s : %0s : Reached the maximum outstanding Write transactions limit (%0d). Blocking all future Write transactions until at least 1 of the outstanding Write transaction has completed.",$time, DISP_INFO, slave_name,max_wr_outstanding_transactions);
10630 always@(negedge S_RESETN or posedge S_ACLK)
10632 if(!S_RESETN) begin
10635 if(!aw_fifo_full) begin
10636 slv.monitor.axi_wr_cmd_port.get(twc);
10638 awlen[aw_cnt[int_wr_cntr_width-2:0]] = twc.len;
10639 awsize[aw_cnt[int_wr_cntr_width-2:0]] = twc.size;
10640 awbrst[aw_cnt[int_wr_cntr_width-2:0]] = twc.burst;
10641 awlock[aw_cnt[int_wr_cntr_width-2:0]] = twc.lock;
10642 awcache[aw_cnt[int_wr_cntr_width-2:0]]= twc.cache;
10643 awprot[aw_cnt[int_wr_cntr_width-2:0]] = twc.prot;
10644 awid[aw_cnt[int_wr_cntr_width-2:0]] = twc.id;
10645 aw_flag[aw_cnt[int_wr_cntr_width-2:0]] = 1;
10647 size_local = twc.size;
10648 burst_local = twc.burst;
10649 len_local = twc.len;
10650 if(burst_local == AXI_INCR || burst_local == AXI_FIXED) begin
10651 if(data_bus_width ===
'd128) begin
10652 if(size_local === 'd0) a = {twc.addr[3:0]};
10653 if(size_local ===
'd1) a = {twc.addr[3:1],1'b0};
10654 if(size_local ===
'd2) a = {twc.addr[3:2],2'b0};
10655 if(size_local ===
'd3) a = {twc.addr[3],3'b0};
10656 if(size_local ===
'd4) a = 'b0;
10657 end
else if(data_bus_width ===
'd64 ) begin
10658 if(size_local === 'd0) a = {twc.addr[2:0]};
10659 if(size_local ===
'd1) a = {twc.addr[2:1],1'b0};
10660 if(size_local ===
'd2) a = {twc.addr[2],2'b0};
10661 if(size_local ===
'd3) a = 'b0;
10662 end
else if(data_bus_width ===
'd32 ) begin
10663 if(size_local === 'd0) a = {twc.addr[1:0]};
10664 if(size_local ===
'd1) a = {twc.addr[1],1'b0};
10665 if(size_local ===
'd2) a = 'b0;
10667 end
if(burst_local == AXI_WRAP) begin
10668 if(data_bus_width ===
'd128) begin
10669 if(size_local === 'd0) a = {twc.addr[3:0]};
10670 if(size_local ===
'd1) a = {twc.addr[3:1],1'b0};
10671 if(size_local ===
'd2) a = {twc.addr[3:2],2'b0};
10672 if(size_local ===
'd3) a = {twc.addr[3],3'b0};
10673 if(size_local ===
'd4) a = 'b0;
10674 end
else if(data_bus_width ===
'd64 ) begin
10675 if(size_local === 'd0) a = {twc.addr[2:0]};
10676 if(size_local ===
'd1) a = {twc.addr[2:1],1'b0};
10677 if(size_local ===
'd2) a = {twc.addr[2],2'b0};
10678 if(size_local ===
'd3) a = 'b0;
10679 end
else if(data_bus_width ===
'd32 ) begin
10680 if(size_local === 'd0) a = {twc.addr[1:0]};
10681 if(size_local ===
'd1) a = {twc.addr[1],1'b0};
10682 if(size_local ===
'd2) a = 'b0;
10685 a_16_bits = twc.addr[7:0];
10686 num_bytes = ((len_local+1)*(2**size_local));
10689 addr_wr_local = twc.addr;
10690 if(burst_local == AXI_INCR || burst_local == AXI_FIXED) begin
10692 0 : addr_wr_final = {addr_wr_local};
10693 1 : addr_wr_final = {addr_wr_local[31:1],1
'b0};
10694 2 : addr_wr_final = {addr_wr_local[31:2],2'b0};
10695 3 : addr_wr_final = {addr_wr_local[31:3],3
'b0};
10696 4 : addr_wr_final = {addr_wr_local[31:4],4'b0};
10697 5 : addr_wr_final = {addr_wr_local[31:5],5
'b0};
10698 6 : addr_wr_final = {addr_wr_local[31:6],6'b0};
10699 7 : addr_wr_final = {addr_wr_local[31:7],7
'b0};
10701 awaddr[aw_cnt[int_wr_cntr_width-2:0]] = addr_wr_final;
10702 // $display("addr_wr_final %0h",addr_wr_final);
10703 end if(burst_local == AXI_WRAP) begin
10704 awaddr[aw_cnt[int_wr_cntr_width-2:0]] = twc.addr;
10705 // $display(" awaddr[aw_cnt[int_wr_cntr_width-2:0]] %0h",awaddr[aw_cnt[int_wr_cntr_width-2:0]]);
10707 aw_cnt = aw_cnt + 1;
10708 //== $display($time,"awcnt isssss %0d",aw_cnt);
10709 // if(data_bus_width === 'd32) a = 0;
10713 if(aw_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
10714 aw_cnt[int_wr_cntr_width-1] = ~aw_cnt[int_wr_cntr_width-1];
10715 aw_cnt[int_wr_cntr_width-2:0] = 0;
10716 if(DEBUG_INFO) $display($time,
" In if condition of AFI slave ");
10749 always@(negedge S_RESETN or posedge S_ACLK)
10751 if(!S_RESETN) begin
10754 if(!wd_fifo_full && S_WVALID) begin
10755 slv.monitor.axi_wr_beat_port.get(twd);
10756 wait((aw_flag[wd_cnt[int_wr_cntr_width-2:0]] ===
'b1));
10768 // $display(" size_local %0d add_val %0d wd_cnt %0d",size_local,add_val,wd_cnt);
10769 // $display(" data depth : %0d size %0d srrb %0d last %0d burst %0d ",2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]],twd.get_data_size(),twd.get_strb_size(),twd.last,twc.burst);
10770 //$display(" a value is %0d ",a);
10772 for(i = 0; i < (2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]]); i = i+1) begin
10773 burst_data[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes*8)+(i*8))+:8] = twd.data[i+a];
10774 //$display("data burst %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h twd.data %0h i %0d a %0d full data %0h",burst_data[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes*8)+(i*8))+:8],twd.data[i],twd.data[i+1],twd.data[i+2],twd.data[i+3],twd.data[i+4],twd.data[i+5],twd.data[i+a],i,a,twd.data[i+a]);
10775 //$display(" wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes*8)+(i*8) %0d wd_cnt %0d valid_bytes %0d int_wr_cntr_width %0d", wd_cnt[int_wr_cntr_width-2:0],wd_cnt,valid_bytes,int_wr_cntr_width);
10776 burst_strb[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes)+(i*1))+:1] = twd.strb[i+a];
10777 //$display("burst_strb %0h twd_strb %0h int_wr_cntr_width %0d valid_bytes %0d wd_cnt[int_wr_cntr_width-2:0] %0d twd.strb[i+a] %0b full strb %0h",burst_strb[wd_cnt[int_wr_cntr_width-2:0]][((valid_bytes)+(i*1))+:1],twd.strb[i],int_wr_cntr_width,valid_bytes,wd_cnt[int_wr_cntr_width-2:0],twd.strb[i+a],twd.strb[i+a]);
10778 //$display("burst_strb %0h twd.strb[i+1] %0h twd.strb[i+2] %0h twd.strb[i+3] %0h twd.strb[i+4] %0h twd.strb[i+5] %0h twd.strb[i+6] %0h twd.strb[i+7] %0h",twd.strb[i],twd.strb[i+1],twd.strb[i+1],twd.strb[i+2],twd.strb[i+3],twd.strb[i+4],twd.strb[i+5],twd.strb[i+6],twd.strb[i+7]);
10780 if(i == ((2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]])-1) ) begin
10781 if(burst_local == AXI_FIXED) begin
10783 end else if(burst_local == AXI_INCR) begin
10785 end else if(burst_local == AXI_WRAP) begin
10786 a_new = (a_16_bits/num_bytes)*num_bytes;
10787 a_wrap = a_new + (num_bytes);
10790 a_16_bits = a_16_bits+add_val;
10791 a_wrt_val = a_16_bits;
10792 //$display(" new a value for wrap a %0h add_val %0d a_wrap %0h a_wrt_val %0h a_new %0h num_bytes %0h a_cnt %0d ",a,add_val,a_wrap[3:0],a_wrt_val,a_new,num_bytes,a_cnt);
10793 if(a_wrt_val[15:0] >= a_wrap[15:0]) begin
10794 if(data_bus_width === 'd128)
10796 else if(data_bus_width ===
'd64)
10798 else if(data_bus_width === 'd32)
10809 if(burst_local == AXI_INCR) begin
10810 if( a >= (data_bus_width/8) || (burst_local == 0 ) || (twd.last) ) begin
10815 end
else if (burst_local == AXI_WRAP) begin
10816 if( ((a >= (data_bus_width/8)) ) || (burst_local == 0 ) || (twd.last) ) begin
10822 valid_bytes = valid_bytes+(2**awsize[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
10825 if (twd.last ===
'b1) begin
10826 wlast_flag[wd_cnt[int_wr_cntr_width-2:0]] = 1'b1;
10827 burst_valid_bytes[wd_cnt[int_wr_cntr_width-2:0]] = valid_bytes;
10829 wd_cnt = wd_cnt + 1;
10833 if(wd_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
10834 wd_cnt[int_wr_cntr_width-1] = ~wd_cnt[int_wr_cntr_width-1];
10835 wd_cnt[int_wr_cntr_width-2:0] = 0;
10845 task automatic get_wrap_aligned_wr_data;
10846 output [(data_bus_width*axi_burst_len)-1:0] aligned_data;
10847 output [addr_width-1:0] start_addr;
10848 input [addr_width-1:0] addr;
10849 input [(data_bus_width*axi_burst_len)-1:0] b_data;
10850 input [max_burst_bytes_width:0] v_bytes;
10851 reg [(data_bus_width*axi_burst_len)-1:0] temp_data, wrp_data;
10855 start_addr = (addr/v_bytes) * v_bytes;
10856 wrp_bytes = addr - start_addr;
10859 wrp_data = wrp_data << ((data_bus_width*axi_burst_len) - (v_bytes*8));
10860 while(wrp_bytes > 0) begin
10861 temp_data = temp_data << 8;
10862 temp_data[7:0] = wrp_data[(data_bus_width*axi_burst_len)-1 : (data_bus_width*axi_burst_len)-8];
10863 wrp_data = wrp_data << 8;
10864 wrp_bytes = wrp_bytes - 1;
10866 wrp_bytes = addr - start_addr;
10867 wrp_data = b_data << (wrp_bytes*8);
10869 aligned_data = (temp_data | wrp_data);
10875 task automatic get_wrap_aligned_wr_strb;
10876 output [((data_bus_width/8)*axi_burst_len)-1:0] aligned_strb;
10877 output [addr_width-1:0] start_addr;
10878 input [addr_width-1:0] addr;
10879 input [((data_bus_width/8)*axi_burst_len)-1:0] b_strb;
10880 input [max_burst_bytes_width:0] v_bytes;
10881 reg [((data_bus_width/8)*axi_burst_len)-1:0] temp_strb, wrp_strb;
10886 start_addr = (addr/v_bytes) * v_bytes;
10888 wrp_bytes = addr - start_addr;
10894 wrp_strb = wrp_strb << (((data_bus_width/8)*axi_burst_len) - (v_bytes));
10896 while(wrp_bytes > 0) begin
10897 temp_strb = temp_strb << 1;
10898 temp_strb[0] = wrp_strb[((data_bus_width/8)*axi_burst_len) : ((data_bus_width/8)*axi_burst_len)-1];
10899 wrp_strb = wrp_strb << 1;
10900 wrp_bytes = wrp_bytes - 1;
10903 wrp_bytes = addr - start_addr;
10904 wrp_strb = b_strb << (wrp_bytes);
10906 aligned_strb = (temp_strb | wrp_strb);
10912 function [axi_rsp_width-1:0] calculate_resp;
10914 input [addr_width-1:0] awaddr;
10915 input [axi_prot_width-1:0] awprot;
10916 reg [axi_rsp_width-1:0] rsp;
10920 if(decode_address(awaddr) === INVALID_MEM_TYPE) begin
10922 $display(
"[%0d] : %0s : %0s : AXI Access to Invalid location(0x%0h) awaddr %0h",$time, DISP_ERR, slave_name, awaddr,awaddr);
10924 if(!rd_wr && decode_address(awaddr) === REG_MEM) begin
10926 $display(
"[%0d] : %0s : %0s : AXI Write to Register Map(0x%0h) is not supported ",$time, DISP_ERR, slave_name, awaddr);
10928 if(secure_access_enabled && awprot[1])
10930 calculate_resp = rsp;
10958 reg[max_burst_bits-1:0] temp_wr_data;
10961 always@(negedge S_RESETN or posedge S_ACLK)
10963 if(!S_RESETN) begin
10965 wr_fifo_wr_ptr = 0;
10967 if((wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] ===
'b1) && (aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] === 'b1)) begin
10970 enable_write_bresp =
'b1;
10971 // $display("%t enable_write_bresp %0d wr_bresp_cnt %0d",$time ,enable_write_bresp,wr_bresp_cnt[int_wr_cntr_width-2:0]);
10973 // enable_write_bresp = aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] && wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]];
10974 /* calculate bresp only when AWVALID && WLAST is received */
10975 if(enable_write_bresp) begin
10976 aw_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] = 0;
10977 wlast_flag[wr_bresp_cnt[int_wr_cntr_width-2:0]] = 0;
10978 // $display("awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]] %0h ",awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
10979 bresp = calculate_resp(1'b0, awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]],awprot[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
10980 fifo_bresp[wr_bresp_cnt[int_wr_cntr_width-2:0]] = {awid[wr_bresp_cnt[int_wr_cntr_width-2:0]],bresp};
10982 if(bresp === AXI_OK) begin
10983 if(awbrst[wr_bresp_cnt[int_wr_cntr_width-2:0]] === AXI_WRAP) begin
10984 get_wrap_aligned_wr_data(aligned_wr_data,aligned_wr_addr, awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_data[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
10985 get_wrap_aligned_wr_strb(aligned_wr_strb,aligned_wr_addr, awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_strb[wr_bresp_cnt[int_wr_cntr_width-2:0]],burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-2:0]]);
10987 aligned_wr_data = burst_data[wr_bresp_cnt[int_wr_cntr_width-2:0]];
10988 aligned_wr_addr = awaddr[wr_bresp_cnt[int_wr_cntr_width-2:0]] ;
10989 aligned_wr_strb = burst_strb[wr_bresp_cnt[int_wr_cntr_width-2:0]];
10993 valid_data_bytes = burst_valid_bytes[wr_bresp_cnt[int_wr_cntr_width-2:0]];
10996 valid_data_bytes = 0;
10998 if(awbrst[wr_bresp_cnt[int_wr_cntr_width-2:0]] != AXI_WRAP) begin
11000 wr_fifo[wr_fifo_wr_ptr[int_wr_cntr_width-2:0]] = {aligned_wr_strb,awqos[wr_bresp_cnt[int_wr_cntr_width-2:0]], aligned_wr_data, aligned_wr_addr, valid_data_bytes};
11003 wr_fifo[wr_fifo_wr_ptr[int_wr_cntr_width-2:0]] = {aligned_wr_strb,awqos[wr_bresp_cnt[int_wr_cntr_width-2:0]], aligned_wr_data, aligned_wr_addr, valid_data_bytes};
11006 wr_fifo_wr_ptr = wr_fifo_wr_ptr + 1;
11007 wr_bresp_cnt = wr_bresp_cnt+1;
11008 enable_write_bresp =
'b0;
11009 if(wr_bresp_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
11010 wr_bresp_cnt[int_wr_cntr_width-1] = ~ wr_bresp_cnt[int_wr_cntr_width-1];
11011 wr_bresp_cnt[int_wr_cntr_width-2:0] = 0;
11016 /*--------------------------------------------------------------------------------*/
11019 // /* Store the Write response for each write transaction */
11020 // always@(negedge S_RESETN or posedge S_ACLK)
11022 // if(!S_RESETN) begin
11023 // wr_fifo_wr_ptr = 0;
11026 // enable_write_bresp = aw_flag[wr_fifo_wr_ptr[int_cntr_width-2:0]] && wlast_flag[wr_fifo_wr_ptr[int_cntr_width-2:0]];
11027 // /* calculate bresp only when AWVALID && WLAST is received */
11028 // if(enable_write_bresp) begin
11029 // aw_flag[wr_fifo_wr_ptr[int_cntr_width-2:0]] = 0;
11030 // wlast_flag[wr_fifo_wr_ptr[int_cntr_width-2:0]] = 0;
11032 // bresp = calculate_resp(awaddr[wr_fifo_wr_ptr[int_cntr_width-2:0]], awprot[wr_fifo_wr_ptr[int_cntr_width-2:0]]);
11033 // /* Fill AFI_WR_data FIFO */
11034 // if(bresp === AXI_OK ) begin
11035 // if(awbrst[wr_fifo_wr_ptr[int_cntr_width-2:0]]=== AXI_WRAP) begin /// wrap type? then align the data
11036 // get_wrap_aligned_wr_data(aligned_wr_data, aligned_wr_addr, awaddr[wr_fifo_wr_ptr[int_cntr_width-2:0]], burst_data[wr_fifo_wr_ptr[int_cntr_width-2:0]],burst_valid_bytes[wr_fifo_wr_ptr[int_cntr_width-2:0]]); /// gives wrapped start address
11038 // aligned_wr_data = burst_data[wr_fifo_wr_ptr[int_cntr_width-2:0]];
11039 // aligned_wr_addr = awaddr[wr_fifo_wr_ptr[int_cntr_width-2:0]] ;
11041 // valid_data_bytes = burst_valid_bytes[wr_fifo_wr_ptr[int_cntr_width-2:0]];
11043 // valid_data_bytes = 0;
11044 // temp_wr_data = aligned_wr_data;
11045 // wr_fifo[wr_fifo_wr_ptr[int_cntr_width-2:0]] = {awqos[wr_fifo_wr_ptr[int_cntr_width-2:0]], awlen[wr_fifo_wr_ptr[int_cntr_width-2:0]], awid[wr_fifo_wr_ptr[int_cntr_width-2:0]], bresp, temp_wr_data, aligned_wr_addr, valid_data_bytes};
11046 // wcount = wcount + awlen[wr_fifo_wr_ptr[int_cntr_width-2:0]]+1;
11047 // wr_fifo_wr_ptr = wr_fifo_wr_ptr + 1;
11051 /*--------------------------------------------------------------------------------*/
11053 /* Send Write Response Channel handshake */
11054 always@(negedge S_RESETN or posedge S_ACLK)
11056 if(!S_RESETN) begin
11058 wr_latency_count = get_wr_lat_number(1);
11060 bresp_time_cnt = 0;
11062 // if(static_count < 32 ) begin
11063 // wready_gen.set_ready_policy(XIL_AXI_READY_GEN_SINGLE);
11064 //wready_gen.set_low_time(0);
11065 //wready_gen.set_high_time(1);
11066 // slv.wr_driver.send_wready(wready_gen);
11068 if(awvalid_flag[bresp_time_cnt] && (($realtime - awvalid_receive_time[bresp_time_cnt])/diff_time >= wr_latency_count))
11070 if(!bresp_fifo_empty && wr_delayed) begin
11071 slv.wr_driver.get_wr_reactive(twr);
11072 twr.set_id(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-2:0]][rsp_id_msb : rsp_id_lsb]);
11073 case(fifo_bresp[rd_bresp_cnt[int_wr_cntr_width-2:0]][rsp_msb : rsp_lsb])
11074 2'b00: twr.set_bresp(XIL_AXI_RESP_OKAY);
11075 2
'b01: twr.set_bresp(XIL_AXI_RESP_EXOKAY);
11076 2'b10: twr.set_bresp(XIL_AXI_RESP_SLVERR);
11077 2
'b11: twr.set_bresp(XIL_AXI_RESP_DECERR);
11079 // if(static_count > 32 ) begin
11080 // // wready_gen.set_ready_policy(XIL_AXI_READY_GEN_SINGLE);
11081 // wready_gen.set_ready_policy(XIL_AXI_READY_GEN_NO_BACKPRESSURE);
11082 // // wready_gen.set_low_time(3);
11083 // // wready_gen.set_high_time(3);
11084 // // wready_gen.set_low_time_range(3,6);
11085 // // wready_gen.set_high_time_range(3,6);
11086 // slv.wr_driver.send_wready(wready_gen);
11088 wready_gen.set_ready_policy(XIL_AXI_READY_GEN_NO_BACKPRESSURE);
11089 slv.wr_driver.send_wready(wready_gen);
11090 slv.wr_driver.send(twr);
11092 awvalid_flag[bresp_time_cnt] = 1'b0;
11093 bresp_time_cnt = bresp_time_cnt+1;
11094 rd_bresp_cnt = rd_bresp_cnt + 1;
11095 if(rd_bresp_cnt[int_wr_cntr_width-2:0] === (max_wr_outstanding_transactions-1)) begin
11096 rd_bresp_cnt[int_wr_cntr_width-1] = ~ rd_bresp_cnt[int_wr_cntr_width-1];
11097 rd_bresp_cnt[int_wr_cntr_width-2:0] = 0;
11099 if(bresp_time_cnt === max_wr_outstanding_transactions) begin
11100 bresp_time_cnt = 0;
11102 wr_latency_count = get_wr_lat_number(1);
11144 always@(negedge S_RESETN or posedge SW_CLK) begin
11145 if(!S_RESETN) begin
11146 WR_DATA_VALID_DDR = 1
'b0;
11147 WR_DATA_VALID_OCM = 1'b0;
11149 wr_fifo_rd_ptr = 0;
11156 WR_DATA_VALID_OCM = 0;
11157 WR_DATA_VALID_DDR = 0;
11158 if(!wr_fifo_empty) begin
11159 WR_DATA = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_data_msb : wr_data_lsb];
11160 WR_ADDR = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_addr_msb : wr_addr_lsb];
11161 WR_BYTES = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_bytes_msb : wr_bytes_lsb];
11162 WR_QOS = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_qos_msb : wr_qos_lsb];
11163 WR_DATA_STRB = wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_strb_msb : wr_strb_lsb];
11166 case (decode_address(wr_fifo[wr_fifo_rd_ptr[int_wr_cntr_width-2:0]][wr_addr_msb : wr_addr_lsb]))
11167 OCM_MEM : WR_DATA_VALID_OCM = 1;
11168 DDR_MEM : WR_DATA_VALID_DDR = 1;
11169 default : state = SEND_DATA;
11171 wr_fifo_rd_ptr = wr_fifo_rd_ptr+1;
11176 if(WR_DATA_ACK_OCM | WR_DATA_ACK_DDR) begin
11177 WR_DATA_VALID_OCM = 1
'b0;
11178 WR_DATA_VALID_DDR = 1'b0;
11222 reg [7:0] ar_time_cnt = 0,rresp_time_cnt = 0;
11223 real arvalid_receive_time[0:max_rd_outstanding_transactions];
11224 reg arvalid_flag[0:max_rd_outstanding_transactions];
11225 reg [int_rd_cntr_width-1:0] ar_cnt = 0;
11228 reg [axi_size_width-1:0] arsize [0:max_rd_outstanding_transactions-1];
11229 reg [axi_prot_width-1:0] arprot [0:max_rd_outstanding_transactions-1];
11230 reg [axi_brst_type_width-1:0] arbrst [0:max_rd_outstanding_transactions-1];
11231 reg [axi_len_width-1:0] arlen [0:max_rd_outstanding_transactions-1];
11232 reg [axi_cache_width-1:0] arcache [0:max_rd_outstanding_transactions-1];
11233 reg [axi_lock_width-1:0] arlock [0:max_rd_outstanding_transactions-1];
11234 reg ar_flag [0:max_rd_outstanding_transactions-1];
11235 reg [addr_width-1:0] araddr [0:max_rd_outstanding_transactions-1];
11236 reg [addr_width-1:0] addr_local;
11237 reg [addr_width-1:0] addr_final;
11238 reg [id_bus_width-1:0] arid [0:max_rd_outstanding_transactions-1];
11239 reg [axi_qos_width-1:0] arqos [0:max_rd_outstanding_transactions-1];
11242 reg [int_rd_cntr_width-1:0] rd_cnt = 0;
11243 reg [int_rd_cntr_width-1:0] trr_rd_cnt = 0;
11244 reg [int_rd_cntr_width-1:0] wr_rresp_cnt = 0;
11245 reg [axi_rsp_width-1:0] rresp;
11247 reg [rsp_fifo_bits-1:0] fifo_rresp [0:max_rd_outstanding_transactions-1];
11248 reg enable_write_rresp;
11251 integer rd_latency_count;
11253 reg read_fifo_empty;
11255 reg [max_burst_bits-1:0] read_fifo [0:max_rd_outstanding_transactions-1];
11257 reg [int_rd_cntr_width-1:0] rd_fifo_wr_ptr = 0, rd_fifo_rd_ptr = 0;
11258 wire read_fifo_full;
11263 wire rd_intr_fifo_full, rd_intr_fifo_empty;
11265 assign read_fifo_full = (rd_fifo_wr_ptr[int_rd_cntr_width-1] !== rd_fifo_rd_ptr[int_rd_cntr_width-1] && rd_fifo_wr_ptr[int_rd_cntr_width-2:0] === rd_fifo_rd_ptr[int_rd_cntr_width-2:0])?1
'b1: 1'b0;
11268 reg rd_req, invalid_rd_req;
11279 reg [rd_info_bits-1:0] read_control_info;
11280 reg [(data_bus_width*axi_burst_len)-1:0] aligned_rd_data;
11281 reg temp_rd_intr_fifo_empty;
11283 processing_system7_vip_v1_0_10_intr_rd_mem rd_intr_fifo(SW_CLK, S_RESETN, rd_intr_fifo_full, rd_intr_fifo_empty, rd_req, invalid_rd_req, read_control_info , RD_DATA_OCM, RD_DATA_DDR, RD_DATA_VALID_OCM, RD_DATA_VALID_DDR);
11285 assign read_fifo_empty = (rd_fifo_wr_ptr === rd_fifo_rd_ptr)?1
'b1: 1'b0;
11286 assign ar_fifo_full = ((ar_cnt[int_rd_cntr_width-1] !== rd_cnt[int_rd_cntr_width-1]) && (ar_cnt[int_rd_cntr_width-2:0] === rd_cnt[int_rd_cntr_width-2:0]))?1
'b1 :1'b0;
11287 assign S_RCOUNT = rcount;
11288 assign S_RACOUNT = racount;
11291 always@(posedge S_ACLK) temp_rd_intr_fifo_empty = rd_intr_fifo_empty;
11294 function automatic rdfifo_full ;
11295 input [axi_len_width:0] fifo_space_exp;
11296 integer fifo_space_left;
11298 fifo_space_left = afi_fifo_locations - rcount;
11299 if(fifo_space_left < fifo_space_exp)
11307 always@(negedge S_RESETN or posedge S_ACLK)
11312 if(net_ARVALID ==
'b1 && S_ARREADY == 'b1) begin
11313 arvalid_receive_time[ar_time_cnt[int_rd_cntr_width-2:0]] = $time;
11314 arvalid_flag[ar_time_cnt[int_rd_cntr_width-2:0]] = 1
'b1;
11315 ar_time_cnt = ar_time_cnt + 1;
11316 if((ar_time_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) )
11317 ar_time_cnt[int_rd_cntr_width-1:0] = 0;
11321 // /* Store the arvalid receive time --- necessary for calculating the bresp latency */
11322 // always@(negedge S_RESETN or S_ARID or S_ARADDR or S_ARVALID )
11325 // ar_time_cnt = 0;
11327 // if(S_ARVALID) begin
11328 // arvalid_receive_time[ar_time_cnt] = $time;
11329 // arvalid_flag[ar_time_cnt] = 1'b1;
11336 always@(ar_fifo_full)
11338 if(ar_fifo_full && DEBUG_INFO)
11339 $display(
"[%0d] : %0s : %0s : Reached the maximum outstanding Read transactions limit (%0d). Blocking all future Read transactions until at least 1 of the outstanding Read transaction has completed.",$time, DISP_INFO, slave_name,max_rd_outstanding_transactions);
11343 always@(posedge S_ACLK)
11345 if(net_ARVALID ==
'b1 && S_ARREADY == 'b1) begin
11346 if(S_ARQOS === 0) begin
11347 arqos[ar_cnt[int_rd_cntr_width-2:0]] = ar_qos;
11349 arqos[ar_cnt[int_rd_cntr_width-2:0]] = S_ARQOS;
11362 always@(negedge S_RESETN or posedge S_ACLK)
11364 if(!S_RESETN) begin
11368 if(!ar_fifo_full) begin
11369 slv.monitor.axi_rd_cmd_port.get(trc);
11371 arlen[ar_cnt[int_rd_cntr_width-2:0]] = trc.len;
11372 arsize[ar_cnt[int_rd_cntr_width-2:0]] = trc.size;
11373 arbrst[ar_cnt[int_rd_cntr_width-2:0]] = trc.burst;
11374 arlock[ar_cnt[int_rd_cntr_width-2:0]] = trc.lock;
11375 arcache[ar_cnt[int_rd_cntr_width-2:0]]= trc.cache;
11376 arprot[ar_cnt[int_rd_cntr_width-2:0]] = trc.prot;
11377 arid[ar_cnt[int_rd_cntr_width-2:0]] = trc.id;
11378 ar_flag[ar_cnt[int_rd_cntr_width-2:0]] = 1
'b1;
11379 size_local = trc.size;
11380 addr_local = trc.addr;
11382 0 : addr_final = {addr_local};
11383 1 : addr_final = {addr_local[31:1],1'b0};
11384 2 : addr_final = {addr_local[31:2],2
'b0};
11385 3 : addr_final = {addr_local[31:3],3'b0};
11386 4 : addr_final = {addr_local[31:4],4
'b0};
11387 5 : addr_final = {addr_local[31:5],5'b0};
11388 6 : addr_final = {addr_local[31:6],6
'b0};
11389 7 : addr_final = {addr_local[31:7],7'b0};
11391 araddr[ar_cnt[int_rd_cntr_width-2:0]] = addr_final;
11393 if(ar_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
11395 ar_cnt[int_rd_cntr_width-1:0] = 0;
11428 task automatic get_wrap_aligned_rd_data;
11429 output [(data_bus_width*axi_burst_len)-1:0] aligned_data;
11430 input [addr_width-1:0] addr;
11431 input [(data_bus_width*axi_burst_len)-1:0] b_data;
11432 input [max_burst_bytes_width:0] v_bytes;
11433 reg [addr_width-1:0] start_addr;
11434 reg [(data_bus_width*axi_burst_len)-1:0] temp_data, wrp_data;
11438 start_addr = (addr/v_bytes) * v_bytes;
11439 wrp_bytes = addr - start_addr;
11442 while(wrp_bytes > 0) begin
11443 temp_data = temp_data >> 8;
11444 temp_data[(data_bus_width*axi_burst_len)-1 : (data_bus_width*axi_burst_len)-8] = wrp_data[7:0];
11445 wrp_data = wrp_data >> 8;
11446 wrp_bytes = wrp_bytes - 1;
11448 temp_data = temp_data >> ((data_bus_width*axi_burst_len) - (v_bytes*8));
11449 wrp_bytes = addr - start_addr;
11450 wrp_data = b_data >> (wrp_bytes*8);
11452 aligned_data = (temp_data | wrp_data);
11457 parameter RD_DATA_REQ = 1
'b0, WAIT_RD_VALID = 1'b1;
11459 reg [addr_width-1:0] temp_read_address;
11460 reg [max_burst_bytes_width:0] temp_rd_valid_bytes;
11463 always@(negedge S_RESETN or posedge SW_CLK)
11466 rd_fifo_wr_ptr = 0;
11468 rd_fifo_state = RD_DATA_REQ;
11469 temp_rd_valid_bytes = 0;
11470 temp_read_address = 0;
11476 invalid_rd_req = 0;
11478 case(rd_fifo_state)
11479 RD_DATA_REQ : begin
11480 rd_fifo_state = RD_DATA_REQ;
11485 if(ar_flag[wr_rresp_cnt[int_rd_cntr_width-2:0]] && !read_fifo_full) begin
11486 ar_flag[wr_rresp_cnt[int_rd_cntr_width-2:0]] = 0;
11487 rresp = calculate_resp(1
'b1, araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]],arprot[wr_rresp_cnt[int_rd_cntr_width-2:0]]);
11488 fifo_rresp[wr_rresp_cnt[int_rd_cntr_width-2:0]] = {arid[wr_rresp_cnt[int_rd_cntr_width-2:0]],rresp};
11489 temp_rd_valid_bytes = (arlen[wr_rresp_cnt[int_rd_cntr_width-2:0]]+1)*(2**arsize[wr_rresp_cnt[int_rd_cntr_width-2:0]]);//data_bus_width/8;
11491 if(arbrst[wr_rresp_cnt[int_rd_cntr_width-2:0]] === AXI_WRAP) /// wrap begin
11492 temp_read_address = (araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]]/temp_rd_valid_bytes) * temp_rd_valid_bytes;
11494 temp_read_address = araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]];
11496 if(rresp === AXI_OK) begin
11497 case(decode_address(temp_read_address))//decode_address(araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]]);
11498 OCM_MEM : RD_REQ_OCM = 1;
11499 DDR_MEM : RD_REQ_DDR = 1;
11500 // REG_MEM : RD_REQ_REG = 1;
11501 default : invalid_rd_req = 1;
11504 invalid_rd_req = 1;
11506 RD_QOS = arqos[wr_rresp_cnt[int_rd_cntr_width-2:0]];
11507 RD_ADDR = temp_read_address; ///araddr[wr_rresp_cnt[int_rd_cntr_width-2:0]];
11508 RD_BYTES = temp_rd_valid_bytes;
11509 rd_fifo_state = WAIT_RD_VALID;
11514 wr_rresp_cnt = wr_rresp_cnt + 1;
11515 if(wr_rresp_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
11516 // wr_rresp_cnt[int_rd_cntr_width-1] = ~ wr_rresp_cnt[int_rd_cntr_width-1];
11517 wr_rresp_cnt[int_rd_cntr_width-1:0] = 0;
11521 WAIT_RD_VALID : begin
11522 rd_fifo_state = WAIT_RD_VALID;
11523 if(RD_DATA_VALID_OCM | RD_DATA_VALID_DDR | invalid_rd_req) begin ///temp_dec == 2'b11) begin
11525 if(RD_DATA_VALID_DDR)
11526 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = RD_DATA_DDR;
11527 else if(RD_DATA_VALID_OCM)
11528 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = RD_DATA_OCM;
11532 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = 0;
11533 rd_fifo_wr_ptr = rd_fifo_wr_ptr + 1;
11538 invalid_rd_req = 0;
11539 rd_fifo_state = RD_DATA_REQ;
11610 reg[rd_afi_fifo_bits-1:0] temp_rd_data;
11612 always@(negedge S_RESETN or posedge S_ACLK)
11615 rd_fifo_wr_ptr = 0;
11622 if(!temp_rd_intr_fifo_empty) begin
11623 rd_intr_fifo.read_mem(temp_rd_data);
11629 if(!rdfifo_full(temp_rd_data[rd_afi_ln_msb:rd_afi_ln_lsb]+1)) begin
11630 read_fifo[rd_fifo_wr_ptr[int_rd_cntr_width-2:0]] = temp_rd_data;
11631 rd_fifo_wr_ptr = rd_fifo_wr_ptr + 1;
11632 rcount = rcount + temp_rd_data[rd_afi_ln_msb:rd_afi_ln_lsb]+1;
11641 reg[max_burst_bytes_width:0] rd_v_b;
11642 reg[rd_afi_fifo_bits-1:0] tmp_fifo_rd;
11643 reg[(data_bus_width*axi_burst_len)-1:0] temp_read_data;
11644 reg [(data_bus_width*axi_burst_len)-1:0] temp_wrap_data;
11645 reg[(axi_rsp_width*axi_burst_len)-1:0] temp_read_rsp;
11647 xil_axi_data_beat new_data;
11663 slv.rd_driver.get_rd_reactive(trr);
11664 trr_rd.push_back(trr.my_clone());
11677 if(DEBUG_INFO) $display($time,
" BEFORE checking line ...... %0d",S_RESETN);
11679 if(DEBUG_INFO) $display($time,
" AFTER checking line ...... %0d",S_RESETN);
11681 $monitor($time,
" checking line ......");
11682 rd_fifo_rd_ptr = 0;
11684 rd_latency_count = get_rd_lat_number(1);
11686 rresp_time_cnt = 0;
11689 $monitor($time,
" else checking line ......%0d",S_RESETN);
11692 wait(arvalid_flag[rresp_time_cnt[int_rd_cntr_width-2:0]] == 1);
11696 rd_latency_count = get_rd_lat_number(1);
11703 wait(trr_rd.size() > 0);
11704 trr_get_rd = trr_rd.pop_front();
11706 while ((arvalid_flag[rresp_time_cnt[int_rd_cntr_width-2:0]] ==
'b1 )&& ((($realtime - arvalid_receive_time[rresp_time_cnt[int_rd_cntr_width-2:0]])/diff_time) < rd_latency_count)) begin
11710 //if(arvalid_flag[rresp_time_cnt] && ((($realtime - arvalid_receive_time[rresp_time_cnt])/diff_time) >= rd_latency_count))
11713 if(!read_fifo_empty && rd_delayed)begin
11715 arvalid_flag[rresp_time_cnt[int_rd_cntr_width-2:0]] = 1'b0;
11716 rd_v_b = ((arlen[rd_cnt[int_rd_cntr_width-2:0]]+1)*(2**arsize[rd_cnt[int_rd_cntr_width-2:0]]));
11717 temp_read_data = read_fifo[rd_fifo_rd_ptr[int_rd_cntr_width-2:0]];
11718 rd_fifo_rd_ptr = rd_fifo_rd_ptr+1;
11720 if(arbrst[rd_cnt[int_rd_cntr_width-2:0]]=== AXI_WRAP) begin
11721 get_wrap_aligned_rd_data(temp_wrap_data, araddr[rd_cnt[int_rd_cntr_width-2:0]], temp_read_data, rd_v_b);
11722 temp_read_data = temp_wrap_data;
11725 repeat(axi_burst_len) begin
11726 temp_read_rsp = temp_read_rsp >> axi_rsp_width;
11727 temp_read_rsp[(axi_rsp_width*axi_burst_len)-1:(axi_rsp_width*axi_burst_len)-axi_rsp_width] = fifo_rresp[rd_cnt[int_rd_cntr_width-2:0]][rsp_msb : rsp_lsb];
11729 case (arsize[rd_cnt[int_rd_cntr_width-2:0]])
11730 3
'b000: trr_get_rd.size = XIL_AXI_SIZE_1BYTE;
11731 3'b001: trr_get_rd.size = XIL_AXI_SIZE_2BYTE;
11732 3
'b010: trr_get_rd.size = XIL_AXI_SIZE_4BYTE;
11733 3'b011: trr_get_rd.size = XIL_AXI_SIZE_8BYTE;
11734 3
'b100: trr_get_rd.size = XIL_AXI_SIZE_16BYTE;
11735 3'b101: trr_get_rd.size = XIL_AXI_SIZE_32BYTE;
11736 3
'b110: trr_get_rd.size = XIL_AXI_SIZE_64BYTE;
11737 3'b111: trr_get_rd.size = XIL_AXI_SIZE_128BYTE;
11739 trr_get_rd.len = arlen[rd_cnt[int_rd_cntr_width-2:0]];
11740 trr_get_rd.id = (arid[rd_cnt[int_rd_cntr_width-2:0]]);
11742 trr_get_rd.rresp =
new[((2**arsize[rd_cnt[int_rd_cntr_width-2:0]])*(arlen[rd_cnt[int_rd_cntr_width-2:0]]+1))];
11743 for(j = 0; j < (arlen[rd_cnt[int_rd_cntr_width-2:0]]+1); j = j+1) begin
11744 for(k = 0; k < (2**arsize[rd_cnt[int_rd_cntr_width-2:0]]); k = k+1) begin
11745 new_data[(k*8)+:8] = temp_read_data[7:0];
11746 temp_read_data = temp_read_data >> 8;
11748 trr_get_rd.set_data_beat(j, new_data);
11749 case(temp_read_rsp[(j*2)+:2])
11750 2
'b00: trr_get_rd.rresp[j] = XIL_AXI_RESP_OKAY;
11751 2'b01: trr_get_rd.rresp[j] = XIL_AXI_RESP_EXOKAY;
11752 2
'b10: trr_get_rd.rresp[j] = XIL_AXI_RESP_SLVERR;
11753 2'b11: trr_get_rd.rresp[j] = XIL_AXI_RESP_DECERR;
11756 slv.rd_driver.send(trr_get_rd);
11757 rd_cnt = rd_cnt + 1;
11759 rresp_time_cnt = rresp_time_cnt+1;
11760 if(DEBUG_INFO) $display(
" %m current rresp_time_cnt %0d rd_cnt %0d max_rd_outstanding_transactions %0d",rresp_time_cnt,rd_cnt,max_rd_outstanding_transactions);
11761 if(rresp_time_cnt[int_rd_cntr_width-1:0] === max_rd_outstanding_transactions) begin
11763 rresp_time_cnt[int_rd_cntr_width-1:0] = 0;
11764 if(DEBUG_INFO) $display(
" %m resetting rresp_time_cnt %0d max_rd_outstanding_transactions %0d",rresp_time_cnt,max_rd_outstanding_transactions);
11767 if(rd_cnt[int_rd_cntr_width-1:0] === (max_rd_outstanding_transactions)) begin
11769 rd_cnt[int_rd_cntr_width-1:0] = 0;
11770 if(DEBUG_INFO) $display(
" %m resetting rd_cnt %0d max_rd_outstanding_transactions %0d",rd_cnt,max_rd_outstanding_transactions);
11772 rd_latency_count = get_rd_lat_number(1);
12525 parameter C_FCLK_CLK0_FREQ = 50;
12526 parameter C_FCLK_CLK1_FREQ = 50;
12527 parameter C_FCLK_CLK3_FREQ = 50;
12528 parameter C_FCLK_CLK2_FREQ = 50;
12530 parameter C_HIGH_OCM_EN = 0;
12534 parameter C_USE_S_AXI_HP0 = 0;
12535 parameter C_USE_S_AXI_HP1 = 0;
12536 parameter C_USE_S_AXI_HP2 = 0;
12537 parameter C_USE_S_AXI_HP3 = 0;
12539 parameter C_S_AXI_HP0_DATA_WIDTH = 32;
12540 parameter C_S_AXI_HP1_DATA_WIDTH = 32;
12541 parameter C_S_AXI_HP2_DATA_WIDTH = 32;
12542 parameter C_S_AXI_HP3_DATA_WIDTH = 32;
12544 parameter C_M_AXI_GP0_THREAD_ID_WIDTH = 12;
12545 parameter C_M_AXI_GP1_THREAD_ID_WIDTH = 12;
12546 parameter C_M_AXI_GP0_ENABLE_STATIC_REMAP = 0;
12547 parameter C_M_AXI_GP1_ENABLE_STATIC_REMAP = 0;
12555 parameter C_S_AXI_HP0_BASEADDR = 32
'h0000_0000;
12556 parameter C_S_AXI_HP1_BASEADDR = 32'h0000_0000;
12557 parameter C_S_AXI_HP2_BASEADDR = 32
'h0000_0000;
12558 parameter C_S_AXI_HP3_BASEADDR = 32'h0000_0000;
12560 parameter C_S_AXI_HP0_HIGHADDR = 32
'hFFFF_FFFF;
12561 parameter C_S_AXI_HP1_HIGHADDR = 32'hFFFF_FFFF;
12562 parameter C_S_AXI_HP2_HIGHADDR = 32
'hFFFF_FFFF;
12563 parameter C_S_AXI_HP3_HIGHADDR = 32'hFFFF_FFFF;
12566 parameter C_USE_M_AXI_GP0 = 0;
12567 parameter C_USE_M_AXI_GP1 = 0;
12568 parameter C_USE_S_AXI_GP0 = 1;
12569 parameter C_USE_S_AXI_GP1 = 1;
12579 parameter C_S_AXI_GP0_BASEADDR = 32
'h0000_0000;
12580 parameter C_S_AXI_GP1_BASEADDR = 32'h0000_0000;
12582 parameter C_S_AXI_GP0_HIGHADDR = 32
'hFFFF_FFFF;
12583 parameter C_S_AXI_GP1_HIGHADDR = 32'hFFFF_FFFF;
12585 parameter C_USE_S_AXI_ACP = 1;
12586 parameter C_S_AXI_ACP_BASEADDR = 32
'h0000_0000;
12587 parameter C_S_AXI_ACP_HIGHADDR = 32'hFFFF_FFFF;
12589 `include
"processing_system7_vip_v1_0_10_local_params.v"
13172 input [3:0] FTMT_F2P_TRIG;
13173 output [3:0] FTMT_F2P_TRIGACK;
13175 input [3:0] FTMT_P2F_TRIGACK;
13176 output [3:0] FTMT_P2F_TRIG;
13192 input [irq_width-1:0]
IRQ_F2P;
13258 wire net_arbiter_clk;
13260 wire net_axi_mgp0_rstn;
13261 wire net_axi_mgp1_rstn;
13262 wire net_axi_gp0_rstn;
13263 wire net_axi_gp1_rstn;
13264 wire net_axi_hp0_rstn;
13265 wire net_axi_hp1_rstn;
13266 wire net_axi_hp2_rstn;
13267 wire net_axi_hp3_rstn;
13268 wire net_axi_acp_rstn;
13269 wire [4:0] net_axi_acp_awuser;
13270 wire [4:0] net_axi_acp_aruser;
13278 reg DEBUG_INFO = 1;
13279 reg STOP_ON_ERROR = 1;
13282 reg mem_update_key = 1;
13283 reg reg_update_key_0 = 1;
13284 reg reg_update_key_1 = 1;
13287 `include
"processing_system7_vip_v1_0_10_unused_ports.v"
13290 `include
"processing_system7_vip_v1_0_10_apis.v"
13295 .rst_out_n(net_rstn),
13307 .m_axi_gp0_rstn(net_axi_mgp0_rstn),
13308 .m_axi_gp1_rstn(net_axi_mgp1_rstn),
13309 .s_axi_gp0_rstn(net_axi_gp0_rstn),
13310 .s_axi_gp1_rstn(net_axi_gp1_rstn),
13311 .s_axi_hp0_rstn(net_axi_hp0_rstn),
13312 .s_axi_hp1_rstn(net_axi_hp1_rstn),
13313 .s_axi_hp2_rstn(net_axi_hp2_rstn),
13314 .s_axi_hp3_rstn(net_axi_hp3_rstn),
13315 .s_axi_acp_rstn(net_axi_acp_rstn),
13322 .fpga_acp_reset_n(),
13323 .fpga_gp_m0_reset_n(),
13324 .fpga_gp_m1_reset_n(),
13325 .fpga_gp_s0_reset_n(),
13326 .fpga_gp_s1_reset_n(),
13327 .fpga_hp_s0_reset_n(),
13328 .fpga_hp_s1_reset_n(),
13329 .fpga_hp_s2_reset_n(),
13330 .fpga_hp_s3_reset_n()
13335 gen_clk(.ps_clk(
PS_CLK),
13336 .sw_clk(net_sw_clk),
13344 wire net_wr_ack_ocm_gp0, net_wr_ack_ddr_gp0, net_wr_ack_ocm_gp1, net_wr_ack_ddr_gp1;
13345 wire net_wr_dv_ocm_gp0, net_wr_dv_ddr_gp0, net_wr_dv_ocm_gp1, net_wr_dv_ddr_gp1;
13346 wire [max_burst_bits-1:0] net_wr_data_gp0, net_wr_data_gp1;
13347 wire [max_burst_bytes-1:0] net_wr_strb_gp0, net_wr_strb_gp1;
13348 wire [addr_width-1:0] net_wr_addr_gp0, net_wr_addr_gp1;
13349 wire [max_burst_bytes_width:0] net_wr_bytes_gp0, net_wr_bytes_gp1;
13350 wire [axi_qos_width-1:0] net_wr_qos_gp0, net_wr_qos_gp1;
13352 wire net_rd_req_ddr_gp0, net_rd_req_ddr_gp1;
13353 wire net_rd_req_ocm_gp0, net_rd_req_ocm_gp1;
13354 wire net_rd_req_reg_gp0, net_rd_req_reg_gp1;
13355 wire [addr_width-1:0] net_rd_addr_gp0, net_rd_addr_gp1;
13356 wire [max_burst_bytes_width:0] net_rd_bytes_gp0, net_rd_bytes_gp1;
13357 wire [max_burst_bits-1:0] net_rd_data_ddr_gp0, net_rd_data_ddr_gp1;
13358 wire [max_burst_bits-1:0] net_rd_data_ocm_gp0, net_rd_data_ocm_gp1;
13359 wire [max_burst_bits-1:0] net_rd_data_reg_gp0, net_rd_data_reg_gp1;
13360 wire net_rd_dv_ddr_gp0, net_rd_dv_ddr_gp1;
13361 wire net_rd_dv_ocm_gp0, net_rd_dv_ocm_gp1;
13362 wire net_rd_dv_reg_gp0, net_rd_dv_reg_gp1;
13363 wire [axi_qos_width-1:0] net_rd_qos_gp0, net_rd_qos_gp1;
13365 wire net_wr_ack_ddr_hp0, net_wr_ack_ddr_hp1, net_wr_ack_ddr_hp2, net_wr_ack_ddr_hp3;
13366 wire net_wr_ack_ocm_hp0, net_wr_ack_ocm_hp1, net_wr_ack_ocm_hp2, net_wr_ack_ocm_hp3;
13367 wire net_wr_dv_ddr_hp0, net_wr_dv_ddr_hp1, net_wr_dv_ddr_hp2, net_wr_dv_ddr_hp3;
13368 wire net_wr_dv_ocm_hp0, net_wr_dv_ocm_hp1, net_wr_dv_ocm_hp2, net_wr_dv_ocm_hp3;
13369 wire [max_burst_bits-1:0] net_wr_data_hp0, net_wr_data_hp1, net_wr_data_hp2, net_wr_data_hp3;
13370 wire [max_burst_bytes-1:0] net_wr_strb_hp0, net_wr_strb_hp1, net_wr_strb_hp2, net_wr_strb_hp3;
13371 wire [addr_width-1:0] net_wr_addr_hp0, net_wr_addr_hp1, net_wr_addr_hp2, net_wr_addr_hp3;
13372 wire [max_burst_bytes_width:0] net_wr_bytes_hp0, net_wr_bytes_hp1, net_wr_bytes_hp2, net_wr_bytes_hp3;
13373 wire [axi_qos_width-1:0] net_wr_qos_hp0, net_wr_qos_hp1, net_wr_qos_hp2, net_wr_qos_hp3;
13375 wire net_rd_req_ddr_hp0, net_rd_req_ddr_hp1, net_rd_req_ddr_hp2, net_rd_req_ddr_hp3;
13376 wire net_rd_req_ocm_hp0, net_rd_req_ocm_hp1, net_rd_req_ocm_hp2, net_rd_req_ocm_hp3;
13377 wire [addr_width-1:0] net_rd_addr_hp0, net_rd_addr_hp1, net_rd_addr_hp2, net_rd_addr_hp3;
13378 wire [max_burst_bytes_width:0] net_rd_bytes_hp0, net_rd_bytes_hp1, net_rd_bytes_hp2, net_rd_bytes_hp3;
13379 wire [max_burst_bits-1:0] net_rd_data_ddr_hp0, net_rd_data_ddr_hp1, net_rd_data_ddr_hp2, net_rd_data_ddr_hp3;
13380 wire [max_burst_bits-1:0] net_rd_data_ocm_hp0, net_rd_data_ocm_hp1, net_rd_data_ocm_hp2, net_rd_data_ocm_hp3;
13381 wire net_rd_dv_ddr_hp0, net_rd_dv_ddr_hp1, net_rd_dv_ddr_hp2, net_rd_dv_ddr_hp3;
13382 wire net_rd_dv_ocm_hp0, net_rd_dv_ocm_hp1, net_rd_dv_ocm_hp2, net_rd_dv_ocm_hp3;
13383 wire [axi_qos_width-1:0] net_rd_qos_hp0, net_rd_qos_hp1, net_rd_qos_hp2, net_rd_qos_hp3;
13385 wire net_wr_ack_ddr_acp,net_wr_ack_ocm_acp;
13386 wire net_wr_dv_ddr_acp,net_wr_dv_ocm_acp;
13387 wire [max_burst_bits-1:0] net_wr_data_acp;
13388 wire [max_burst_bytes-1:0] net_wr_strb_acp;
13389 wire [addr_width-1:0] net_wr_addr_acp;
13390 wire [max_burst_bytes_width:0] net_wr_bytes_acp;
13391 wire [axi_qos_width-1:0] net_wr_qos_acp;
13393 wire net_rd_req_ddr_acp, net_rd_req_ocm_acp;
13394 wire [addr_width-1:0] net_rd_addr_acp;
13395 wire [max_burst_bytes_width:0] net_rd_bytes_acp;
13396 wire [max_burst_bits-1:0] net_rd_data_ddr_acp;
13397 wire [max_burst_bits-1:0] net_rd_data_ocm_acp;
13398 wire net_rd_dv_ddr_acp,net_rd_dv_ocm_acp;
13399 wire [axi_qos_width-1:0] net_rd_qos_acp;
13401 wire ocm_wr_ack_port0;
13402 wire ocm_wr_dv_port0;
13403 wire ocm_rd_req_port0;
13404 wire ocm_rd_dv_port0;
13405 wire [addr_width-1:0] ocm_wr_addr_port0;
13406 wire [max_burst_bits-1:0] ocm_wr_data_port0;
13407 wire [max_burst_bytes-1:0] ocm_wr_strb_port0;
13408 wire [max_burst_bytes_width:0] ocm_wr_bytes_port0;
13409 wire [addr_width-1:0] ocm_rd_addr_port0;
13410 wire [max_burst_bits-1:0] ocm_rd_data_port0;
13411 wire [max_burst_bytes_width:0] ocm_rd_bytes_port0;
13412 wire [axi_qos_width-1:0] ocm_wr_qos_port0;
13413 wire [axi_qos_width-1:0] ocm_rd_qos_port0;
13415 wire ocm_wr_ack_port1;
13416 wire ocm_wr_dv_port1;
13417 wire ocm_rd_req_port1;
13418 wire ocm_rd_dv_port1;
13419 wire [addr_width-1:0] ocm_wr_addr_port1;
13420 wire [max_burst_bits-1:0] ocm_wr_data_port1;
13421 wire [max_burst_bytes-1:0] ocm_wr_strb_port1;
13422 wire [max_burst_bytes_width:0] ocm_wr_bytes_port1;
13423 wire [addr_width-1:0] ocm_rd_addr_port1;
13424 wire [max_burst_bits-1:0] ocm_rd_data_port1;
13425 wire [max_burst_bytes_width:0] ocm_rd_bytes_port1;
13426 wire [axi_qos_width-1:0] ocm_wr_qos_port1;
13427 wire [axi_qos_width-1:0] ocm_rd_qos_port1;
13429 wire ddr_wr_ack_port0;
13430 wire ddr_wr_dv_port0;
13431 wire ddr_rd_req_port0;
13432 wire ddr_rd_dv_port0;
13433 wire[addr_width-1:0] ddr_wr_addr_port0;
13434 wire[max_burst_bits-1:0] ddr_wr_data_port0;
13435 wire[max_burst_bytes-1:0] ddr_wr_strb_port0;
13436 wire[max_burst_bytes_width:0] ddr_wr_bytes_port0;
13437 wire[addr_width-1:0] ddr_rd_addr_port0;
13438 wire[max_burst_bits-1:0] ddr_rd_data_port0;
13439 wire[max_burst_bytes_width:0] ddr_rd_bytes_port0;
13440 wire [axi_qos_width-1:0] ddr_wr_qos_port0;
13441 wire [axi_qos_width-1:0] ddr_rd_qos_port0;
13443 wire ddr_wr_ack_port1;
13444 wire ddr_wr_dv_port1;
13445 wire ddr_rd_req_port1;
13446 wire ddr_rd_dv_port1;
13447 wire[addr_width-1:0] ddr_wr_addr_port1;
13448 wire[max_burst_bits-1:0] ddr_wr_data_port1;
13449 wire[max_burst_bytes-1:0] ddr_wr_strb_port1;
13450 wire[max_burst_bytes_width:0] ddr_wr_bytes_port1;
13451 wire[addr_width-1:0] ddr_rd_addr_port1;
13452 wire[max_burst_bits-1:0] ddr_rd_data_port1;
13453 wire[max_burst_bytes_width:0] ddr_rd_bytes_port1;
13454 wire[axi_qos_width-1:0] ddr_wr_qos_port1;
13455 wire[axi_qos_width-1:0] ddr_rd_qos_port1;
13457 wire ddr_wr_ack_port2;
13458 wire ddr_wr_dv_port2;
13459 wire ddr_rd_req_port2;
13460 wire ddr_rd_dv_port2;
13461 wire[addr_width-1:0] ddr_wr_addr_port2;
13462 wire[max_burst_bits-1:0] ddr_wr_data_port2;
13463 wire[max_burst_bytes-1:0] ddr_wr_strb_port2;
13464 wire[max_burst_bytes_width:0] ddr_wr_bytes_port2;
13465 wire[addr_width-1:0] ddr_rd_addr_port2;
13466 wire[max_burst_bits-1:0] ddr_rd_data_port2;
13467 wire[max_burst_bytes_width:0] ddr_rd_bytes_port2;
13468 wire[axi_qos_width-1:0] ddr_wr_qos_port2;
13469 wire[axi_qos_width-1:0] ddr_rd_qos_port2;
13471 wire ddr_wr_ack_port3;
13472 wire ddr_wr_dv_port3;
13473 wire ddr_rd_req_port3;
13474 wire ddr_rd_dv_port3;
13475 wire[addr_width-1:0] ddr_wr_addr_port3;
13476 wire[max_burst_bits-1:0] ddr_wr_data_port3;
13477 wire[max_burst_bytes-1:0] ddr_wr_strb_port3;
13478 wire[max_burst_bytes_width:0] ddr_wr_bytes_port3;
13479 wire[addr_width-1:0] ddr_rd_addr_port3;
13480 wire[max_burst_bits-1:0] ddr_rd_data_port3;
13481 wire[max_burst_bytes_width:0] ddr_rd_bytes_port3;
13482 wire[axi_qos_width-1:0] ddr_wr_qos_port3;
13483 wire[axi_qos_width-1:0] ddr_rd_qos_port3;
13485 wire reg_rd_req_port0;
13486 wire reg_rd_dv_port0;
13487 wire[addr_width-1:0] reg_rd_addr_port0;
13488 wire[max_burst_bits-1:0] reg_rd_data_port0;
13489 wire[max_burst_bytes_width:0] reg_rd_bytes_port0;
13490 wire [axi_qos_width-1:0] reg_rd_qos_port0;
13492 wire reg_rd_req_port1;
13493 wire reg_rd_dv_port1;
13494 wire[addr_width-1:0] reg_rd_addr_port1;
13495 wire[max_burst_bits-1:0] reg_rd_data_port1;
13496 wire[max_burst_bytes_width:0] reg_rd_bytes_port1;
13497 wire [axi_qos_width-1:0] reg_rd_qos_port1;
13499 wire [11:0] M_AXI_GP0_AWID_FULL;
13500 wire [11:0] M_AXI_GP0_WID_FULL;
13501 wire [11:0] M_AXI_GP0_ARID_FULL;
13503 wire [11:0] M_AXI_GP0_BID_FULL;
13504 wire [11:0] M_AXI_GP0_RID_FULL;
13506 wire [11:0] M_AXI_GP1_AWID_FULL;
13507 wire [11:0] M_AXI_GP1_WID_FULL;
13508 wire [11:0] M_AXI_GP1_ARID_FULL;
13510 wire [11:0] M_AXI_GP1_BID_FULL;
13511 wire [11:0] M_AXI_GP1_RID_FULL;
13514 function [5:0] compress_id;
13517 compress_id =
id[5:0];
13521 function [11:0] uncompress_id;
13524 uncompress_id = {6
'b110000, id[5:0]};
13528 assign M_AXI_GP0_AWID = (C_M_AXI_GP0_ENABLE_STATIC_REMAP == 1) ? compress_id(M_AXI_GP0_AWID_FULL) : M_AXI_GP0_AWID_FULL;
13529 assign M_AXI_GP0_WID = (C_M_AXI_GP0_ENABLE_STATIC_REMAP == 1) ? compress_id(M_AXI_GP0_WID_FULL) : M_AXI_GP0_WID_FULL;
13530 assign M_AXI_GP0_ARID = (C_M_AXI_GP0_ENABLE_STATIC_REMAP == 1) ? compress_id(M_AXI_GP0_ARID_FULL) : M_AXI_GP0_ARID_FULL;
13531 assign M_AXI_GP0_BID_FULL = (C_M_AXI_GP0_ENABLE_STATIC_REMAP == 1) ? uncompress_id(M_AXI_GP0_BID) : M_AXI_GP0_BID;
13532 assign M_AXI_GP0_RID_FULL = (C_M_AXI_GP0_ENABLE_STATIC_REMAP == 1) ? uncompress_id(M_AXI_GP0_RID) : M_AXI_GP0_RID;
13535 assign M_AXI_GP1_AWID = (C_M_AXI_GP1_ENABLE_STATIC_REMAP == 1) ? compress_id(M_AXI_GP1_AWID_FULL) : M_AXI_GP1_AWID_FULL;
13536 assign M_AXI_GP1_WID = (C_M_AXI_GP1_ENABLE_STATIC_REMAP == 1) ? compress_id(M_AXI_GP1_WID_FULL) : M_AXI_GP1_WID_FULL;
13537 assign M_AXI_GP1_ARID = (C_M_AXI_GP1_ENABLE_STATIC_REMAP == 1) ? compress_id(M_AXI_GP1_ARID_FULL) : M_AXI_GP1_ARID_FULL;
13538 assign M_AXI_GP1_BID_FULL = (C_M_AXI_GP1_ENABLE_STATIC_REMAP == 1) ? uncompress_id(M_AXI_GP1_BID) : M_AXI_GP1_BID;
13539 assign M_AXI_GP1_RID_FULL = (C_M_AXI_GP1_ENABLE_STATIC_REMAP == 1) ? uncompress_id(M_AXI_GP1_RID) : M_AXI_GP1_RID;
13544 processing_system7_vip_v1_0_10_interconnect_model icm (
13546 .sw_clk(net_sw_clk),
13548 .w_qos_gp0(net_wr_qos_gp0),
13549 .w_qos_gp1(net_wr_qos_gp1),
13550 .w_qos_hp0(net_wr_qos_hp0),
13551 .w_qos_hp1(net_wr_qos_hp1),
13552 .w_qos_hp2(net_wr_qos_hp2),
13553 .w_qos_hp3(net_wr_qos_hp3),
13555 .r_qos_gp0(net_rd_qos_gp0),
13556 .r_qos_gp1(net_rd_qos_gp1),
13557 .r_qos_hp0(net_rd_qos_hp0),
13558 .r_qos_hp1(net_rd_qos_hp1),
13559 .r_qos_hp2(net_rd_qos_hp2),
13560 .r_qos_hp3(net_rd_qos_hp3),
13562 /* GP Slave ports access */
13563 .wr_ack_ddr_gp0(net_wr_ack_ddr_gp0),
13564 .wr_ack_ocm_gp0(net_wr_ack_ocm_gp0),
13565 .wr_data_gp0(net_wr_data_gp0),
13566 .wr_strb_gp0(net_wr_strb_gp0),
13567 .wr_addr_gp0(net_wr_addr_gp0),
13568 .wr_bytes_gp0(net_wr_bytes_gp0),
13569 .wr_dv_ddr_gp0(net_wr_dv_ddr_gp0),
13570 .wr_dv_ocm_gp0(net_wr_dv_ocm_gp0),
13571 .rd_req_ddr_gp0(net_rd_req_ddr_gp0),
13572 .rd_req_ocm_gp0(net_rd_req_ocm_gp0),
13573 .rd_req_reg_gp0(net_rd_req_reg_gp0),
13574 .rd_addr_gp0(net_rd_addr_gp0),
13575 .rd_bytes_gp0(net_rd_bytes_gp0),
13576 .rd_data_ddr_gp0(net_rd_data_ddr_gp0),
13577 .rd_data_ocm_gp0(net_rd_data_ocm_gp0),
13578 .rd_data_reg_gp0(net_rd_data_reg_gp0),
13579 .rd_dv_ddr_gp0(net_rd_dv_ddr_gp0),
13580 .rd_dv_ocm_gp0(net_rd_dv_ocm_gp0),
13581 .rd_dv_reg_gp0(net_rd_dv_reg_gp0),
13583 .wr_ack_ddr_gp1(net_wr_ack_ddr_gp1),
13584 .wr_ack_ocm_gp1(net_wr_ack_ocm_gp1),
13585 .wr_data_gp1(net_wr_data_gp1),
13586 .wr_strb_gp1(net_wr_strb_gp1),
13587 .wr_addr_gp1(net_wr_addr_gp1),
13588 .wr_bytes_gp1(net_wr_bytes_gp1),
13589 .wr_dv_ddr_gp1(net_wr_dv_ddr_gp1),
13590 .wr_dv_ocm_gp1(net_wr_dv_ocm_gp1),
13591 .rd_req_ddr_gp1(net_rd_req_ddr_gp1),
13592 .rd_req_ocm_gp1(net_rd_req_ocm_gp1),
13593 .rd_req_reg_gp1(net_rd_req_reg_gp1),
13594 .rd_addr_gp1(net_rd_addr_gp1),
13595 .rd_bytes_gp1(net_rd_bytes_gp1),
13596 .rd_data_ddr_gp1(net_rd_data_ddr_gp1),
13597 .rd_data_ocm_gp1(net_rd_data_ocm_gp1),
13598 .rd_data_reg_gp1(net_rd_data_reg_gp1),
13599 .rd_dv_ddr_gp1(net_rd_dv_ddr_gp1),
13600 .rd_dv_ocm_gp1(net_rd_dv_ocm_gp1),
13601 .rd_dv_reg_gp1(net_rd_dv_reg_gp1),
13603 /* HP Slave ports access */
13604 .wr_ack_ddr_hp0(net_wr_ack_ddr_hp0),
13605 .wr_ack_ocm_hp0(net_wr_ack_ocm_hp0),
13606 .wr_data_hp0(net_wr_data_hp0),
13607 .wr_strb_hp0(net_wr_strb_hp0),
13608 .wr_addr_hp0(net_wr_addr_hp0),
13609 .wr_bytes_hp0(net_wr_bytes_hp0),
13610 .wr_dv_ddr_hp0(net_wr_dv_ddr_hp0),
13611 .wr_dv_ocm_hp0(net_wr_dv_ocm_hp0),
13612 .rd_req_ddr_hp0(net_rd_req_ddr_hp0),
13613 .rd_req_ocm_hp0(net_rd_req_ocm_hp0),
13614 .rd_addr_hp0(net_rd_addr_hp0),
13615 .rd_bytes_hp0(net_rd_bytes_hp0),
13616 .rd_data_ddr_hp0(net_rd_data_ddr_hp0),
13617 .rd_data_ocm_hp0(net_rd_data_ocm_hp0),
13618 .rd_dv_ddr_hp0(net_rd_dv_ddr_hp0),
13619 .rd_dv_ocm_hp0(net_rd_dv_ocm_hp0),
13621 .wr_ack_ddr_hp1(net_wr_ack_ddr_hp1),
13622 .wr_ack_ocm_hp1(net_wr_ack_ocm_hp1),
13623 .wr_data_hp1(net_wr_data_hp1),
13624 .wr_strb_hp1(net_wr_strb_hp1),
13625 .wr_addr_hp1(net_wr_addr_hp1),
13626 .wr_bytes_hp1(net_wr_bytes_hp1),
13627 .wr_dv_ddr_hp1(net_wr_dv_ddr_hp1),
13628 .wr_dv_ocm_hp1(net_wr_dv_ocm_hp1),
13629 .rd_req_ddr_hp1(net_rd_req_ddr_hp1),
13630 .rd_req_ocm_hp1(net_rd_req_ocm_hp1),
13631 .rd_addr_hp1(net_rd_addr_hp1),
13632 .rd_bytes_hp1(net_rd_bytes_hp1),
13633 .rd_data_ddr_hp1(net_rd_data_ddr_hp1),
13634 .rd_data_ocm_hp1(net_rd_data_ocm_hp1),
13635 .rd_dv_ocm_hp1(net_rd_dv_ocm_hp1),
13636 .rd_dv_ddr_hp1(net_rd_dv_ddr_hp1),
13638 .wr_ack_ddr_hp2(net_wr_ack_ddr_hp2),
13639 .wr_ack_ocm_hp2(net_wr_ack_ocm_hp2),
13640 .wr_data_hp2(net_wr_data_hp2),
13641 .wr_strb_hp2(net_wr_strb_hp2),
13642 .wr_addr_hp2(net_wr_addr_hp2),
13643 .wr_bytes_hp2(net_wr_bytes_hp2),
13644 .wr_dv_ocm_hp2(net_wr_dv_ocm_hp2),
13645 .wr_dv_ddr_hp2(net_wr_dv_ddr_hp2),
13646 .rd_req_ddr_hp2(net_rd_req_ddr_hp2),
13647 .rd_req_ocm_hp2(net_rd_req_ocm_hp2),
13648 .rd_addr_hp2(net_rd_addr_hp2),
13649 .rd_bytes_hp2(net_rd_bytes_hp2),
13650 .rd_data_ddr_hp2(net_rd_data_ddr_hp2),
13651 .rd_data_ocm_hp2(net_rd_data_ocm_hp2),
13652 .rd_dv_ddr_hp2(net_rd_dv_ddr_hp2),
13653 .rd_dv_ocm_hp2(net_rd_dv_ocm_hp2),
13655 .wr_ack_ocm_hp3(net_wr_ack_ocm_hp3),
13656 .wr_ack_ddr_hp3(net_wr_ack_ddr_hp3),
13657 .wr_data_hp3(net_wr_data_hp3),
13658 .wr_strb_hp3(net_wr_strb_hp3),
13659 .wr_addr_hp3(net_wr_addr_hp3),
13660 .wr_bytes_hp3(net_wr_bytes_hp3),
13661 .wr_dv_ddr_hp3(net_wr_dv_ddr_hp3),
13662 .wr_dv_ocm_hp3(net_wr_dv_ocm_hp3),
13663 .rd_req_ddr_hp3(net_rd_req_ddr_hp3),
13664 .rd_req_ocm_hp3(net_rd_req_ocm_hp3),
13665 .rd_addr_hp3(net_rd_addr_hp3),
13666 .rd_bytes_hp3(net_rd_bytes_hp3),
13667 .rd_data_ddr_hp3(net_rd_data_ddr_hp3),
13668 .rd_data_ocm_hp3(net_rd_data_ocm_hp3),
13669 .rd_dv_ddr_hp3(net_rd_dv_ddr_hp3),
13670 .rd_dv_ocm_hp3(net_rd_dv_ocm_hp3),
13672 /* Goes to port 1 of DDR */
13673 .ddr_wr_ack_port1(ddr_wr_ack_port1),
13674 .ddr_wr_dv_port1(ddr_wr_dv_port1),
13675 .ddr_rd_req_port1(ddr_rd_req_port1),
13676 .ddr_rd_dv_port1 (ddr_rd_dv_port1),
13677 .ddr_wr_addr_port1(ddr_wr_addr_port1),
13678 .ddr_wr_data_port1(ddr_wr_data_port1),
13679 .ddr_wr_strb_port1(ddr_wr_strb_port1),
13680 .ddr_wr_bytes_port1(ddr_wr_bytes_port1),
13681 .ddr_rd_addr_port1(ddr_rd_addr_port1),
13682 .ddr_rd_data_port1(ddr_rd_data_port1),
13683 .ddr_rd_bytes_port1(ddr_rd_bytes_port1),
13684 .ddr_wr_qos_port1(ddr_wr_qos_port1),
13685 .ddr_rd_qos_port1(ddr_rd_qos_port1),
13687 /* Goes to port2 of DDR */
13688 .ddr_wr_ack_port2 (ddr_wr_ack_port2),
13689 .ddr_wr_dv_port2 (ddr_wr_dv_port2),
13690 .ddr_rd_req_port2 (ddr_rd_req_port2),
13691 .ddr_rd_dv_port2 (ddr_rd_dv_port2),
13692 .ddr_wr_addr_port2(ddr_wr_addr_port2),
13693 .ddr_wr_data_port2(ddr_wr_data_port2),
13694 .ddr_wr_strb_port2(ddr_wr_strb_port2),
13695 .ddr_wr_bytes_port2(ddr_wr_bytes_port2),
13696 .ddr_rd_addr_port2(ddr_rd_addr_port2),
13697 .ddr_rd_data_port2(ddr_rd_data_port2),
13698 .ddr_rd_bytes_port2(ddr_rd_bytes_port2),
13699 .ddr_wr_qos_port2 (ddr_wr_qos_port2),
13700 .ddr_rd_qos_port2 (ddr_rd_qos_port2),
13702 /* Goes to port3 of DDR */
13703 .ddr_wr_ack_port3 (ddr_wr_ack_port3),
13704 .ddr_wr_dv_port3 (ddr_wr_dv_port3),
13705 .ddr_rd_req_port3 (ddr_rd_req_port3),
13706 .ddr_rd_dv_port3 (ddr_rd_dv_port3),
13707 .ddr_wr_addr_port3(ddr_wr_addr_port3),
13708 .ddr_wr_data_port3(ddr_wr_data_port3),
13709 .ddr_wr_strb_port3(ddr_wr_strb_port3),
13710 .ddr_wr_bytes_port3(ddr_wr_bytes_port3),
13711 .ddr_rd_addr_port3(ddr_rd_addr_port3),
13712 .ddr_rd_data_port3(ddr_rd_data_port3),
13713 .ddr_rd_bytes_port3(ddr_rd_bytes_port3),
13714 .ddr_wr_qos_port3 (ddr_wr_qos_port3),
13715 .ddr_rd_qos_port3 (ddr_rd_qos_port3),
13717 /* Goes to port 0 of OCM */
13718 .ocm_wr_ack_port1 (ocm_wr_ack_port1),
13719 .ocm_wr_dv_port1 (ocm_wr_dv_port1),
13720 .ocm_rd_req_port1 (ocm_rd_req_port1),
13721 .ocm_rd_dv_port1 (ocm_rd_dv_port1),
13722 .ocm_wr_addr_port1(ocm_wr_addr_port1),
13723 .ocm_wr_data_port1(ocm_wr_data_port1),
13724 .ocm_wr_strb_port1(ocm_wr_strb_port1),
13725 .ocm_wr_bytes_port1(ocm_wr_bytes_port1),
13726 .ocm_rd_addr_port1(ocm_rd_addr_port1),
13727 .ocm_rd_data_port1(ocm_rd_data_port1),
13728 .ocm_rd_bytes_port1(ocm_rd_bytes_port1),
13729 .ocm_wr_qos_port1(ocm_wr_qos_port1),
13730 .ocm_rd_qos_port1(ocm_rd_qos_port1),
13732 /* Goes to port 0 of REG */
13733 .reg_rd_qos_port1 (reg_rd_qos_port1) ,
13734 .reg_rd_req_port1 (reg_rd_req_port1),
13735 .reg_rd_dv_port1 (reg_rd_dv_port1),
13736 .reg_rd_addr_port1(reg_rd_addr_port1),
13737 .reg_rd_data_port1(reg_rd_data_port1),
13738 .reg_rd_bytes_port1(reg_rd_bytes_port1)
13741 processing_system7_vip_v1_0_10_ddrc ddrc (
13743 .sw_clk(net_sw_clk),
13745 /* Goes to port 0 of DDR */
13746 .ddr_wr_ack_port0 (ddr_wr_ack_port0),
13747 .ddr_wr_dv_port0 (ddr_wr_dv_port0),
13748 .ddr_rd_req_port0 (ddr_rd_req_port0),
13749 .ddr_rd_dv_port0 (ddr_rd_dv_port0),
13751 .ddr_wr_addr_port0(net_wr_addr_acp),
13752 .ddr_wr_data_port0(net_wr_data_acp),
13753 .ddr_wr_strb_port0(net_wr_strb_acp),
13754 .ddr_wr_bytes_port0(net_wr_bytes_acp),
13756 .ddr_rd_addr_port0(net_rd_addr_acp),
13757 .ddr_rd_bytes_port0(net_rd_bytes_acp),
13759 .ddr_rd_data_port0(ddr_rd_data_port0),
13761 .ddr_wr_qos_port0 (net_wr_qos_acp),
13762 .ddr_rd_qos_port0 (net_rd_qos_acp),
13765 /* Goes to port 1 of DDR */
13766 .ddr_wr_ack_port1 (ddr_wr_ack_port1),
13767 .ddr_wr_dv_port1 (ddr_wr_dv_port1),
13768 .ddr_rd_req_port1 (ddr_rd_req_port1),
13769 .ddr_rd_dv_port1 (ddr_rd_dv_port1),
13770 .ddr_wr_addr_port1(ddr_wr_addr_port1),
13771 .ddr_wr_data_port1(ddr_wr_data_port1),
13772 .ddr_wr_strb_port1(ddr_wr_strb_port1),
13773 .ddr_wr_bytes_port1(ddr_wr_bytes_port1),
13774 .ddr_rd_addr_port1(ddr_rd_addr_port1),
13775 .ddr_rd_data_port1(ddr_rd_data_port1),
13776 .ddr_rd_bytes_port1(ddr_rd_bytes_port1),
13777 .ddr_wr_qos_port1 (ddr_wr_qos_port1),
13778 .ddr_rd_qos_port1 (ddr_rd_qos_port1),
13780 /* Goes to port2 of DDR */
13781 .ddr_wr_ack_port2 (ddr_wr_ack_port2),
13782 .ddr_wr_dv_port2 (ddr_wr_dv_port2),
13783 .ddr_rd_req_port2 (ddr_rd_req_port2),
13784 .ddr_rd_dv_port2 (ddr_rd_dv_port2),
13785 .ddr_wr_addr_port2(ddr_wr_addr_port2),
13786 .ddr_wr_data_port2(ddr_wr_data_port2),
13787 .ddr_wr_strb_port2(ddr_wr_strb_port2),
13788 .ddr_wr_bytes_port2(ddr_wr_bytes_port2),
13789 .ddr_rd_addr_port2(ddr_rd_addr_port2),
13790 .ddr_rd_data_port2(ddr_rd_data_port2),
13791 .ddr_rd_bytes_port2(ddr_rd_bytes_port2),
13792 .ddr_wr_qos_port2 (ddr_wr_qos_port2),
13793 .ddr_rd_qos_port2 (ddr_rd_qos_port2),
13795 /* Goes to port3 of DDR */
13796 .ddr_wr_ack_port3 (ddr_wr_ack_port3),
13797 .ddr_wr_dv_port3 (ddr_wr_dv_port3),
13798 .ddr_rd_req_port3 (ddr_rd_req_port3),
13799 .ddr_rd_dv_port3 (ddr_rd_dv_port3),
13800 .ddr_wr_addr_port3(ddr_wr_addr_port3),
13801 .ddr_wr_data_port3(ddr_wr_data_port3),
13802 .ddr_wr_strb_port3(ddr_wr_strb_port3),
13803 .ddr_wr_bytes_port3(ddr_wr_bytes_port3),
13804 .ddr_rd_addr_port3(ddr_rd_addr_port3),
13805 .ddr_rd_data_port3(ddr_rd_data_port3),
13806 .ddr_rd_bytes_port3(ddr_rd_bytes_port3),
13807 .ddr_wr_qos_port3 (ddr_wr_qos_port3),
13808 .ddr_rd_qos_port3 (ddr_rd_qos_port3)
13812 processing_system7_vip_v1_0_10_ocmc ocmc (
13814 .sw_clk(net_sw_clk),
13816 /* Goes to port 0 of OCM */
13817 .ocm_wr_ack_port0 (ocm_wr_ack_port0),
13818 .ocm_wr_dv_port0 (ocm_wr_dv_port0),
13819 .ocm_rd_req_port0 (ocm_rd_req_port0),
13820 .ocm_rd_dv_port0 (ocm_rd_dv_port0),
13822 .ocm_wr_addr_port0(net_wr_addr_acp),
13823 .ocm_wr_data_port0(net_wr_data_acp),
13824 .ocm_wr_strb_port0(net_wr_strb_acp),
13825 .ocm_wr_bytes_port0(net_wr_bytes_acp),
13827 .ocm_rd_addr_port0(net_rd_addr_acp),
13828 .ocm_rd_bytes_port0(net_rd_bytes_acp),
13830 .ocm_rd_data_port0(ocm_rd_data_port0),
13832 .ocm_wr_qos_port0 (net_wr_qos_acp),
13833 .ocm_rd_qos_port0 (net_rd_qos_acp),
13835 /* Goes to port 1 of OCM */
13836 .ocm_wr_ack_port1 (ocm_wr_ack_port1),
13837 .ocm_wr_dv_port1 (ocm_wr_dv_port1),
13838 .ocm_rd_req_port1 (ocm_rd_req_port1),
13839 .ocm_rd_dv_port1 (ocm_rd_dv_port1),
13840 .ocm_wr_addr_port1(ocm_wr_addr_port1),
13841 .ocm_wr_data_port1(ocm_wr_data_port1),
13842 .ocm_wr_strb_port1(ocm_wr_strb_port1),
13843 .ocm_wr_bytes_port1(ocm_wr_bytes_port1),
13844 .ocm_rd_addr_port1(ocm_rd_addr_port1),
13845 .ocm_rd_data_port1(ocm_rd_data_port1),
13846 .ocm_rd_bytes_port1(ocm_rd_bytes_port1),
13847 .ocm_wr_qos_port1(ocm_wr_qos_port1),
13848 .ocm_rd_qos_port1(ocm_rd_qos_port1)
13852 processing_system7_vip_v1_0_10_regc regc (
13854 .sw_clk(net_sw_clk),
13856 /* Goes to port 0 of REG */
13857 .reg_rd_req_port0 (reg_rd_req_port0),
13858 .reg_rd_dv_port0 (reg_rd_dv_port0),
13859 .reg_rd_addr_port0(net_rd_addr_acp),
13860 .reg_rd_bytes_port0(net_rd_bytes_acp),
13861 .reg_rd_data_port0(reg_rd_data_port0),
13862 .reg_rd_qos_port0 (net_rd_qos_acp),
13864 /* Goes to port 1 of REG */
13865 .reg_rd_req_port1 (reg_rd_req_port1),
13866 .reg_rd_dv_port1 (reg_rd_dv_port1),
13867 .reg_rd_addr_port1(reg_rd_addr_port1),
13868 .reg_rd_data_port1(reg_rd_data_port1),
13869 .reg_rd_bytes_port1(reg_rd_bytes_port1),
13870 .reg_rd_qos_port1(reg_rd_qos_port1)
13874 /* include axi_gp port instantiations */
13875 `include "processing_system7_vip_v1_0_10_axi_gp.v"
13877 /* include axi_hp port instantiations */
13878 `include "processing_system7_vip_v1_0_10_axi_hp.v"
13880 /* include axi_acp port instantiations */
13881 `include "processing_system7_vip_v1_0_10_axi_acp.v"