合并bacon_dev分支的修改:1.协议基本运转;2.增加make debug_hlm

This commit is contained in:
2025-02-27 12:55:34 +08:00
parent b167d3affa
commit be7adef4aa
14 changed files with 1060 additions and 291 deletions

View File

@@ -238,10 +238,16 @@ sw:
python3 ./tb/sw/bin_to_hex.py
python3 ./tb/sw/bin_to_coe.py
$(TARGET)-size ./tb/sw/build/mstTest.elf
$(TARGET)-size ./tb/sw/build/slvTest.elf
fst:
gtkwave ./tb/build/wave.fst &
debug_hlm:
gtkwave -S ./tb/sw/src/view_signal.tcl ./tb/build/wave.fst 1>/dev/null 2>&1 &
VSimBack:

View File

@@ -14,6 +14,16 @@ SECTIONS
_TEXT_END_ = .;
}
/*. = 0x40000800;*/
.trap_entry : ALIGN(0x100) { *(.trap_entry)}
.rodata : ALIGN(0x100) {
_RODATA_START_ = .;
*(.rodata)
*(.rodata*)
_RODATA_END_ = .;
}
.data : ALIGN(0x100) {
_DATA_START_ = .;
*(.data)
@@ -30,13 +40,9 @@ SECTIONS
_BSS_END_ = .;
}
.rodata : ALIGN(0x100) {
_RODATA_START_ = .;
*(.rodata)
*(.rodata*)
_RODATA_END_ = .;
.sys_stack : ALIGN(0x100) {
_SYS_STACK_START_ = .;
*(.sys_stack*)
_SYS_STACK_END_ = .;
}
/*. = 0x40000800;*/
.trap_entry : ALIGN(0x100) { *(.trap_entry)}
}

View File

@@ -5,6 +5,8 @@
#include "halfLvdsMacSvr.h"
#include "plic.h"
uint8_t sys_stack[STACK_SIZE] __attribute__((aligned(0x100), section(".sys_stack")));
//-------------------------------------------------------------------
//internal function
static uint32_t init_plic(void);
@@ -33,6 +35,7 @@ void main()
uint32_t init_plic(void)
{
#if 0
/*初始化plic*/
*plic_enable_0_31 = 1 << CDR_INT_TX0END
//| 1 << CDR_INT_TX1END
@@ -68,7 +71,7 @@ uint32_t init_plic(void)
*plic_threshold_0 = 0;
#endif
return 0;
}

View File

