From 84359fd462f729d999074c2182e9d6b4e8d9d85d Mon Sep 17 00:00:00 2001 From: Jack Chen Date: Wed, 24 May 2023 06:02:36 +0800 Subject: [PATCH] soc: sdk: update ahb_mailbox & ahb_iopmp modules --- .../CDK/wujian100_open-app0.cdkproj | 2 +- .../apps/wujian100_open-app0/src/main.c | 44 ++++++-- .../CDK/wujian100_open-app1.cdkproj | 2 +- .../wujian100_open-app1/board/include/pin.h | 2 +- .../apps/wujian100_open-app1/src/main.c | 44 ++++++-- .../apps/wujian100_open-driver/include/mbox.h | 2 +- .../apps/wujian100_open-driver/mbox.c | 102 ++++++++++-------- sdk/projects/apps/wujian100_open-driver/pmp.c | 26 ++--- soc/ahb_iopmp.sv | 16 +-- soc/ahb_mailbox.sv | 13 ++- .../bd/design_1/hdl/design_1_wrapper.v | 2 +- .../sources_1/bd/design_1/design_1.bda | 12 +-- wujian100_open.xpr | 8 +- 13 files changed, 180 insertions(+), 95 deletions(-) diff --git a/sdk/projects/apps/wujian100_open-app0/CDK/wujian100_open-app0.cdkproj b/sdk/projects/apps/wujian100_open-app0/CDK/wujian100_open-app0.cdkproj index 558eded..f482fde 100644 --- a/sdk/projects/apps/wujian100_open-app0/CDK/wujian100_open-app0.cdkproj +++ b/sdk/projects/apps/wujian100_open-app0/CDK/wujian100_open-app0.cdkproj @@ -580,7 +580,7 @@ - mail_acked:1;mail_pending:1;MBOX_L_CTRL_REG:1;MBOX_R_CTRL_REG:1 + 0x10000000;;; ;;32;;MHZ;;up diff --git a/sdk/projects/apps/wujian100_open-app0/src/main.c b/sdk/projects/apps/wujian100_open-app0/src/main.c index 07d761d..0f36f74 100644 --- a/sdk/projects/apps/wujian100_open-app0/src/main.c +++ b/sdk/projects/apps/wujian100_open-app0/src/main.c @@ -7,7 +7,9 @@ #include #include +#include #include +#include #include "pmu.h" #include "pmp.h" @@ -19,8 +21,15 @@ extern void mdelay(uint32_t ms); int main(void) { + bool send_msg = false; + bool send_ack = false; + + uint8_t send_msg_id = 0; + uint8_t send_ack_id = 0; + uint8_t loop = 100; uint8_t mail_id = 0; + int16_t mail_len = 0; uint8_t mail_buff[1024] = {0}; pmu_set_reset(0); @@ -39,6 +48,9 @@ int main(void) if (mbox_send_message(loop, mail_buff, strlen((char *)mail_buff)) >= 0) { printf("app0: mail %u is sent to remote core\n", loop); + } else { + send_msg_id = loop; + send_msg = true; } do { @@ -47,20 +59,40 @@ int main(void) pwm_test(); if (mbox_check_acked()) { - snprintf((char *)mail_buff, sizeof(mail_buff), "Hello from core 0! The message id is %u", loop); + mbox_read_ack(&mail_id); + + printf("app0: mail %u is acked by remote core\n", mail_id); + + send_msg_id = loop; + send_msg = true; + } + + if (send_msg) { + snprintf((char *)mail_buff, sizeof(mail_buff), "Hello from core 0! The message id is %u", send_msg_id); if (mbox_send_message(loop, mail_buff, strlen((char *)mail_buff)) >= 0) { - printf("app0: mail %u is acked by remote core\n", mbox_read_ack()); - printf("app0: mail %u is sent to remote core\n", loop); + printf("app0: mail %u is sent to remote core\n", send_msg_id); + + send_msg = false; } } if (mbox_check_pending()) { - if (mbox_send_ack(mail_id) >= 0) { - mbox_read_message(&mail_id, mail_buff, sizeof(mail_buff)); + if ((mail_len = mbox_read_message(&mail_id, mail_buff, sizeof(mail_buff))) >= 0) { + mail_buff[mail_len] = 0x00; printf("app0: mail %u is received: %s\n", mail_id, (char *)mail_buff); - printf("app0: mail %u is acked\n", mail_id); + + send_ack_id = mail_id; + send_ack = true; + } + } + + if (send_ack) { + if (mbox_send_ack(send_ack_id) >= 0) { + printf("app0: mail %u is acked\n", send_ack_id); + + send_ack = false; } } diff --git a/sdk/projects/apps/wujian100_open-app1/CDK/wujian100_open-app1.cdkproj b/sdk/projects/apps/wujian100_open-app1/CDK/wujian100_open-app1.cdkproj index 76b5dc4..3744e5c 100644 --- a/sdk/projects/apps/wujian100_open-app1/CDK/wujian100_open-app1.cdkproj +++ b/sdk/projects/apps/wujian100_open-app1/CDK/wujian100_open-app1.cdkproj @@ -580,7 +580,7 @@ - mail_acked:1;mail_pending:1;MBOX_L_CTRL_REG:1;MBOX_R_CTRL_REG:1 + 0x20000000;;; ;;32;;MHZ;;up diff --git a/sdk/projects/apps/wujian100_open-app1/board/include/pin.h b/sdk/projects/apps/wujian100_open-app1/board/include/pin.h index ad3efc3..e2590b2 100644 --- a/sdk/projects/apps/wujian100_open-app1/board/include/pin.h +++ b/sdk/projects/apps/wujian100_open-app1/board/include/pin.h @@ -20,7 +20,7 @@ extern "C" { #endif -#define CLOCK_GETTIME_USE_TIMER_ID 0 +#define CLOCK_GETTIME_USE_TIMER_ID 2 #define UART_TXD0 1 #define UART_RXD0 2 diff --git a/sdk/projects/apps/wujian100_open-app1/src/main.c b/sdk/projects/apps/wujian100_open-app1/src/main.c index bb88804..2db51a4 100644 --- a/sdk/projects/apps/wujian100_open-app1/src/main.c +++ b/sdk/projects/apps/wujian100_open-app1/src/main.c @@ -7,7 +7,9 @@ #include #include +#include #include +#include #include "gpio.h" #include "mbox.h" @@ -17,8 +19,15 @@ extern void mdelay(uint32_t ms); int main(void) { + bool send_msg = false; + bool send_ack = false; + + uint8_t send_msg_id = 0; + uint8_t send_ack_id = 0; + uint8_t loop = 200; uint8_t mail_id = 0; + int16_t mail_len = 0; uint8_t mail_buff[1024] = {0}; gpio_init(); @@ -30,6 +39,9 @@ int main(void) if (mbox_send_message(loop, mail_buff, strlen((char *)mail_buff)) >= 0) { printf("app1: mail %u is sent to remote core\n", loop); + } else { + send_msg_id = loop; + send_msg = true; } do { @@ -38,20 +50,40 @@ int main(void) gpio_toggle(); if (mbox_check_acked()) { - snprintf((char *)mail_buff, sizeof(mail_buff), "Hello from core 1! The message id is %u", loop); + mbox_read_ack(&mail_id); + + printf("app1: mail %u is acked by remote core\n", mail_id); + + send_msg_id = loop; + send_msg = true; + } + + if (send_msg) { + snprintf((char *)mail_buff, sizeof(mail_buff), "Hello from core 1! The message id is %u", send_msg_id); if (mbox_send_message(loop, mail_buff, strlen((char *)mail_buff)) >= 0) { - printf("app1: mail %u is acked by remote core\n", mbox_read_ack()); - printf("app1: mail %u is sent to remote core\n", loop); + printf("app1: mail %u is sent to remote core\n", send_msg_id); + + send_msg = false; } } if (mbox_check_pending()) { - if (mbox_send_ack(mail_id) >= 0) { - mbox_read_message(&mail_id, mail_buff, sizeof(mail_buff)); + if ((mail_len = mbox_read_message(&mail_id, mail_buff, sizeof(mail_buff))) >= 0) { + mail_buff[mail_len] = 0x00; printf("app1: mail %u is received: %s\n", mail_id, (char *)mail_buff); - printf("app1: mail %u is acked\n", mail_id); + + send_ack_id = mail_id; + send_ack = true; + } + } + + if (send_ack) { + if (mbox_send_ack(send_ack_id) >= 0) { + printf("app1: mail %u is acked\n", send_ack_id); + + send_ack = false; } } diff --git a/sdk/projects/apps/wujian100_open-driver/include/mbox.h b/sdk/projects/apps/wujian100_open-driver/include/mbox.h index 68520b6..502aa1b 100644 --- a/sdk/projects/apps/wujian100_open-driver/include/mbox.h +++ b/sdk/projects/apps/wujian100_open-driver/include/mbox.h @@ -16,7 +16,7 @@ extern void mbox_init(uint8_t core_id); extern bool mbox_check_acked(void); extern bool mbox_check_pending(void); -extern int mbox_read_ack(void); +extern int mbox_read_ack(uint8_t *id); extern int mbox_read_message(uint8_t *id, void *buff, uint32_t buff_size); extern int mbox_send_ack(uint8_t id); diff --git a/sdk/projects/apps/wujian100_open-driver/mbox.c b/sdk/projects/apps/wujian100_open-driver/mbox.c index c305e9f..ae47bb9 100644 --- a/sdk/projects/apps/wujian100_open-driver/mbox.c +++ b/sdk/projects/apps/wujian100_open-driver/mbox.c @@ -12,27 +12,32 @@ #include "drv_irq.h" // Mailbox Functions -#define MAILBOX_IRQ_NUM (42) -#define MAILBOX_RAM_MAX (32 * 1024) +#define MBOX_IRQ_NUM (42) +#define MBOX_RAM_SIZE (32 * 1024) -#define MBOX_0_CTRL_REG_BASE (0x40010000) -#define MBOX_0_DATA_RAM_BASE (0x40018000) +#define MBOX_0_CTRL_0_REG_BASE (0x40010000) +#define MBOX_0_CTRL_1_REG_BASE (0x40010004) +#define MBOX_0_DATA_0_RAM_BASE (0x40018000) -#define MBOX_1_CTRL_REG_BASE (0x40020000) -#define MBOX_1_DATA_RAM_BASE (0x40028000) +#define MBOX_1_CTRL_0_REG_BASE (0x40020000) +#define MBOX_1_CTRL_1_REG_BASE (0x40020004) +#define MBOX_1_DATA_0_RAM_BASE (0x40028000) -#define MBOX_INTR_BIT (0x80000000) -#define MBOX_RESP_BIT (0x40000000) -#define MBOX_FULL_BIT (0x20000000) +#define MBOX_INTR_BIT (0x80000000) +#define MBOX_FULL_BIT (0x40000000) -volatile uint32_t *MBOX_L_CTRL_REG_BASE = NULL; -volatile uint32_t *MBOX_L_DATA_RAM_BASE = NULL; +volatile uint32_t *MBOX_L_CTRL_0_REG_BASE = NULL; +volatile uint32_t *MBOX_L_CTRL_1_REG_BASE = NULL; +volatile uint32_t *MBOX_L_DATA_0_RAM_BASE = NULL; -volatile uint32_t *MBOX_R_CTRL_REG_BASE = NULL; -volatile uint32_t *MBOX_R_DATA_RAM_BASE = NULL; +volatile uint32_t *MBOX_R_CTRL_0_REG_BASE = NULL; +volatile uint32_t *MBOX_R_CTRL_1_REG_BASE = NULL; +volatile uint32_t *MBOX_R_DATA_0_RAM_BASE = NULL; -#define MBOX_L_CTRL_REG (*(volatile uint32_t *)MBOX_L_CTRL_REG_BASE) -#define MBOX_R_CTRL_REG (*(volatile uint32_t *)MBOX_R_CTRL_REG_BASE) +#define MBOX_L_CTRL_0_REG (*(volatile uint32_t *)MBOX_L_CTRL_0_REG_BASE) +#define MBOX_L_CTRL_1_REG (*(volatile uint32_t *)MBOX_L_CTRL_1_REG_BASE) +#define MBOX_R_CTRL_0_REG (*(volatile uint32_t *)MBOX_R_CTRL_0_REG_BASE) +#define MBOX_R_CTRL_1_REG (*(volatile uint32_t *)MBOX_R_CTRL_1_REG_BASE) uint8_t mail_id = 0; @@ -41,35 +46,44 @@ bool mail_pending = false; void mbox_irq_handler(void) { - if (MBOX_L_CTRL_REG & MBOX_RESP_BIT) { + if (MBOX_L_CTRL_1_REG & MBOX_INTR_BIT) { + MBOX_L_CTRL_1_REG &=~MBOX_INTR_BIT; + mail_acked = true; - } else { - mail_pending = true; } - MBOX_L_CTRL_REG &=~MBOX_INTR_BIT; + if (MBOX_L_CTRL_0_REG & MBOX_INTR_BIT) { + MBOX_L_CTRL_0_REG &=~MBOX_INTR_BIT; + + mail_pending = true; + } } void mbox_init(uint8_t core_id) { if (core_id == 0) { - MBOX_L_CTRL_REG_BASE = (volatile uint32_t *)MBOX_0_CTRL_REG_BASE; - MBOX_L_DATA_RAM_BASE = (volatile uint32_t *)MBOX_0_DATA_RAM_BASE; + MBOX_L_CTRL_0_REG_BASE = (volatile uint32_t *)MBOX_0_CTRL_0_REG_BASE; + MBOX_L_CTRL_1_REG_BASE = (volatile uint32_t *)MBOX_0_CTRL_1_REG_BASE; + MBOX_L_DATA_0_RAM_BASE = (volatile uint32_t *)MBOX_0_DATA_0_RAM_BASE; - MBOX_R_CTRL_REG_BASE = (volatile uint32_t *)MBOX_1_CTRL_REG_BASE; - MBOX_R_DATA_RAM_BASE = (volatile uint32_t *)MBOX_1_DATA_RAM_BASE; + MBOX_R_CTRL_0_REG_BASE = (volatile uint32_t *)MBOX_1_CTRL_0_REG_BASE; + MBOX_R_CTRL_1_REG_BASE = (volatile uint32_t *)MBOX_1_CTRL_1_REG_BASE; + MBOX_R_DATA_0_RAM_BASE = (volatile uint32_t *)MBOX_1_DATA_0_RAM_BASE; } else { - MBOX_L_CTRL_REG_BASE = (volatile uint32_t *)MBOX_1_CTRL_REG_BASE; - MBOX_L_DATA_RAM_BASE = (volatile uint32_t *)MBOX_1_DATA_RAM_BASE; + MBOX_L_CTRL_0_REG_BASE = (volatile uint32_t *)MBOX_1_CTRL_0_REG_BASE; + MBOX_L_CTRL_1_REG_BASE = (volatile uint32_t *)MBOX_1_CTRL_1_REG_BASE; + MBOX_L_DATA_0_RAM_BASE = (volatile uint32_t *)MBOX_1_DATA_0_RAM_BASE; - MBOX_R_CTRL_REG_BASE = (volatile uint32_t *)MBOX_0_CTRL_REG_BASE; - MBOX_R_DATA_RAM_BASE = (volatile uint32_t *)MBOX_0_DATA_RAM_BASE; + MBOX_R_CTRL_0_REG_BASE = (volatile uint32_t *)MBOX_0_CTRL_0_REG_BASE; + MBOX_R_CTRL_1_REG_BASE = (volatile uint32_t *)MBOX_0_CTRL_1_REG_BASE; + MBOX_R_DATA_0_RAM_BASE = (volatile uint32_t *)MBOX_0_DATA_0_RAM_BASE; } - MBOX_L_CTRL_REG = 0x00000000; + MBOX_L_CTRL_0_REG = 0x00000000; + MBOX_L_CTRL_1_REG = 0x00000000; - drv_irq_register(MAILBOX_IRQ_NUM, mbox_irq_handler); - drv_irq_enable(MAILBOX_IRQ_NUM); + drv_irq_register(MBOX_IRQ_NUM, mbox_irq_handler); + drv_irq_enable(MBOX_IRQ_NUM); } bool mbox_check_acked(void) @@ -82,60 +96,60 @@ bool mbox_check_pending(void) return mail_pending; } -int mbox_read_ack(void) +int mbox_read_ack(uint8_t *id) { - uint8_t id = MBOX_L_CTRL_REG & 0xff; + *id = MBOX_L_CTRL_1_REG & 0xff; mail_acked = false; - MBOX_L_CTRL_REG &=~MBOX_FULL_BIT; + MBOX_L_CTRL_1_REG &=~MBOX_FULL_BIT; - return id; + return 0; } int mbox_read_message(uint8_t *id, void *buff, uint32_t buff_size) { - uint16_t size = (MBOX_L_CTRL_REG & 0x7fff00) >> 8; + uint16_t size = (MBOX_L_CTRL_0_REG & 0x7fff00) >> 8; if (size > buff_size) { return -1; } - *id = MBOX_L_CTRL_REG & 0xff; + *id = MBOX_L_CTRL_0_REG & 0xff; - memcpy(buff, (void *)MBOX_L_DATA_RAM_BASE, size); + memcpy(buff, (void *)MBOX_L_DATA_0_RAM_BASE, size); mail_pending = false; - MBOX_L_CTRL_REG &=~MBOX_FULL_BIT; + MBOX_L_CTRL_0_REG &=~MBOX_FULL_BIT; return size; } int mbox_send_ack(uint8_t id) { - if (MBOX_R_CTRL_REG & MBOX_FULL_BIT) { + if (MBOX_R_CTRL_1_REG & MBOX_FULL_BIT) { return -1; } - MBOX_R_CTRL_REG = id | MBOX_FULL_BIT | MBOX_RESP_BIT | MBOX_INTR_BIT; + MBOX_R_CTRL_1_REG = id | MBOX_FULL_BIT | MBOX_INTR_BIT; return 0; } int mbox_send_message(uint8_t id, const void *buff, uint32_t len) { - if (MBOX_R_CTRL_REG & MBOX_FULL_BIT) { + if (MBOX_R_CTRL_0_REG & MBOX_FULL_BIT) { return -1; } - if (len > MAILBOX_RAM_MAX) { + if (len > MBOX_RAM_SIZE) { return -2; } - memcpy((void *)MBOX_R_DATA_RAM_BASE, buff, len); + memcpy((void *)MBOX_R_DATA_0_RAM_BASE, buff, len); - MBOX_R_CTRL_REG = id | (len << 8) | MBOX_FULL_BIT | MBOX_INTR_BIT; + MBOX_R_CTRL_0_REG = id | (len << 8) | MBOX_FULL_BIT | MBOX_INTR_BIT; return len; } diff --git a/sdk/projects/apps/wujian100_open-driver/pmp.c b/sdk/projects/apps/wujian100_open-driver/pmp.c index 6e613b9..e97dfa0 100644 --- a/sdk/projects/apps/wujian100_open-driver/pmp.c +++ b/sdk/projects/apps/wujian100_open-driver/pmp.c @@ -9,14 +9,14 @@ #include // IOPMP Functions -#define PMP_ERROR_BIT (0x00000200) -#define PMP_RESET_BIT (0x00000100) +#define PMP_ERROR_BIT (0x00000200) +#define PMP_RESET_BIT (0x00000100) -#define PMP_CTRL_0_REG_BASE (0x40100000) -#define PMP_CTRL_1_REG_BASE (0x40100004) +#define PMP_CTRL_0_REG_BASE (0x40100000) +#define PMP_CTRL_1_REG_BASE (0x40100004) -#define PMP_DUMP_0_REG_BASE (0x40100008) -#define PMP_DUMP_1_REG_BASE (0x4010000C) +#define PMP_DUMP_0_REG_BASE (0x40100008) +#define PMP_DUMP_1_REG_BASE (0x4010000C) #define PMP_CONF_0_0_BASE_REG_BASE (0x40100010) #define PMP_CONF_0_0_MASK_REG_BASE (0x40100014) @@ -122,17 +122,17 @@ void pmp_init(void) PMP_CONF_1_2_MASK_REG = 0xFFFF0000; // 0x40010000 - 0x4001FFFF PMP_CONF_1_3_BASE_REG = 0x40020000; // MAILBOX_1 PMP_CONF_1_3_MASK_REG = 0xFFFF0000; // 0x40020000 - 0x4002FFFF - PMP_CONF_1_4_BASE_REG = 0x60018000; // GPIO - PMP_CONF_1_4_MASK_REG = 0xFFFFF000; // 0x60018000 - 0x60018FFF - PMP_CONF_1_5_BASE_REG = 0x60028000; // USI_1 - PMP_CONF_1_5_MASK_REG = 0xFFFFF000; // 0x60028000 - 0x60028FFF - PMP_CONF_1_6_BASE_REG = 0x00000000; - PMP_CONF_1_6_MASK_REG = 0x00000000; + PMP_CONF_1_4_BASE_REG = 0x60000000; // TIM_2 + PMP_CONF_1_4_MASK_REG = 0xFFFFFFE0; // 0x60000000 - 0x6000001F + PMP_CONF_1_5_BASE_REG = 0x60018000; // GPIO + PMP_CONF_1_5_MASK_REG = 0xFFFFF000; // 0x60018000 - 0x60018FFF + PMP_CONF_1_6_BASE_REG = 0x60028000; // USI_1 + PMP_CONF_1_6_MASK_REG = 0xFFFFF000; // 0x60028000 - 0x60028FFF PMP_CONF_1_7_BASE_REG = 0x00000000; PMP_CONF_1_7_MASK_REG = 0x00000000; PMP_CTRL_0_REG = 0x00; - PMP_CTRL_1_REG = 0x3f; + PMP_CTRL_1_REG = 0x7f; } bool pmp_get_err(uint8_t idx) diff --git a/soc/ahb_iopmp.sv b/soc/ahb_iopmp.sv index 72e985e..30c96bf 100644 --- a/soc/ahb_iopmp.sv +++ b/soc/ahb_iopmp.sv @@ -220,23 +220,23 @@ begin haddr_r <= haddr; if (pmp_ctrl_0.rst) begin - pmp_ctrl_0.hit <= |pmp_addr_0_hit ? pmp_addr_0_hit : pmp_ctrl_0.hit; - pmp_ctrl_0.err <= !(|pmp_addr_0_hit) & (s0_htrans != AHB_TRANS_IDLE) ? 'b1 : pmp_ctrl_0.err; - pmp_dump_0.addr <= !(|pmp_addr_0_hit) & (s0_htrans != AHB_TRANS_IDLE) ? s0_haddr : pmp_dump_0.addr; - end else begin pmp_ctrl_0.hit <= 'b0; pmp_ctrl_0.err <= 'b0; pmp_dump_0.addr <= 'b0; + end else begin + pmp_ctrl_0.hit <= |pmp_addr_0_hit ? pmp_addr_0_hit : pmp_ctrl_0.hit; + pmp_ctrl_0.err <= !(|pmp_addr_0_hit) & (s0_htrans != AHB_TRANS_IDLE) ? 'b1 : pmp_ctrl_0.err; + pmp_dump_0.addr <= !(|pmp_addr_0_hit) & (s0_htrans != AHB_TRANS_IDLE) ? s0_haddr : pmp_dump_0.addr; end if (pmp_ctrl_1.rst) begin - pmp_ctrl_1.hit <= |pmp_addr_1_hit ? pmp_addr_1_hit : pmp_ctrl_1.hit; - pmp_ctrl_1.err <= !(|pmp_addr_1_hit) & (s1_htrans != AHB_TRANS_IDLE) ? 'b1 : pmp_ctrl_1.err; - pmp_dump_1.addr <= !(|pmp_addr_1_hit) & (s1_htrans != AHB_TRANS_IDLE) ? s1_haddr : pmp_dump_1.addr; - end else begin pmp_ctrl_1.hit <= 'b0; pmp_ctrl_1.err <= 'b0; pmp_dump_1.addr <= 'b0; + end else begin + pmp_ctrl_1.hit <= |pmp_addr_1_hit ? pmp_addr_1_hit : pmp_ctrl_1.hit; + pmp_ctrl_1.err <= !(|pmp_addr_1_hit) & (s1_htrans != AHB_TRANS_IDLE) ? 'b1 : pmp_ctrl_1.err; + pmp_dump_1.addr <= !(|pmp_addr_1_hit) & (s1_htrans != AHB_TRANS_IDLE) ? s1_haddr : pmp_dump_1.addr; end if (hsel_r) begin diff --git a/soc/ahb_mailbox.sv b/soc/ahb_mailbox.sv index 1a8517c..0c2d404 100644 --- a/soc/ahb_mailbox.sv +++ b/soc/ahb_mailbox.sv @@ -32,14 +32,14 @@ module ahb_mailbox #( typedef struct packed { logic intr; - logic resp; // 0: normal, 1: ack logic full; // 0: empty, 1: full - logic [28:23] rsvd; + logic [29:23] rsvd; logic [22:8] size; logic [7:0] id; } mbox_ctrl_t; mbox_ctrl_t mbox_ctrl_0; +mbox_ctrl_t mbox_ctrl_1; logic ram_hsel; logic [1:0] ram_hresp; @@ -60,7 +60,7 @@ assign hresp = ram_hsel ? ram_hresp : reg_hresp; assign hready = ram_hsel ? ram_hready : reg_hready; assign hrdata = ram_hsel ? ram_hrdata : reg_hrdata; -assign mailbox_intr = mbox_ctrl_0.intr; +assign mailbox_intr = mbox_ctrl_0.intr | mbox_ctrl_1.intr; sms_bank_64k_top #( .WIDTH(32), @@ -96,6 +96,7 @@ begin reg_hrdata <= 'b0; mbox_ctrl_0 <= 'b0; + mbox_ctrl_1 <= 'b0; end else begin ram_hsel <= haddr[15] & hsel; @@ -107,6 +108,9 @@ begin 8'h00: begin mbox_ctrl_0 <= hwdata; end + 8'h04: begin + mbox_ctrl_1 <= hwdata; + end endcase end @@ -115,6 +119,9 @@ begin 8'h00: begin reg_hrdata <= mbox_ctrl_0; end + 8'h04: begin + reg_hrdata <= mbox_ctrl_1; + end default: begin reg_hrdata <= 'b0; end diff --git a/wujian100_open.gen/sources_1/bd/design_1/hdl/design_1_wrapper.v b/wujian100_open.gen/sources_1/bd/design_1/hdl/design_1_wrapper.v index 7e7ba21..6c7c09a 100644 --- a/wujian100_open.gen/sources_1/bd/design_1/hdl/design_1_wrapper.v +++ b/wujian100_open.gen/sources_1/bd/design_1/hdl/design_1_wrapper.v @@ -1,7 +1,7 @@ //Copyright 1986-2023 Xilinx, Inc. All Rights Reserved. //-------------------------------------------------------------------------------- //Tool Version: Vivado v.2022.2.2 (win64) Build 3788238 Tue Feb 21 20:00:34 MST 2023 -//Date : Wed May 24 02:42:23 2023 +//Date : Wed May 24 05:48:24 2023 //Host : ThinPC running 64-bit major release (build 9200) //Command : generate_target design_1_wrapper.bd //Design : design_1_wrapper diff --git a/wujian100_open.srcs/sources_1/bd/design_1/design_1.bda b/wujian100_open.srcs/sources_1/bd/design_1/design_1.bda index 7f828ef..71fde4b 100644 --- a/wujian100_open.srcs/sources_1/bd/design_1/design_1.bda +++ b/wujian100_open.srcs/sources_1/bd/design_1/design_1.bda @@ -23,20 +23,20 @@ - active 2 - PM + design_1 + VR + active 2 - design_1 - VR + PM design_1 BC - - + + diff --git a/wujian100_open.xpr b/wujian100_open.xpr index d781310..b4c6f67 100644 --- a/wujian100_open.xpr +++ b/wujian100_open.xpr @@ -412,14 +412,14 @@ - - + + - - + +