這是我之前問(wèn)別人的一個(gè)問(wèn)題,。
其實(shí)答案很明顯,讓FPGA和HPS同時(shí)控制某一個(gè)輸入或輸出是不可能的事情。就是我太笨,不知道怎么去想這個(gè)問(wèn)題,所以還是試了一下。

。。。。
其實(shí)稍微不是我這樣反應(yīng)遲鈍的也該發(fā)現(xiàn)問(wèn)題了,不過(guò)我這笨笨還是要分析綜合后才意識(shí)到問(wèn)題的。。。
我是傻×。。。不過(guò)還是寫一下,免得哪天又問(wèn)自己這個(gè)傻問(wèn)題。
問(wèn)題是這么來(lái)的:
de1-soc上FPGA和HPS可以通信,F(xiàn)PGA的外設(shè)可以由FPGA自己控制,而HPS也可以通過(guò)AXI bridge控制FPGA的外設(shè)。由于FPGA的工程文件在Quartus中編譯,而HPS中的可執(zhí)行文件是由.c文件生成的,并且在在下載時(shí)也是Quartus工程文件下載到FPGA,可執(zhí)行文件在HPS中運(yùn)行。所以我覺得這兩個(gè)過(guò)程基本上分開,應(yīng)該不會(huì)相互干擾。那么如果讓FPGA和HPS同時(shí)控制某一個(gè)輸入或輸出會(huì)不會(huì)出現(xiàn)矛盾?比如,F(xiàn)PGA的外設(shè)LED燈,假設(shè)在FPGA中用撥碼開關(guān)控制,而在HPS中又讓它以另一種固定方式亮燈,那么結(jié)果會(huì)變成怎樣?

。。。。
其實(shí)稍微不是我這樣反應(yīng)遲鈍的也該發(fā)現(xiàn)問(wèn)題了,不過(guò)我這笨笨還是要分析綜合后才意識(shí)到問(wèn)題的。。。
添加相應(yīng)文件后分析和綜合出錯(cuò):(類似這樣的)object HEX0 declared in a list of port declarations cannot be redeclared within the module body
如圖
我是笨蛋。其實(shí)還是因?yàn)閷?duì)FPGA和HPS之間的通信不理解。
那個(gè)叫做Qsys的東西,生成的文件中有一個(gè)模塊module,這個(gè)模塊就像我們一般自己寫的模塊那樣。在FPGA的工程中,我們?cè)陧攲游募袑?shí)例化這個(gè)模塊,從而讓HPS通過(guò)AXI bridge控制FPGA的外設(shè)。而在實(shí)例化這個(gè)模塊時(shí),LEDR作為輸出,相當(dāng)于已經(jīng)確定LED的輸出由誰(shuí)決定,此時(shí)再在FPGA中寫LED由誰(shuí)決定輸出就會(huì)報(bào)錯(cuò)。
唉,兩種方式控制一個(gè)東西的狀態(tài),肯定會(huì)打架的嘛。我個(gè)傻×。。。
同時(shí)可以看到,同樣傳到Qsys生成的系統(tǒng)中的KEY[0]和KEY[1],因?yàn)槭亲鳛檩斎刖蜎]有報(bào)錯(cuò)。而同樣作為輸出的HEX0,也報(bào)了同樣的錯(cuò)誤。
我是傻×。。。。居然問(wèn)這種問(wèn)題。。。
其實(shí)以前寫verilog文件時(shí)編譯出錯(cuò)時(shí)就犯過(guò)兩個(gè)地方對(duì)同一個(gè)輸出賦值的情況,也是這樣子報(bào)錯(cuò)的。。。額。。。我錯(cuò)了。。。居然在同一個(gè)地方跌倒了。。。