📄 pci_exp_usrapp_tx.v
字号:
lower_addr_, DATA_STORE[0], DATA_STORE[1], DATA_STORE[2], DATA_STORE[3] }; trn_tsof_n <= #(Tcq) 1; if (_len != 1) begin for (_j = 4; _j < (_len * 4); _j = _j + 8) begin TSK_TX_SYNCHRONIZE(1, 0); trn_td <= #(Tcq) { DATA_STORE[_j + 0], DATA_STORE[_j + 1], DATA_STORE[_j + 2], DATA_STORE[_j + 3], DATA_STORE[_j + 4], DATA_STORE[_j + 5], DATA_STORE[_j + 6], DATA_STORE[_j + 7] }; if ((_j + 7) >= ((_len * 4) - 1)) begin trn_teof_n <= #(Tcq) 0; if (ep_) trn_terrfwd_n <= #(Tcq) 0; if (((_len - 1) % 2) == 0) trn_trem_n <= #(Tcq) 8'h00; else trn_trem_n <= #(Tcq) 8'h0f; end end end else begin trn_teof_n <= #(Tcq) 0; trn_trem_n <= #(Tcq) 8'h00; end TSK_TX_SYNCHRONIZE(1, 1); trn_teof_n <= #(Tcq) 1; trn_terrfwd_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 1; end endtask // TSK_TX_COMPLETION_DATA /************************************************************ Task : TSK_TX_MESSAGE Inputs : Tag, TC, Address, Message Routing, Message Code Outputs : Transaction Tx Interface Signaling Description : Generates a Message TLP *************************************************************/ task TSK_TX_MESSAGE; input [7:0] tag_; input [2:0] tc_; input [9:0] len_; input [63:0] data_; input [2:0] message_rtg_; input [7:0] message_code_; begin if (trn_lnk_up_n) begin $display("[%t] : Trn interface is MIA", $realtime); $finish(1); end TSK_TX_SYNCHRONIZE(0, 0); trn_td <= #(Tcq) { 1'b0, 2'b01, {{2'b10}, {message_rtg_}}, 1'b0, tc_, 4'b0000, 1'b0, 1'b0, 2'b00, 2'b00, 10'b0, // 32 COMPLETER_ID_CFG, tag_, message_code_ // 64 }; trn_tsof_n <= #(Tcq) 0; trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 0 ; TSK_TX_SYNCHRONIZE(1, 0); trn_td <= #(Tcq) { data_ }; trn_tsof_n <= #(Tcq) 1; trn_teof_n <= #(Tcq) 0; trn_trem_n <= #(Tcq) 8'h00; TSK_TX_SYNCHRONIZE(1, 1); trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 1; end endtask // TSK_TX_MESSAGE /************************************************************ Task : TSK_TX_MESSAGE_DATA Inputs : Tag, TC, Address, Message Routing, Message Code Outputs : Transaction Tx Interface Signaling Description : Generates a Message Data TLP *************************************************************/ task TSK_TX_MESSAGE_DATA; input [7:0] tag_; input [2:0] tc_; input [9:0] len_; input [63:0] data_; input [2:0] message_rtg_; input [7:0] message_code_; reg [10:0] _len; integer _j; begin if (len_ == 0) _len = 1024; else _len = len_; if (trn_lnk_up_n) begin $display("[%t] : Trn interface is MIA", $realtime); $finish(1); end TSK_TX_SYNCHRONIZE(0, 0); trn_td <= #(Tcq) { 1'b0, 2'b11, {{2'b10}, {message_rtg_}}, 1'b0, tc_, 4'b0000, 1'b0, 1'b0, 2'b00, 2'b00, len_, // 32 COMPLETER_ID_CFG, tag_, message_code_ // 64 }; trn_tsof_n <= #(Tcq) 0; trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 0 ; TSK_TX_SYNCHRONIZE(1, 0); trn_td <= #(Tcq) { data_ }; trn_tsof_n <= #(Tcq) 1; for (_j = 0; _j < (_len * 4); _j = _j + 8) begin TSK_TX_SYNCHRONIZE(1, 0); trn_td <= #(Tcq) { DATA_STORE[_j + 0], DATA_STORE[_j + 1], DATA_STORE[_j + 2], DATA_STORE[_j + 3], DATA_STORE[_j + 4], DATA_STORE[_j + 5], DATA_STORE[_j + 6], DATA_STORE[_j + 7] }; if ((_j + 7) >= ((_len * 4) - 1)) begin trn_teof_n <= #(Tcq) 0; if ((_len % 2) == 0) trn_trem_n <= #(Tcq) 8'h00; else trn_trem_n <= #(Tcq) 8'h0f; end end TSK_TX_SYNCHRONIZE(1, 1); trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 1; end endtask // TSK_TX_MESSAGE_DATA /************************************************************ Task : TSK_TX_IO_READ Inputs : Tag, Address Outputs : Transaction Tx Interface Signaling Description : Generates a IO Read TLP *************************************************************/ task TSK_TX_IO_READ; input [7:0] tag_; input [31:0] addr_; input [3:0] first_dw_be_; begin if (trn_lnk_up_n) begin $display("[%t] : Trn interface is MIA", $realtime); $finish(1); end TSK_TX_SYNCHRONIZE(0, 0); trn_td <= #(Tcq) { 1'b0, 2'b00, 5'b00010, 1'b0, 3'b000, 4'b0000, 1'b0, 1'b0, 2'b00, 2'b00, 10'b1, // 32 COMPLETER_ID_CFG, tag_, 4'b0, first_dw_be_ // 64 }; trn_tsof_n <= #(Tcq) 0; trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 0 ; TSK_TX_SYNCHRONIZE(1, 0); trn_td <= #(Tcq) { addr_[31:2], 2'b00, 32'b0 }; trn_tsof_n <= #(Tcq) 1; trn_teof_n <= #(Tcq) 0; trn_trem_n <= #(Tcq) 8'h0F; trn_tsrc_rdy_n <= #(Tcq) 0 ; TSK_TX_SYNCHRONIZE(1, 1); trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 1; end endtask // TSK_TX_IO_READ /************************************************************ Task : TSK_TX_IO_WRITE Inputs : Tag, Address, Data Outputs : Transaction Tx Interface Signaling Description : Generates a IO Read TLP *************************************************************/ task TSK_TX_IO_WRITE; input [7:0] tag_; input [31:0] addr_; input [3:0] first_dw_be_; input [31:0] data_; begin if (trn_lnk_up_n) begin $display("[%t] : Trn interface is MIA", $realtime); $finish(1); end TSK_TX_SYNCHRONIZE(0, 0); trn_td <= #(Tcq) { 1'b0, 2'b10, 5'b00010, 1'b0, 3'b000, 4'b0000, 1'b0, 1'b0, 2'b00, 2'b00, 10'b1, // 32 COMPLETER_ID_CFG, tag_, 4'b0, first_dw_be_ // 64 }; trn_tsof_n <= #(Tcq) 0; trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 0 ; TSK_TX_SYNCHRONIZE(1, 0); trn_td <= #(Tcq) { addr_[31:2], 2'b00, data_[7:0], data_[15:8], data_[23:16], data_[31:24] }; trn_tsof_n <= #(Tcq) 1; trn_teof_n <= #(Tcq) 0; trn_trem_n <= #(Tcq) 8'h00; trn_tsrc_rdy_n <= #(Tcq) 0 ; TSK_TX_SYNCHRONIZE(1, 1); trn_teof_n <= #(Tcq) 1; trn_trem_n <= #(Tcq) 0; trn_tsrc_rdy_n <= #(Tcq) 1; end endtask // TSK_TX_IO_WRITE /************************************************************ Task : TSK_TX_SYNCHRONIZE Inputs : None
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -