整體架構分析
input output
主要分為:
- ppi相關的icb總線信号, sysper ,aon,qspi0_ro(注意與qspi0的區分) 相關的icb總線信号,
- 與io有關的
- 與irq中斷有關的
- 與pll有關的
主要子產品
sirv_icb1to16_bus :将輸入的ppi_icb總線的信号線按照位址區間進行選擇, 分為:
AON - sirv_gnrl_cdc_tx sirv_gnrl_cdc_rx
HCLKGEN
GPIOA - sirv_gnrl_icb2apb apb_gpio
UART0
QSPI0 - sirv_flash_qspi_top(包含qspi0_ro相關總線)
PWM
UART1
QSPI1
I2C0
UART2
QSPI2
I2C1
SysPer
GPIOB
關鍵資訊解讀
sirv_gnrl_icb2apb
将icb協定轉換為apb協定,其中關鍵點在于apb沒有handshake, 是以rsp通道中,slave沒有icb_rsp_valid, 需要我們根據 apb_prdata構造相應的icb_rsp_valid線(具體如何實作沒看懂).
apb_gpio
關鍵在于對下面代碼的了解:
always @(posedge HCLK or negedge HRESETn) begin
if (~HRESETn) begin
r_gpio_sync0 <= 'h0;
r_gpio_sync1 <= 'h0;
r_gpio_in <= 'h0;
end else begin
r_gpio_sync0 <= gpio_in; //first 2 sync for metastability resolving
r_gpio_sync1 <= r_gpio_sync0;
r_gpio_in <= r_gpio_sync1; //last reg used for edge detection
end
end