關於自定義IP 1、接口 a、全局信號 時鍾(Clk),復位(reset_n) b、avalon mm slave 地址(as_address) 片選(as_chipselect /as_chipselect_n) 寫請求(as_write / as_write_n) 寫數據(as_writedata(按照字節對齊,8/16/32位位寬) 讀請求(as_read / as_read_n) 讀數據(as_readdata)(按照字節對齊,8/16/32位位寬) 等待信號(as_waitrequest / as_waitrequest_n) 讀數據有效信號(as_data_valid) 中斷請求(irq / irq_n) c、導出信號,導出到NIOS 系統頂層,分配到IO,或者連接到Qsys系統以外的邏輯 2、內部寄存器和線網的定義 數據寄存器(讀/寫) 狀態寄存器(IP運行狀態、數據狀態……) 控制寄存器 中斷屏蔽寄存器 用戶自定義寄存器 3、Avalon總線對寄存器的讀寫 //寫入數據 always@(posedge clk or negedge reset_n) if(!reset_n) channel <= 3'd0; else if(as_chipselect && as_write && (as_address == 1)) channel <= as_writedata[2:0]; //寫指定地址實現相應功能,不考慮寫入值 always@(posedge clk or negedge reset_n) if(!reset_n) control <= 1'd0; else if(as_chipselect && as_write && (as_address == 3)) control <= 1'd1; else control <= 1'd0; //讀寄存器邏輯 always@(posedge clk or negedge reset_n) if(!reset_n) as_readdata <= 16'd0; else if(as_chipselect && as_read)begin case(as_address) 0:as_readdata <= {4'd0, data}; 1:as_readdata <= {13'd0, channel}; 2:as_readdata <= {8'd0, freq_sclk}; 4:as_readdata <= {15'd0, irqmask}; 5:as_readdata <= {14'd0, status}; default:as_readdata <= 16'd0; endcase end 4、用戶邏輯對寄存器的賦值 always@(posedge clk or negedge reset_n) if(!reset_n) status[0] <= 1'd0; else if(Conv_Done) status[0] <= 1'b1; else if(as_chipselect && as_read && (as_address == 0)) status[0] <= 1'b0; always@(posedge clk or negedge reset_n) if(!reset_n) status[1] <= 1'd0; else if(ADC_State) status[1] <= 1'b1; else status[1] <= 1'b0;
