?? initfc1.vri
字號:
receive_fc2_dllp(fc2_p_rcvd,fc2_np_rcvd,fc2_cpl_rcvd); dllp_type = "initfc1_p"; printf("Sending out an InitFC2_P packet.\n"); flowcntrl_1 = new(*,*,*,8'b11000000); flowcntrl_1.build_packet(dllp_type); if (!semaphore_get(WAIT,my_semaphore,1)) error ("Semaphore_get returned 0\n"); for(index=0; index <= 3; index ++) { @ (posedge CLOCK); if(index==0){ //ti_phy_top.rxdatak16 = 2'b01; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[0][7:0],8'h5C}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C}); printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C); } else if(index==1){ //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]}); printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]); } else if(index==2){ //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]}); printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]); } else if(index==3){ //ti_phy_top.rxdatak16 = 2'b10; //ti_phy_top.rxdata16 = {8'hFD,flowcntrl_1.temp_packet[1][15:8]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]}); printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]); } } @ (posedge CLOCK); //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = 1'b0; semaphore_put (my_semaphore, 1); dllp_type = "initfc1_np"; printf("Sending out an InitFC2_NP packet.\n"); flowcntrl_1 = new(8'h00,8'h00,8'h01,8'b11010000); flowcntrl_1.build_packet(dllp_type); if (!semaphore_get(WAIT,my_semaphore,1)) error ("Semaphore_get returned 0\n"); for(index=0; index <= 3; index ++) { @ (posedge CLOCK); if(index==0){ //ti_phy_top.rxdatak16 = 2'b01; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[0][7:0],8'h5C}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C}); printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C); } else if(index==1){ //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]}); printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]); } else if(index==2){ //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]}); printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]); } else if(index==3){ //ti_phy_top.rxdatak16 = 2'b10; //ti_phy_top.rxdata16 = {8'hFD,flowcntrl_1.temp_packet[1][15:8]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]}); printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]); } } @ (posedge CLOCK); //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = 1'b0; semaphore_put (my_semaphore, 1); dllp_type = "initfc1_cpl"; printf("Sending out an InitFC2_NP packet.\n"); flowcntrl_1 = new(8'h40,8'h00,8'h01,8'b11100000); flowcntrl_1.build_packet(dllp_type); if (!semaphore_get(WAIT,my_semaphore,1)) error ("Semaphore_get returned 0\n"); for(index=0; index <= 3; index ++) { @ (posedge CLOCK); if(index==0){ //ti_phy_top.rxdatak16 = 2'b01; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[0][7:0],8'h5C}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b01,flowcntrl_1.temp_packet[0][7:0],8'h5C}); printf("DLLP bytes SDB & DLL_TYPE %h%h.\n",flowcntrl_1.temp_packet[0][7:0],8'h5C); } else if(index==1){ //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]}); printf("DLLP bytes 2 & 1 %h%h.\n",flowcntrl_1.temp_packet[0][23:16],flowcntrl_1.temp_packet[0][15:8]); } else if(index==2){ //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = {flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b00,flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]}); printf("DLLP CRC and byte 3 %h%h.\n",flowcntrl_1.temp_packet[1][7:0],flowcntrl_1.temp_packet[0][31:24]); } else if(index==3){ //ti_phy_top.rxdatak16 = 2'b10; //ti_phy_top.rxdata16 = {8'hFD,flowcntrl_1.temp_packet[1][15:8]}; //adding mailbox mailbox_put (rx_data_mailbox, {2'b10,8'hFD,flowcntrl_1.temp_packet[1][15:8]}); printf("DLLP STP and CRC %h%h.\n",8'hFD,flowcntrl_1.temp_packet[1][15:8]); } } @ (posedge CLOCK); INITFC_DONE = fc1_completed & fc2_completed; //ti_phy_top.rxdatak16 = 2'b00; //ti_phy_top.rxdata16 = 1'b0; semaphore_put (my_semaphore, 1); } } task receive_fc1_dllp (var bit fc1_p_rcvd, var bit fc1_np_rcvd, var bit fc1_cpl_rcvd,var bit [7:0] ph_cl, var bit [11:0] pd_cl, var bit [7:0] cplh_cl,var bit [11:0] cpld_cl,var bit [7:0] nph_cl,var bit [11:0] npd_cl) { integer ret; bit [47:0] receive_dll_packet; while (~(fc1_p_rcvd & fc1_np_rcvd & fc1_cpl_rcvd)) { ret = mailbox_get (WAIT,dllp_mailbox,receive_dll_packet,CHECK); if(receive_dll_packet[7:0] == 8'h40){ fc1_p_rcvd = 1'b1; ph_cl = {receive_dll_packet[13:8],receive_dll_packet[23:22]}; pd_cl = {receive_dll_packet[19:16],receive_dll_packet[31:24]}; } else if(receive_dll_packet[7:0] == 8'h50){ fc1_np_rcvd = 1'b1; nph_cl = {receive_dll_packet[13:8],receive_dll_packet[23:22]}; npd_cl = {receive_dll_packet[19:16],receive_dll_packet[31:24]}; } else if(receive_dll_packet[7:0] == 8'h60){ fc1_cpl_rcvd = 1'b1; cplh_cl = {receive_dll_packet[13:8],receive_dll_packet[23:22]}; cpld_cl = {receive_dll_packet[19:16],receive_dll_packet[31:24]}; } printf ("InitFC1 DLL PACKET (%0h) taken out of dll mailbox\n",receive_dll_packet); }}task receive_fc2_dllp (var bit fc2_p_rcvd, var bit fc2_np_rcvd, var bit fc2_cpl_rcvd) { integer ret; bit [47:0] receive_dll_packet; while (~(fc2_p_rcvd | fc2_np_rcvd | fc2_cpl_rcvd)) { ret = mailbox_get (WAIT,dllp_mailbox,receive_dll_packet,CHECK); if(receive_dll_packet[7:0] == 8'hC0){ fc2_p_rcvd = 1'b1; } else if(receive_dll_packet[7:0] == 8'hD0){ fc2_np_rcvd = 1'b1; } else if(receive_dll_packet[7:0] == 8'hE0){ fc2_cpl_rcvd = 1'b1; } printf ("InitFC2 DLL PACKET (%0h) taken out of dll mailbox\n",receive_dll_packet); }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -