Frank
06/04/2024, 10:08 AMreg_la0_data_in
for my CI2309 project. According to my Makefile, I have MPW_TAG ?= mpw-9d
. I would thus assume that the register definitions in
https://github.com/efabless/caravel/blob/mpw-9d/verilog/dv/caravel/defs.h such as
#define reg_la0_data ((volatile uint32_t)0x25000000)
#define reg_la1_data ((volatile uint32_t)0x25000004)
#define reg_la2_data ((volatile uint32_t)0x25000008)
#define reg_la3_data ((volatile uint32_t)0x2500000c)
are the good ones. However, this doesn't match with the definitions in https://github.com/efabless/caravel_board/blob/main/firmware/chipignite/defs.h, where
#define reg_la3_data ((volatile uint32_t) CSR_LA_OUT_ADDR)
#define reg_la2_data ((volatile uint32_t) (CSR_LA_OUT_ADDR + 4))
#define reg_la1_data ((volatile uint32_t) (CSR_LA_OUT_ADDR + 8))
#define reg_la0_data ((volatile uint32_t) (CSR_LA_OUT_ADDR + 12))
#define reg_la3_data_in ((volatile uint32_t) CSR_LA_IN_ADDR)
#define reg_la2_data_in ((volatile uint32_t) (CSR_LA_IN_ADDR + 4))
#define reg_la1_data_in ((volatile uint32_t) (CSR_LA_IN_ADDR + 8))
#define reg_la0_data_in ((volatile uint32_t) (CSR_LA_IN_ADDR + 12))
#define reg_la3_oenb ((volatile uint32_t) CSR_LA_OE_ADDR)
#define reg_la2_oenb ((volatile uint32_t) (CSR_LA_OE_ADDR + 4))
#define reg_la1_oenb ((volatile uint32_t) (CSR_LA_OE_ADDR + 8))
#define reg_la0_oenb ((volatile uint32_t) (CSR_LA_OE_ADDR + 12))
#define reg_la3_iena ((volatile uint32_t) CSR_LA_IEN_ADDR)
#define reg_la2_iena ((volatile uint32_t) (CSR_LA_IEN_ADDR + 4))
#define reg_la1_iena ((volatile uint32_t) (CSR_LA_IEN_ADDR + 8))
#define reg_la0_iena ((volatile uint32_t) (CSR_LA_IEN_ADDR + 12))
I face the same problem with the uart registers
#define reg_uart_clkdiv ((volatile uint32_t)0x20000000)
#define reg_uart_data ((volatile uint32_t)0x20000004)
#define reg_uart_enable ((volatile uint32_t)0x20000008)
It seems that these registers do not exist.
Where do I find the correct specification for CI2309?
In the meantime, I was able to resolve the questions and could verify that my design is working properly. Nevertheless, I would recommend to clean up the specifications and the register namings, especially for the LA. For example it should become clear if "output" refers to CPU -> USER project or to USER project -> CPU and "output enable" should refer to the same direction as "output". Maybe "output" and "input" is not even a good name at all, here. Better use "CPU2USER" and "USER2CPU" or something similar.
In total, I am very happy with the result and appreciate your great achievements on open source hardware design!