<@U016EM8L91B> Hi Tim, I am still not sure about t...
# chipignite
f
@Tim Edwards Hi Tim, I am still not sure about the correct addresses to access registers such as
reg_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!