@@ -8,6 +8,8 @@
#include "sysDef.h"
#include "plic.h"
uint8_t sys_stack[STACK_SIZE] __attribute__((aligned(0x100), section(".sys_stack")));
static void error();
static uint32_t init_plic(void);
@@ -16,12 +18,6 @@ void main()
{
init_plic();
//复位脉冲
*tx0_softReset = 1;
*tx1_softReset = 1;
*rx0_softReset = 1;
*rx1_softReset = 1;
//tx0 下行
//tx1 上行
@@ -42,7 +38,7 @@ void error() {
uint32_t init_plic(void)
{
#if 0
/*初始化plic*/
*plic_enable_0_31 = 1 << CDR_INT_TX0END
| 1 << CDR_INT_TX1END
@@ -77,7 +73,7 @@ uint32_t init_plic(void)
plic_priority[CDR_INT_RX1_FIFO_ENQ] = 1;
*plic_threshold_0 = 0;
#endif
return 0;
}

View File

@@ -5,6 +5,12 @@
#include "plic.h"
#include "clint.h"
#define DETECT_DEVICE_PKT_LEN 4
#define MAGIC_NUM 0xa53fd1a0U
#define DETECT_DEV_INTERVAL ((40)/CLINT_MTIME_TICK_PERIOD)
//-------------------------------------------------------------------
uint8_t MST_TX_BUF[TX_BUF_NUM * TX_BUF_MAX_LEN] __attribute__((aligned(32)));
uint8_t MST_RX_BUF[RX_BUF_NUM * RX_BUF_MAX_LEN] __attribute__((aligned(32)));
@@ -15,95 +21,201 @@ extern const uint8_t int_svr_code[];
uint32_t (*sys_call)(uint32_t no, ...);
static uint32_t HLM_slave_poll(void);
volatile uint32_t exti_isr_flag[32] = {0};
uint32_t HLM_poll(uint32_t mode)
{
sys_call = (void *)int_svr_code;
//复位脉冲
*tx0_softReset = 1;
*tx1_softReset = 1;
*rx0_softReset = 1;
*rx1_softReset = 1;
//*tx0_softReset = 1;
i_tx0_softReset(1);
//*tx1_softReset = 1;
i_tx1_softReset(1);
//*rx0_softReset = 1;
i_rx0_softReset(1);
//*rx1_softReset = 1;
i_rx1_softReset(1);
if (mode == WORKMODE_MASTER)
{
uint32_t tx_pkt_len = 1024;
uint32_t seq = 0;
while (1)
{
uint32_t tx_pkt_len;
uint32_t rx_pkt_len = 0;
uint32_t rx_start = 0;
uint32_t status;
uint32_t is_exit = 0;
uint32_t intflag;
uint32_t is_tx_crc;
uint32_t is_rx_crc;
uint32_t recv_valid;
uint32_t i;
uint32_t *tx_data_ptr = (uint32_t *)MST_TX_BUF;
uint32_t *rx_data_ptr = (uint32_t *)MST_RX_BUF;
//准备数据
for (i = 0; i < tx_pkt_len; i++)
MST_TX_BUF[i] = i;
if (seq == 0)
{
is_tx_crc = 0;
is_rx_crc = 0;
tx_pkt_len = DETECT_DEVICE_PKT_LEN + 4;
tx_data_ptr[0] = (DETECT_DEVICE_PKT_LEN << 20) | 1;
tx_data_ptr[1] = MAGIC_NUM;
}
else if (seq == 1)
{
is_tx_crc = 1;
is_rx_crc = 1;
tx_pkt_len = 256 + 4;
tx_data_ptr[0] = ((tx_pkt_len - 4) << 20) | 2;
for (i = 4; i < (tx_pkt_len - 4 * is_tx_crc); i++)
MST_TX_BUF[i] = i;
}
else
{
is_tx_crc = 1;
is_rx_crc = 1;
tx_pkt_len = 5 * 4 + 4;
//准备数据
tx_data_ptr[0] = ((tx_pkt_len - 4) << 20) | 2;
tx_data_ptr[1] = 0; //64bit time hi
tx_data_ptr[2] = 0; //64bit time lo
tx_data_ptr[3] = 0; //delta time
tx_data_ptr[4] = 0; //ctr | dev_num
//tx_data_ptr[5] = 0; //crc
}
//开始发送工作
*tx0_txLen = tx_pkt_len + 4;
*tx0_txFifo = (tx_pkt_len << 20) | 0;
i_tx0_txLen(tx_pkt_len);
uint32_t tx_index = 0;
uint32_t rx_index = 0;
uint32_t tx_len;
for (i = 0; i < HLM_TX_FIFO_LEN - 1; i++)
tx_len = is_tx_crc? (tx_pkt_len - 4):tx_pkt_len;
//i_tx0_clear_timer(0);
for (i = 0; i < HLM_TX_FIFO_LEN; i++)
{
if ((tx_index * 4) < tx_pkt_len)
if ((tx_index * 4) < tx_len)
{
*tx0_txFifo = tx_data_ptr[tx_index];
i_tx0_txFifo(tx_data_ptr[tx_index]);
tx_index++;
}
else
{
if (is_tx_crc)
{
uint32_t crc;
i_tx0_txCrc(crc);
i_tx0_txFifo(crc);
tx_index++;
}
break;
}
}
while (!is_exit)
{
status = *HLM_status;
uint32_t tx_times;
for (i = 0; i < HLM_TX_FIFO_LEN - HLM_TX0_FIFO_LEFT(status); i++)
//i_tx1_softReset(1);
i_hlm_status(status);
i_hlm_read_intflag(intflag);
i_hlm_clear_intflag(intflag);
tx_times = HLM_TX_FIFO_LEN - HLM_TX0_FIFO_LEFT(status);
for (i = 0; i < tx_times; i++)
{
if ((tx_index * 4) < tx_pkt_len)
if ((tx_index * 4) < tx_len)
{
*tx0_txFifo = tx_data_ptr[tx_index];
i_tx0_txFifo(tx_data_ptr[tx_index]);
tx_index++;
}
else
{
if (is_tx_crc && ((tx_index * 4) == tx_len))
{
uint32_t crc;
i_tx0_txCrc(crc);
i_tx0_txFifo(crc);
tx_index++;
}
break;
}
}
for (i = 0; i < HLM_RX1_FIFO_LEFT(status); i++)
{
//if ((rx_start) && (status & HLM_RX1_VALID))
if (rx_start)
{
rx_data_ptr[rx_index] = *rx1_rxFifo;
if ((rx_pkt_len - 4) == (rx_index * 4))
{
uint32_t crc;
i_rx1_rxCrc(crc);
i_rx1_rxFifo(rx_data_ptr[rx_index]);
if (is_rx_crc)
while (crc != rx_data_ptr[rx_index]);
}
else
{
i_rx1_rxFifo(rx_data_ptr[rx_index]);
}
if (rx_index == 0)
{
rx_pkt_len = (rx_data_ptr[rx_index] >> 20) + 4;
}
rx_index++;
if (rx_pkt_len <= (rx_index * 4))
if (rx_pkt_len < (rx_index * 4))
{
rx_start = 0;
rx_index = 0;
is_exit = 1;
break;
}
}
}
if (exti_isr_flag[CDR_INT_RX1START])
//if ((rx_start == 0) && (status & HLM_RX1_VALID))
if (intflag & HLM_INT_RX1_START)
{
exti_isr_flag[CDR_INT_RX1START] = 0;
//exti_isr_flag[CDR_INT_RX1START] = 0;
rx_start = 1;
rx_index = 0;
}
if (intflag & HLM_INT_RX1_END)
{
is_exit = 1;
i_rx1_softReset(1);
i_tx0_softReset(1);
}
}
if (seq == 0)
{
if ((rx_pkt_len == 8) && ((rx_data_ptr[0] & 0xff) == 0x1) && (rx_data_ptr[1] == MAGIC_NUM))
{
seq = 1;
}
}
else if (seq == 1)
{
}
}
}
@@ -118,23 +230,19 @@ uint32_t HLM_poll(uint32_t mode)
return 0;
}
#define DETECT_DEVICE_PKT_LEN 4
#define DETECT_DEVICE_PKT_TX_LEN (DETECT_DEVICE_PKT_LEN + 4)
#define MAGIC_NUM 0xa53fd1a0U
#define DETECT_DEV_INTERVAL ((200)/CLINT_MTIME_TICK_PERIOD)
uint32_t HLM_slave_2streams_poll(uint32_t protocol, uint32_t data, uint32_t is_crc);
uint32_t HLM_slave_1stream_poll(uint32_t protocol, uint32_t data, uint32_t is_crc);
uint32_t HLM_slave_poll(void)
{
uint32_t rx_index = 0;
uint32_t tx_pkt_len;
uint32_t rx_pkt_len = 0;
uint32_t down_rx_work = 0;
uint32_t detect_work = 0;
uint32_t downstream_work = 0;
uint32_t hlm_status;
uint32_t is_terminal = 1;
uint32_t detect_result = 0;
uint32_t intflag;
uint32_t protocol = 0;
uint64_t stamp_time;
uint64_t cur_time;
@@ -144,17 +252,19 @@ uint32_t HLM_slave_poll(void)
int i;
*rx0_rxTxPair = 1;
*rx0_rxTimerAim = 0;// 280;
*rx1_rxTxPair = 0;
*rx1_rxTimerAim = 0;
//*rx0_rxTxPair = 1;
i_rx0_txPair(1);
i_rx0_limitTime(0);
i_rx1_txPair(0);
i_rx1_limitTime(0);
//*rx0_rxTimerAim = 0; //240;
//*rx1_rxTxPair = 0;
//*rx1_rxTimerAim = 0;
*plic_enable_0_31 = 0;
stamp_time = read_mtimer();
//set_mtimer(150);
//enable_mtimer_int();
stamp_time = 0; //read_mtimer();
#ifdef __riscv_e
sys_call(SYS_SLAVE_WORK);
@@ -164,90 +274,108 @@ uint32_t HLM_slave_poll(void)
{
if (is_terminal)
{//是终节点
hlm_status = *HLM_status;
if ((!down_rx_work) && (hlm_status & HLM_RX0_VALID))
//status = *HLM_status;
i_hlm_status(hlm_status);
i_hlm_read_intflag(intflag);
//i_hlm_clear_intflag(intflag);
//if ((!downstream_work) && (hlm_status & HLM_RX0_VALID))
// downstream_work = 1;
if (intflag & HLM_INT_RX0_START)
{
down_rx_work = 1;
downstream_work = 1;
i_hlm_clear_intflag(HLM_INT_RX0_START);
}
for (i = 0; i < HLM_RX0_FIFO_LEFT(hlm_status); i++)
if (downstream_work && (hlm_status & HLM_RX0_VALID))
{
uint32_t data;
if (down_rx_work)
{//处理上行接收
data = *rx0_rxFifo;
if (rx_index == 0)
i_rx0_rxFifo(data);
protocol = (data & 0xff);
if ((protocol == 2) && (detect_result) && (detect_work == 0))
{
rx_pkt_len = (data >> 20) + 4;
*tx1_txLen = rx_pkt_len;
//rx_pkt_len += 4; //最后是一个0,接收入队列但不写入tx_fifo
}
rx_index++;
if (rx_pkt_len >= (rx_index * 4))
{
*tx1_txFifo = data;
HLM_slave_2streams_poll(protocol, data, 0);
}
else
{
down_rx_work = 0;
rx_index = 0;
//*rx0_softReset = 1;
break;
HLM_slave_1stream_poll(protocol, data, 0);
}
}
else
break;
}
if (down_rx_work == 0)
{
if ((detect_work == 1))
if (detect_work == 1)
{
detect_work = 2;
*tx0_txLen = (DETECT_DEVICE_PKT_TX_LEN);
*tx0_txFifo = ((DETECT_DEVICE_PKT_LEN << 20) | 1);
*tx0_txFifo = detect_pkt;
//*tx0_txLen = DETECT_DEVICE_PKT_TX_LEN;
i_tx0_clear_timer(0);
i_tx0_txLen(DETECT_DEVICE_PKT_LEN + 4);
//*tx0_txFifo = (DETECT_DEVICE_PKT_LEN << 20) | 1;
i_tx0_txFifo(((DETECT_DEVICE_PKT_LEN << 20) | 1));
//*tx0_txFifo = detect_pkt;
i_tx0_txFifo(detect_pkt);
}
if ((detect_work == 2) && (HLM_RX1_FIFO_LEFT(hlm_status) >= 2))
if (detect_work == 2)
{
if (HLM_RX1_FIFO_LEFT(hlm_status) >= 2)
{
uint32_t data;
uint32_t num;
uint32_t dummy;
data = *rx1_rxFifo;
num = *rx1_rxFifo;
//data = *rx1_rxFifo;
i_rx1_rxFifo(data);
//num = *rx1_rxFifo;
i_rx1_rxFifo(num);
for (i = 0; i < HLM_RX1_FIFO_LEFT(hlm_status) - 2; i++)
dummy = *rx1_rxFifo;
{
//dummy = *rx1_rxFifo;
i_rx1_rxFifo(dummy);
}
*rx1_softReset = 1;
*tx0_softReset = 1;
//*rx1_softReset = 1;
i_rx1_softReset(1);
//*tx0_softReset = 1;
i_tx0_softReset(1);
if (((data & 0xff) == 0x1) && (num == MAGIC_NUM))
detect_result = 1;
else
detect_result = 0;
detect_work = 3;
detect_work = 0;
}
else
{
uint32_t t;
i_tx0_read_timer(t);
if (t >= 600)
{
i_rx1_softReset(1);
i_tx0_softReset(1);
detect_work = 0;
detect_result = 0;
}
}
}
if (detect_work == 0)
if ((detect_work == 0) && (downstream_work == 0))
{
cur_time = read_mtimer();
//i_tx0_read_timer(cur_time);
if ((cur_time - stamp_time) >= DETECT_DEV_INTERVAL)
{
stamp_time = cur_time;
detect_work = 1;
}
}
if ((detect_work == 3))
{
detect_work = 0;
}
}
}
else
{//不是终节点
@@ -259,3 +387,194 @@ uint32_t HLM_slave_poll(void)
}
uint32_t HLM_slave_1stream_poll(uint32_t protocol, uint32_t data, uint32_t is_crc)
{
uint32_t hlm_status;
uint32_t intflag;
uint32_t i;
uint32_t downstream_work = 1;
uint32_t upstream_work = 0;
uint32_t d_rx_index = 0;
uint32_t d_rx_pkt_len;
uint32_t u_rx_index = 0;
uint32_t u_rx_pkt_len = 0;
d_rx_pkt_len = (data >> 20) + 4;
i_tx1_txLen(d_rx_pkt_len);
i_tx1_txFifo(data);
d_rx_index++;
while (1)
{
i_hlm_status(hlm_status);
i_hlm_read_intflag(intflag);
i_hlm_clear_intflag(intflag);
for (i = 0; i < HLM_RX0_FIFO_LEFT(hlm_status); i++)
{
uint32_t data;
if (downstream_work)
{//处理下行接收
i_rx0_rxFifo(data);
d_rx_index++;
if (d_rx_pkt_len > (d_rx_index * 4))
{
i_tx1_txFifo(data);
}
else if (d_rx_pkt_len == (d_rx_index * 4))
{
i_tx1_txFifo(data);
}
else
{
downstream_work = 0;
d_rx_index = 0;
break;
}
}
else
break;
}
if (intflag & HLM_INT_TX1_END)
{
i_rx0_softReset(1);
i_tx1_softReset(1);
break;
}
}
}
#define HLM_Slave_2streams_down_poll(ds_work, index, pkt_len, intflag, status) \
do {\
if (status & HLM_RX0_VALID)\
{\
uint32_t data;\
if (ds_work)\
{/*处理下行接收*/ \
i_rx0_rxFifo(data);\
index++;\
if (pkt_len > (index))\
{\
i_tx0_txFifo(data);\
}\
else if (pkt_len == (index))\
{\
i_tx0_txFifo(data);\
}\
else\
{\
ds_work = 0;\
index = 0;\
}\
}\
}\
} while (0)
#define HLM_Slave_2streams_up_poll(us_work, index, pkt_len, intflag, status) \
do {\
if (status & HLM_RX1_VALID)\
{\
uint32_t data;\
if (us_work)\
{/*处理上行接收*/\
i_rx1_rxFifo(data);\
if (index == 0)\
{\
pkt_len = (data >> 20) + 4;\
i_tx1_txLen(pkt_len);\
pkt_len = (pkt_len >> 2);\
}\
index++;\
if (pkt_len > (index))\
{\
i_tx1_txFifo(data);\
}\
else if (pkt_len == (index))\
{\
i_tx1_txFifo(data);\
}\
else\
{\
us_work = 0;\
index = 0;\
/*is_work = 0;*/\
}\
}\
}\
} while (0)
uint32_t HLM_slave_2streams_poll(uint32_t protocol, uint32_t data, uint32_t is_crc)
{
uint32_t hlm_status;
uint32_t intflag;
uint32_t i;
uint32_t downstream_work = 1;
uint32_t upstream_work = 0;
uint32_t d_rx_index = 0;
uint32_t d_rx_pkt_len = 0;
uint32_t u_rx_index = 0;
uint32_t u_rx_pkt_len = 0;
//uint32_t is_work = 1;
d_rx_pkt_len = (data >> 20) + 4;
i_tx0_txLen(d_rx_pkt_len);
i_tx0_txFifo(data);
d_rx_pkt_len = (d_rx_pkt_len >> 2);
d_rx_index++;
while (1)
{
i_hlm_status(hlm_status);
i_hlm_read_intflag(intflag);
i_hlm_clear_intflag(intflag);
HLM_Slave_2streams_down_poll(downstream_work,
d_rx_index,
d_rx_pkt_len,
intflag,
hlm_status);
if (intflag & HLM_INT_RX1_START)
{
upstream_work = 1;
intflag = 0;
do {
i_hlm_status(hlm_status);
//i_hlm_read_intflag(intflag);
//i_hlm_clear_intflag(intflag);
HLM_Slave_2streams_down_poll(downstream_work,
d_rx_index,
d_rx_pkt_len,
intflag,
hlm_status);
HLM_Slave_2streams_up_poll(upstream_work,
u_rx_index,
u_rx_pkt_len,
intflag,
hlm_status);
} while ((upstream_work) || (downstream_work));
}
if (intflag & HLM_INT_TX1_END)
{
i_tx0_softReset(1);
i_tx1_softReset(1);
i_rx0_softReset(1);
i_rx1_softReset(1);
break;
}
}
return 0;
}

View File

@@ -73,7 +73,8 @@ init_func:
la x17, _rv32i_plic_handle
mv a0, x17
li x29, TL2CDR_BASE
//li x29, TL2CDR_BASE
ret
//
@@ -88,11 +89,13 @@ send_data_func:
//*tx0_txLen = 8 + tx_len; //前导+长度命令
mv x16, a2
addi x17, x16, 8
sw x17, TX0_WriteTxLen(REG_TL2CDR_BASE)
//sw x17, TX0_WriteTxLen(REG_TL2CDR_BASE)
i_tx0_txLen(x17)
//*tx0_txFifo = (tx_len << 20) | (0 << 16) | 0x0000;
slli x17, x16, 20
sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE)
//sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE)
i_tx0_txFifo(x17)
li a0, 1
ret
@@ -131,23 +134,30 @@ slave_work_func:
#else
slave_work_func:
1:
lw x18, HLM_ReadStatus(x29)
//lw x18, HLM_ReadStatus(x29)
i_hlm_status(x18)
andi x19, x18, HLM_RX0_VALID
beqz x19, 1b
lw x20, RX0_ReadRxFifo(x29)
//lw x20, RX0_ReadRxFifo(x29)
i_rx0_rxFifo(x20)
srli x19, x20, 20
addi x19, x19, 4
sw x19, TX1_WriteTxLen(x29)
sw x20, TX1_WriteTxFifo(x29)
//sw x19, TX1_WriteTxLen(x29)
i_tx1_txLen(x29)
//sw x20, TX1_WriteTxFifo(x29)
i_tx1_txFifo(x29)
li x21, 4
1:
lw x18, HLM_ReadStatus(x29)
//lw x18, HLM_ReadStatus(x29)
i_hlm_status(x29)
andi x18, x18, HLM_RX0_VALID
beqz x18, 1b
lw x20, RX0_ReadRxFifo(x29)
sw x20, TX1_WriteTxFifo(x29)
//lw x20, RX0_ReadRxFifo(x29)
i_rx0_rxFifo(x29)
//sw x20, TX1_WriteTxFifo(x29)
i_tx1_txFifo(x29)
addi x21, x21, 4
bltu x21, x19, 1b
@@ -212,11 +222,13 @@ send_data_func:
//*tx0_txLen = 8 + tx_len; //前导+长度命令
mv x16, a2
addi x17, x16, 8
sw x17, TX0_WriteTxLen(REG_TL2CDR_BASE)
//sw x17, TX0_WriteTxLen(REG_TL2CDR_BASE)
i_tx0_txLen(x17)
//*tx0_txFifo = (tx_len << 20) | (0 << 16) | 0x0000;
slli x17, x16, 20
sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE)
//sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE)
i_tx0_txFifo(x17)
//*tx0_txFifo = data[0]
#lw x17, 0(REG_tx_data)
@@ -256,11 +268,13 @@ exit_handle:
isr_tx0_end_hdl:
#li x17, 1
#sw x17, TX0_WriteSoftReset(REG_TL2CDR_BASE)
//i_tx0_softReset(x17)
mret
isr_tx1_end_hdl:
#li x17, 1
#sw x17, TX0_WriteSoftReset(REG_TL2CDR_BASE)
#sw x17, TX1_WriteSoftReset(REG_TL2CDR_BASE)
//i_tx1_softReset(x17)
mret
isr_rx0_err_hdl:
@@ -273,7 +287,8 @@ isr_rx0_start_hdl:
mret
isr_rx1_start_hdl:
lw x22, RX1_ReadRxLen(REG_TL2CDR_BASE)
//lw x22, RX1_ReadRxLen(REG_TL2CDR_BASE)
i_rx1_rxLen(x22)
sw x22, 0(REG_rx_data)
add REG_rx_data, REG_rx_data, REG_4
mret
@@ -287,7 +302,9 @@ isr_rx1_end_hdl:
isr_tx0_deq_hdl:
beqz REG_tx_data_len, 1f //if (REG_tx_data_len > 0)
lw x17, 0(REG_tx_data)
sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE)
//sw x17, TX0_WriteTxFifo(REG_TL2CDR_BASE)
i_tx0_txFifo(x17)
add REG_tx_data, REG_tx_data, REG_4
sub REG_tx_data_len, REG_tx_data_len, REG_4
@@ -301,9 +318,10 @@ isr_rx0_enq_hdl:
mret
isr_rx1_enq_hdl:
lw x17, RX1_ReadRxFifo(REG_TL2CDR_BASE)
//lw x17, RX1_ReadRxFifo(REG_TL2CDR_BASE)
i_rx1_rxFifo(x17)
sw x17, 0(REG_rx_data)
add REG_rx_data, REG_rx_data, REG_4
//add REG_rx_data, REG_rx_data, REG_4
mret
isr_hdl_table:

View File

@@ -7,3 +7,4 @@ volatile uint32_t *const plic_enable_0_31 = (uint32_t*)( PLIC_BASE + PLIC_ENABL
volatile uint32_t *const plic_threshold_0 = (uint32_t*)( PLIC_BASE + PLIC_THRESHOLD_0 );
volatile uint32_t *const plic_claim = (uint32_t*)( PLIC_BASE + PLIC_CLAIM );
volatile uint32_t exti_isr_flag[32] = {0};

View File

@@ -9,19 +9,6 @@
#define PLIC_CLAIM (0X200004U)
#define CDR_INT_TX0END 14U
#define CDR_INT_TX1END 15U
#define CDR_INT_RX0ERROR 16U
#define CDR_INT_RX1ERROR 17U
#define CDR_INT_RX0START 18U
#define CDR_INT_RX1START 19U
#define CDR_INT_RX0END 20U
#define CDR_INT_RX1END 21U
#define CDR_INT_TX0_FIFO_DEQ 22U
#define CDR_INT_TX1_FIFO_DEQ 23U
#define CDR_INT_RX0_FIFO_ENQ 24U
#define CDR_INT_RX1_FIFO_ENQ 25U
#ifndef __ASSEMBLER__
#include "stdint.h"
@@ -32,6 +19,7 @@ extern volatile uint32_t *const plic_enable_0_31;
extern volatile uint32_t *const plic_threshold_0;
extern volatile uint32_t *const plic_claim;
extern volatile uint32_t exti_isr_flag[32];
#endif

View File

@@ -1,4 +1,5 @@
#include "tl2cdr.h"
#include "system_cfg.h"
.extern main
@@ -50,7 +51,10 @@ _prog_start:
li x31, 0
#endif
li sp, 0x40011000
//li sp, 0x40011000
li t0, STACK_SIZE
la sp, sys_stack
add sp, sp, t0
#ifdef __riscv_i
la t0, trap_entry
@@ -66,7 +70,7 @@ _prog_start:
mv t0, a0 #trap_entry,RV32I
#endif
csrw mtvec, t0
li t0, 1 << 11
li t0, (1 << 11) //| (1 << 13) //13bitrocc
csrw mie, t0
csrr t0, mstatus
@@ -124,8 +128,9 @@ opt_trap_entry:
#sw t6,124(sp)
csrr t2, mcause
li s0, 0x80000000
and s0, t2, s0
//li s0, 0x80000000
//and s0, t2, s0
srli s0, t2, 31
1: beqz s0, 1b #,
andi s0, t2, 0xf
la t2, isr_j_table
@@ -161,6 +166,10 @@ exti_isr:
#lw sp,8(sp)
#lw gp,12(sp)
#lw tp,16(sp)
rocc_isr:
//add rocc interrupt here
i_hlm_read_intflag(t0)
i_hlm_clear_intflag(t0)
exit_isr:
lw t0,20(sp)
@@ -209,7 +218,7 @@ isr_j_table:
1: j 1b # a jump to unknown_isr
j exti_isr # b jump to exti_isr
1: j 1b # c jump to unknown_isr
1: j 1b # d jump to unknown_isr
j rocc_isr # d jump to unknown_isr
1: j 1b # e jump to unknown_isr
1: j 1b # f jump to unknown_isr
#endif

View File

@@ -6,4 +6,6 @@
#define RX_BUF_NUM 1
#define RX_BUF_MAX_LEN 1024
#define STACK_SIZE (1024 * 8)
#endif

386
tb/sw/src/view_signal.tcl Normal file
View File

@@ -0,0 +1,386 @@
#package require gtkwave
proc addSeparator {name} {
gtkwave::/Edit/Insert_Comment "----$name----" 0
#gtkwave::/Edit/Insert_Blank
}
proc add_signals {siglist filter1 color1 filter2 color2 } {
set fw1 $filter1
set fw2 $filter2
foreach v $siglist {
set i1 [ string first $fw1 $v ]
set i2 [ string first $fw2 $v ]
set i3 [ string first "#" $v ]
#puts stderr "sig: $v $i1 $i2 $i3"
if {$i1 != -1 && $i3 == -1} {
gtkwave::addSignalsFromList $v
gtkwave::/Edit/Color_Format/$color1
gtkwave::/Edit/UnHighlight_All
} elseif {$i2 != -1 && $i3 == -1} {
gtkwave::addSignalsFromList $v
gtkwave::/Edit/Color_Format/$color2
gtkwave::/Edit/UnHighlight_All
} elseif {$i3 != -1} {
#puts stderr "sig: $v ignore"
} else {
gtkwave::addSignalsFromList $v
gtkwave::/Edit/Color_Format/Green
gtkwave::/Edit/UnHighlight_All
}
}
}
proc uadd_signals {siglist f_c_list } {
foreach v $siglist {
set idx0 [ string first "#" $v ]
set has_been_add 0
dict for {filter color} $f_c_list {
set idx1 [ string first $filter $v ]
#puts stderr "sig: $v $i1 $i2 $i3"
if {$idx0 != -1} {
set has_been_add 1
break
} elseif {$idx1 != -1} {
gtkwave::addSignalsFromList $v
gtkwave::/Edit/Color_Format/$color
gtkwave::/Edit/UnHighlight_All
set has_been_add 1
break
} else {
#continue
#gtkwave::addSignalsFromList $v
#gtkwave::/Edit/Color_Format/Green
#gtkwave::/Edit/UnHighlight_All
}
}
if {$has_been_add == 0} {
gtkwave::addSignalsFromList $v
gtkwave::/Edit/Color_Format/Green
gtkwave::/Edit/UnHighlight_All
}
}
}
# 信号列表(使用完整层次路径)
set mst_signals {
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
}
set mst_signals_ext {
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_ready
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_valid
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_reset
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_ready
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_valid
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_reset
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_ready
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_valid
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_reset
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_ready
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_valid
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_reset
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_0
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_1
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_0
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_1
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_0
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_1
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_0
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_1
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_bits[31:0]
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_ready
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_valid
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_bits[31:0]
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_ready
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_valid
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_bits[31:0]
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_ready
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_valid
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_bits[31:0]
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_ready
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_valid
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_bits[31:0]
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_ready
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_valid
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_bits[31:0]
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_ready
TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_valid
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_bits[31:0]
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_ready
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_valid
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_bits[31:0]
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_ready
#TOP.SimTop.s_rocket_mst.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_valid
}
set slv0_signals {
#TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
}
set slv0_signals_ext {
#TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
#TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
#TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
#TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
#TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_reset
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_reset
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_reset
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_reset
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_0
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_1
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_0
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_1
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_0
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_1
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_0
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_1
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_valid
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_ready
TOP.SimTop.s_rocket_slv0.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_valid
}
set slv1_signals {
#TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
}
set slv1_signals_ext {
#TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
#TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
#TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
#TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
#TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_reset
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_reset
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_reset
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_reset
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_0
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_1
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_0
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_1
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_0
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_1
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_0
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_1
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_valid
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_ready
TOP.SimTop.s_rocket_slv1.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_valid
}
set slv2_signals {
#TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
}
set slv2_signals_ext {
#TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_clock
#TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_0_io_serDat
#TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_serDat
#TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRin_1_io_serDat
#TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_serDat
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_io_axis_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_0_reset
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_io_axis_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDRIn_1_reset
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_io_axis_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_0_reset
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_io_axis_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_CDROut_1_reset
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_0
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intRxEnd_1
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_0
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intRxError_1
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_0
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intRxStart_1
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_0
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_intTxEnd_1
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_deq_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_0_io_enq_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_deq_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_0_io_enq_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_deq_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_rxFifo_1_io_enq_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_deq_valid
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_bits[31:0]
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_ready
TOP.SimTop.s_rocket_slv2.tile_prci_domain.tile_reset_domain_tile.roccs_txFifo_1_io_enq_valid
}
set filter_color_list [dict create "_bits" Blue "_int" Red "_0_io" Yellow "_1_io" Orange]
set ft1 "_0_io"
set ft2 "_1_io"
set c1 Indigo
set c2 Orange
# 添加信号到波形窗口
addSeparator "main station"
#gtkwave::addSignalsFromList $mst_signals
#add_signals $mst_signals $ft1 $c1 $ft2 $c2
uadd_signals $mst_signals $filter_color_list
addSeparator "Slave 0"
#gtkwave::addSignalsFromList $slv0_signals
#add_signals $slv0_signals $ft1 $c1 $ft2 $c2
uadd_signals $slv0_signals $filter_color_list
addSeparator "Slave 1"
#gtkwave::addSignalsFromList $slv1_signals
#add_signals $slv1_signals $ft1 $c1 $ft2 $c2
uadd_signals $slv1_signals $filter_color_list
addSeparator "Slave 2"
#gtkwave::addSignalsFromList $slv2_signals
#add_signals $slv2_signals $ft1 $c1 $ft2 $c2
uadd_signals $slv2_signals $filter_color_list
addSeparator "main station"
#gtkwave::addSignalsFromList $mst_signals_ext
#add_signals $mst_signals_ext $ft1 $c1 $ft2 $c2
uadd_signals $mst_signals_ext $filter_color_list
addSeparator "Slave 0"
#gtkwave::addSignalsFromList $slv0_signals_ext
#add_signals $slv0_signals_ext $ft1 $c1 $ft2 $c2
uadd_signals $slv0_signals_ext $filter_color_list
addSeparator "Slave 1"
#gtkwave::addSignalsFromList $slv1_signals_ext
#add_signals $slv1_signals_ext $ft1 $c1 $ft2 $c2
uadd_signals $slv1_signals_ext $filter_color_list
addSeparator "Slave 2"
#gtkwave::addSignalsFromList $slv2_signals_ext
#add_signals $slv2_signals_ext $ft1 $c1 $ft2 $c2
uadd_signals $slv2_signals_ext $filter_color_list
# 设置显示范围
gtkwave::/Time/Zoom/Zoom_Full
# 高亮关键信号
#gtkwave::highlightSignalsFromList {top.reset_n top.clk}

View File

@@ -1,49 +1,2 @@
#include <stdint.h>
#include "tl2cdr.h"
#ifndef TL2CDR_BASE
#error TL2CDR Base address not define!!!
#endif
#ifdef OLD_CODE
volatile uint32_t * const cdr_status = (uint32_t*)( TL2CDR_BASE + CDR_ReadStatus ); //read
volatile uint32_t * const cdr_txLen = (uint32_t*)( TL2CDR_BASE + CDR_WriteTxLen ); //write
volatile uint32_t * const cdr_txFifo = (uint32_t*)( TL2CDR_BASE + CDR_WriteTxFifo ); //write
volatile uint32_t * const cdr_direct = (uint32_t*)( TL2CDR_BASE + CDR_WriteTransDir ); //write
volatile uint32_t * const cdr_softReset = (uint32_t*)( TL2CDR_BASE + CDR_WriteSoftReset ); //write
volatile uint32_t * const cdr_rxLen = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxLen ); //read
volatile uint32_t * const cdr_rxFifo = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxFifo ); //read
volatile uint32_t * const cdr_IsLast = (uint32_t*)( TL2CDR_BASE + CDR_ReadIsLast ); //read
volatile uint32_t * const cdr_rxCrc = (uint32_t*)( TL2CDR_BASE + CDR_ReadRxCrc );
volatile uint32_t * const cdr_txCrc = (uint32_t*)( TL2CDR_BASE + CDR_ReadTxCrc);
#endif
volatile uint32_t * const tx0_softReset = (uint32_t*)( TL2CDR_BASE + TX0_WriteSoftReset );
volatile uint32_t * const tx0_txLen = (uint32_t*)( TL2CDR_BASE + TX0_WriteTxLen );
volatile uint32_t * const tx0_txFifo = (uint32_t*)( TL2CDR_BASE + TX0_WriteTxFifo );
volatile uint32_t * const tx0_txCrc = (uint32_t*)( TL2CDR_BASE + TX0_ReadTxCrc );
volatile uint32_t * const tx1_softReset = (uint32_t*)( TL2CDR_BASE + TX1_WriteSoftReset );
volatile uint32_t * const tx1_txLen = (uint32_t*)( TL2CDR_BASE + TX1_WriteTxLen );
volatile uint32_t * const tx1_txFifo = (uint32_t*)( TL2CDR_BASE + TX1_WriteTxFifo );
volatile uint32_t * const tx1_txCrc = (uint32_t*)( TL2CDR_BASE + TX1_ReadTxCrc );
volatile uint32_t * const rx0_softReset = (uint32_t*)( TL2CDR_BASE + RX0_WriteSoftReset );
volatile uint32_t * const rx0_rxLen = (uint32_t*)( TL2CDR_BASE + RX0_ReadRxLen );
volatile uint32_t * const rx0_rxFifo = (uint32_t*)( TL2CDR_BASE + RX0_ReadRxFifo );
volatile uint32_t * const rx0_rxCrc = (uint32_t*)( TL2CDR_BASE + RX0_ReadRxCrc );
volatile uint32_t * const rx0_rxTimerAim = (uint32_t*)( TL2CDR_BASE + RX0_WrtieLimitTimerAim );
volatile uint32_t * const rx0_rxTxPair = (uint32_t*)( TL2CDR_BASE + RX0_WriteLimitTxPair );
volatile uint32_t * const rx1_softReset = (uint32_t*)( TL2CDR_BASE + RX1_WriteSoftReset );
volatile uint32_t * const rx1_rxLen = (uint32_t*)( TL2CDR_BASE + RX1_ReadRxLen );
volatile uint32_t * const rx1_rxFifo = (uint32_t*)( TL2CDR_BASE + RX1_ReadRxFifo );
volatile uint32_t * const rx1_rxCrc = (uint32_t*)( TL2CDR_BASE + RX1_ReadRxCrc );
volatile uint32_t * const rx1_rxTimerAim = (uint32_t*)( TL2CDR_BASE + RX1_WrtieLimitTimerAim );
volatile uint32_t * const rx1_rxTxPair = (uint32_t*)( TL2CDR_BASE + RX1_WriteLimitTxPair );
volatile uint32_t * const HLM_status = (uint32_t*)( TL2CDR_BASE + HLM_ReadStatus );
volatile uint32_t * const HLM_isLast = (uint32_t*)( TL2CDR_BASE + HLM_ReadIsLast );

