From 0aa00781e5baba1fb47f4040d400ce35e8561cd1 Mon Sep 17 00:00:00 2001 From: bacon Date: Wed, 12 Feb 2025 01:17:54 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=BB=A3=E7=A0=81=EF=BC=8C?= =?UTF-8?q?=E8=B0=83=E8=AF=95=E5=BB=B6=E8=BF=9F=E9=87=8A=E6=94=BE=EF=BC=9B?= =?UTF-8?q?=E5=AF=B9=E6=AF=94=E6=B3=A2=E5=BD=A2=EF=BC=8C=E5=BB=B6=E8=BF=9F?= =?UTF-8?q?=E9=87=8A=E6=94=BE=E5=8A=9F=E8=83=BD=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tb/sw/src/halfLvdsMacSvr.c | 38 ++++++++++++++++++++++++++------------ tb/verilator/sim_main.cpp | 2 +- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/tb/sw/src/halfLvdsMacSvr.c b/tb/sw/src/halfLvdsMacSvr.c index fabca28..a5a2ccc 100644 --- a/tb/sw/src/halfLvdsMacSvr.c +++ b/tb/sw/src/halfLvdsMacSvr.c @@ -77,7 +77,7 @@ uint32_t HLM_poll(uint32_t mode) { if (mode == WORKMODE_MASTER) { - uint32_t tx_pkt_len = 128; + uint32_t tx_pkt_len = 256; uint32_t rx_pkt_len = 0; uint32_t rx_start = 0; uint32_t status; @@ -94,7 +94,7 @@ uint32_t HLM_poll(uint32_t mode) //开始发送工作 *tx0_txLen = tx_pkt_len + 4; - *tx0_txFifo = (tx_pkt_len << 20) | (0 << 16) | 0; + *tx0_txFifo = (tx_pkt_len << 20) | 0; uint32_t tx_index = 0; uint32_t rx_index = 0; @@ -120,6 +120,14 @@ uint32_t HLM_poll(uint32_t mode) tx_index++; } + status = *HLM_status; + + if (((tx_index * 4) < tx_pkt_len) && (!(status & HLM_TX0_FIFO_FULL))) + { + *tx0_txFifo = tx_data_ptr[tx_index]; + tx_index++; + } + if ((rx_start) && (status & HLM_RX1_VALID)) { rx_data_ptr[rx_index] = *rx1_rxFifo; @@ -130,6 +138,8 @@ uint32_t HLM_poll(uint32_t mode) if (rx_pkt_len <= (rx_index * 4)) { rx_start = 0; + rx_index = 0; + break; } } @@ -139,15 +149,6 @@ uint32_t HLM_poll(uint32_t mode) rx_start = 1; rx_index = 0; } - - #if 0 - if (isr_flag[CDR_INT_RX1_FIFO_ENQ]) - { - isr_flag[CDR_INT_RX1_FIFO_ENQ] = 0; - MST_RX_BUF[rx_index] = *rx1_rxFifo; - rx_index++; - } - #endif } } else if (mode == WORKMODE_SLAVE) @@ -158,6 +159,12 @@ uint32_t HLM_poll(uint32_t mode) uint32_t rx_start = 0; uint32_t status; + *rx0_rxTxPair = 1; + *rx0_rxTimerAim = 0; //240; + *rx1_rxTxPair = 0; + *rx1_rxTimerAim = 0; + *plic_enable_0_31 = 0; + while (1) { @@ -180,13 +187,20 @@ uint32_t HLM_poll(uint32_t mode) rx_start = 0; } } - + else + { + if (status & HLM_RX0_VALID) + rx_start = 1; + } +#if 0 //rx0 下行 if (isr_flag[CDR_INT_RX0START]) { isr_flag[CDR_INT_RX0START] = 0; rx_start = 1; + } +#endif } } else diff --git a/tb/verilator/sim_main.cpp b/tb/verilator/sim_main.cpp index 55999c9..4af8d9f 100644 --- a/tb/verilator/sim_main.cpp +++ b/tb/verilator/sim_main.cpp @@ -140,7 +140,7 @@ int main(int argc, char **argv, char **env) { #endif if ( flag_limitEnable ) { - if ( main_cycle > 30000 ){ + if ( main_cycle > 45000 ){ std::cout << "Timeout!!!!!" << std::endl; sim_exit(); return -1;