DE2帶的IP核ISP12362報錯問題解決 Error:avalon_slave_1_irq: associatedAddressablePoint out of range

問題來源與對友晶提供的ISP1362 IP核的使用,因爲Quartus II版本問題,它提供的IP基於7.0版本,而我用的版本爲11.1,在SOPC Builder中從新加載IP,就出現了上述的錯誤報告,在網上找了資料,以一下方法解決:ios

 
將avalon_slave_1_irq 的Inteface類型設置爲interrupt_sender,Signal Type設置爲irq_n,後續中斷設置爲對將avalon_slave_0,IP編輯過程是沒錯誤了,可是添加的時候會出現將avalon_slave_0不能同時存在兩個中斷的問題,坑人的解決方法在此表示失效了。
 
而後就發散思惟,本身添加了一個 avalon_slave_1  Inteface,IP編輯和添加都沒錯誤,只是警告這個總線沒有信號相連,忽略,而後generate,麻煩來了,SOPC生成報錯,生成過程被迫停止。
 
繼續發散,將兩個中斷在HDL代碼中合併,而後全世界都安靜了,但是不要小瞧錯誤的隱藏能力,在Nios II編程事後,給你一個大大的耳光——「沒法識別的硬件設備」。鬱悶的結果!
 
沒辦法,去GOOGLE找大牛吧,在ALTERA官網,有人說用以下文件代替原來的isp1362_if.v
module ISP1362_CTRL (//Avalon Interface
                                clk, address, readdata, writedata, writedata_avalon_slave_1, chipselect_n, read_n, write_n, reset_n, write_n_avalon_slave_1, irq_n, irq_n_avalon_slave_1,
                                //Phillips USB controller
                                OTG_ADDR, OTG_DATA, OTG_CS_N, OTG_RD_N, OTG_WR_N, OTG_RST_N, OTG_INT0, OTG_INT1, OTG_FSPEED, OTG_LSPEED, OTG_DACK0_N, OTG_DACK1_N);
        
        //Avalon Interface
        input clk, chipselect_n, read_n, write_n, reset_n, write_n_avalon_slave_1;
        input [1:0] address;
        input [15:0] writedata;
        input [7:0] writedata_avalon_slave_1;
        output [15:0] readdata;
        output irq_n, irq_n_avalon_slave_1;
        
        //Phillips USB controller
        output [1:0] OTG_ADDR;
        inout [15:0] OTG_DATA;
        output OTG_CS_N, OTG_RD_N, OTG_WR_N, OTG_RST_N;
        input OTG_INT0, OTG_INT1;
        output OTG_FSPEED, OTG_LSPEED, OTG_DACK0_N, OTG_DACK1_N;
        
        //Registers
        reg [15:0] data, readdata;
        reg [1:0] OTG_ADDR;
        reg OTG_CS_N, OTG_RD_N, OTG_WR_N;
        reg irq_n, irq_n_avalon_slave_1;
        
        //Assignments
        assign OTG_RST_N = reset_n;
        assign OTG_DATA = OTG_WR_N ? 16'hZZZZ : data;
        assign OTG_DACK0_N = 1'b1, OTG_DACK1_N = 1'b1;
        assign OTG_FSPEED = 0, OTG_LSPEED = 0;
        
        //Reset condition
        always @ (posedge clk or negedge reset_n)
        begin
                if (reset_n==0)
                begin
                        data            <=  0;
                        readdata        <=      0;
                        OTG_ADDR        <=      0;
                        OTG_CS_N        <=      1;
                        OTG_RD_N        <=      1;
                        OTG_WR_N        <=      1;
                        irq_n                                   <=      1;
                        irq_n_avalon_slave_1    <=      1;
                end
                
                else
                begin
                        data            <=      writedata;
                        readdata        <=      OTG_DATA;
                        OTG_ADDR        <=      address;
                        OTG_CS_N        <=      chipselect_n;
                        OTG_RD_N        <=      read_n;
                        OTG_WR_N        <=      write_n;
                        irq_n                                   <=      OTG_INT0;
                        irq_n_avalon_slave_1    <=      OTG_INT1;
                end
        end
endmodule
 
 
後面的過程愉快而輕鬆,換過的方法很是多,鬱悶到死,找資料仍是GOOGLE靠譜。
相關文章
相關標籤/搜索