View File

@@ -5,36 +5,6 @@
#include <stdint.h>
#endif
#define TL2CDR_BASE 0x10000000U
#define TX0_WriteSoftReset 0x00U
#define TX0_WriteTxLen 0x04U
#define TX0_WriteTxFifo 0x08U
#define TX0_ReadTxCrc 0x0CU
#define TX1_WriteSoftReset 0x10U
#define TX1_WriteTxLen 0x14U
#define TX1_WriteTxFifo 0x18U
#define TX1_ReadTxCrc 0x1CU
#define RX0_WriteSoftReset 0x20U
#define RX0_ReadRxLen 0x24U
#define RX0_ReadRxFifo 0x28U
#define RX0_ReadRxCrc 0x2CU
#define RX0_WrtieLimitTimerAim 0x30U
#define RX0_WriteLimitTxPair 0x34U
#define RX1_WriteSoftReset 0x40U
#define RX1_ReadRxLen 0x44U
#define RX1_ReadRxFifo 0x48U
#define RX1_ReadRxCrc 0x4CU
#define RX1_WrtieLimitTimerAim 0x50U
#define RX1_WriteLimitTxPair 0x54U
#define HLM_ReadStatus 0x58U
#define HLM_ReadIsLast 0x5CU
#define HLM_TX_FIFO_LEN 16U
#define HLM_RX_FIFO_LEN 16U
@@ -52,33 +22,145 @@
#define HLM_TX0_FIFO_LEFT(s) (((s) >> (8 + 10)) & 0x1f)
#define HLM_TX1_FIFO_LEFT(s) (((s) >> (8 + 15)) & 0x1f)
#define HLM_INT_TX1_END (1U<<11U)
#define HLM_INT_TX0_END (1U<<10U)
#define HLM_INT_RX1_ERR (1U<<9U)
#define HLM_INT_RX0_ERR (1U<<8U)
#define HLM_INT_RX1_START (1U<<7U)
#define HLM_INT_RX0_START (1U<<6U)
#define HLM_INT_RX1_END (1U<<5U)
#define HLM_INT_RX0_END (1U<<4U)
#define HLM_INT_TX1_FIFO_DEQ (1U<<3U)
#define HLM_INT_TX0_FIFO_DEQ (1U<<2U)
#define HLM_INT_RX1_FIFO_ENQ (1U<<1U)
#define HLM_INT_RX0_FIFO_ENQ (1U<<0U)
#ifndef __ASSEMBLER__
extern volatile uint32_t * const tx0_softReset;
extern volatile uint32_t * const tx0_txLen;
extern volatile uint32_t * const tx0_txFifo;
extern volatile uint32_t * const tx0_txCrc;
#define i_tx0_softReset(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x00, x0, %0, x0" :: "r"(rs1))
#define i_tx0_txLen(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x01, x0, %0, x0" :: "r"(rs1))
#define i_tx0_txFifo(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x02, x0, %0, x0" :: "r"(rs1))
#define i_tx0_txCrc(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x03, %0, x0, x0" :"=r"(rd))
#define i_tx0_clear_timer(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x04, x0, %0, x0" :: "r"(rs1))
#define i_tx0_read_timer(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x04, %0, x0, x0" :"=r"(rd))
extern volatile uint32_t * const tx1_softReset;
extern volatile uint32_t * const tx1_txLen;
extern volatile uint32_t * const tx1_txFifo;
extern volatile uint32_t * const tx1_txCrc;
#define i_tx1_softReset(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x05, x0, %0, x0" :: "r"(rs1))
#define i_tx1_txLen(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x06, x0, %0, x0" :: "r"(rs1))
#define i_tx1_txFifo(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x07, x0, %0, x0" :: "r"(rs1))
#define i_tx1_txCrc(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x08, %0, x0, x0" :"=r"(rd))
#define i_tx1_clear_timer(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x09, x0, %0, x0" :: "r"(rs1))
#define i_tx1_read_timer(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x09, %0, x0, x0" :"=r"(rd))
extern volatile uint32_t * const rx0_softReset;
extern volatile uint32_t * const rx0_rxLen;
extern volatile uint32_t * const rx0_rxFifo;
extern volatile uint32_t * const rx0_rxCrc;
extern volatile uint32_t * const rx0_rxTimerAim;
extern volatile uint32_t * const rx0_rxTxPair;
#define i_rx0_softReset(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x0A, x0, %0, x0" :: "r"(rs1))
#define i_rx0_rxLen(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x0B, %0, x0, x0" :"=r"(rd))
#define i_rx0_rxFifo(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x0C, %0, x0, x0" :"=r"(rd))
#define i_rx0_rxCrc(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x0D, %0, x0, x0" :"=r"(rd))
#define i_rx0_limitTime(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x0E, x0, %0, x0" :: "r"(rs1))
#define i_rx0_txPair(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x0F, x0, %0, x0" :: "r"(rs1))
#define i_rx1_softReset(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x10, x0, %0, x0" :: "r"(rs1))
#define i_rx1_rxLen(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x11, %0, x0, x0" :"=r"(rd))
#define i_rx1_rxFifo(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x12, %0, x0, x0" :"=r"(rd))
#define i_rx1_rxCrc(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x13, %0, x0, x0" :"=r"(rd))
#define i_rx1_limitTime(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x14, x0, %0, x0" :: "r"(rs1))
#define i_rx1_txPair(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x15, x0, %0, x0" :: "r"(rs1))
#define i_hlm_status(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x16, %0, x0, x0" :"=r"(rd))
#define i_hlm_clear_intflag(rs1) \
__asm__ volatile (".insn r 0x0B, 2, 0x17, x0, %0, x0" :: "r"(rs1))
#define i_hlm_read_intflag(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x17, %0, x0, x0" :"=r"(rd))
#define i_hlm_isLast(rd) \
__asm__ volatile (".insn r 0x0B, 4, 0x18, %0, x0, x0" :"=r"(rd))
#else
#define i_tx0_softReset(rs1) \
.insn r 0x0B, 2, 0x00, x0, rs1, x0
#define i_tx0_txLen(rs1) \
.insn r 0x0B, 2, 0x01, x0, rs1, x0
#define i_tx0_txFifo(rs1) \
.insn r 0x0B, 2, 0x01, x0, rs1, x0
#define i_tx0_txCrc(rd) \
.insn r 0x0B, 4, 0x03, rd, x0, x0
#define i_tx0_clear_timer(rs1) \
.insn r 0x0B, 2, 0x04, x0, rs1, x0
#define i_tx0_read_timer(rd) \
.insn r 0x0B, 4, 0x04, rd, x0, x0
#define i_tx1_softReset(rs1) \
.insn r 0x0B, 2, 0x05, x0, rs1, x0
#define i_tx1_txLen(rs1) \
.insn r 0x0B, 2, 0x06, x0, rs1, x0
#define i_tx1_txFifo(rs1) \
.insn r 0x0B, 2, 0x07, x0, rs1, x0
#define i_tx1_txCrc(rd) \
.insn r 0x0B, 4, 0x08, rd, x0, x0
#define i_tx1_clear_timer(rs1) \
.insn r 0x0B, 2, 0x09, x0, rs1, x0
#define i_tx1_read_timer(rd) \
.insn r 0x0B, 4, 0x09, rd, x0, x0
#define i_rx0_softReset(rs1) \
.insn r 0x0B, 2, 0x0A, x0, rs1, x0
#define i_rx0_rxLen(rd) \
.insn r 0x0B, 4, 0x0B, rd, x0, x0
#define i_rx0_rxFifo(rd) \
.insn r 0x0B, 4, 0x0C, rd, x0, x0
#define i_rx0_rxCrc(rd) \
.insn r 0x0B, 4, 0x0D, rd, x0, x0
#define i_rx0_limitTime(rs1) \
.insn r 0x0B, 2, 0x0E, x0, rs1, x0
#define i_rx0_txPair(rs1) \
.insn r 0x0B, 2, 0x0F, x0, rs1, x0
#define i_rx1_softReset(rs1) \
.insn r 0x0B, 2, 0x10, x0, rs1, x0
#define i_rx1_rxLen(rd) \
.insn r 0x0B, 4, 0x11, rd, x0, x0
#define i_rx1_rxFifo(rd) \
.insn r 0x0B, 4, 0x12, rd, x0, x0
#define i_rx1_rxCrc(rd) \
.insn r 0x0B, 4, 0x13, rd, x0, x0
#define i_rx1_limitTime(rs1) \
.insn r 0x0B, 2, 0x14, x0, rs1, x0
#define i_rx1_txPair(rs1) \
.insn r 0x0B, 2, 0x15, x0, rs1, x0
#define i_hlm_status(rd) \
.insn r 0x0B, 4, 0x16, rd, x0, x0
#define i_hlm_clear_intflag(rs1) \
.insn r 0x0B, 2, 0x17, x0, rs1, x0
#define i_hlm_read_intflag(rd) \
.insn r 0x0B, 4, 0x17, rd, x0, x0
#define i_hlm_isLast(rd) \
.insn r 0x0B, 4, 0x18, rd, x0, x0
extern volatile uint32_t * const rx1_softReset;
extern volatile uint32_t * const rx1_rxLen;
extern volatile uint32_t * const rx1_rxFifo;
extern volatile uint32_t * const rx1_rxCrc;
extern volatile uint32_t * const rx1_rxTimerAim;
extern volatile uint32_t * const rx1_rxTxPair;
extern volatile uint32_t * const HLM_status;
extern volatile uint32_t * const HLM_isLast;
#endif
#endif