專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

soc中如果讓FPGA和HPS同時(shí)控制某一個(gè)輸入或輸出會(huì)不會(huì)出現(xiàn)矛盾

作者:胡巧平   來(lái)源:胡巧平   點(diǎn)擊數(shù):  更新時(shí)間:2014年07月30日   【字體:

這是我之前問(wèn)別人的一個(gè)問(wèn)題,。


其實(shí)答案很明顯,讓FPGA和HPS同時(shí)控制某一個(gè)輸入或輸出是不可能的事情。就是我太笨,不知道怎么去想這個(gè)問(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ì)變成怎樣?
 
額,,,,然后我就建了一個(gè)工程,Qsys生成的系統(tǒng)中含LED和開關(guān),又在FPGA的頂層文件中讓LED隨開關(guān)亮滅。如下圖




。。。。

其實(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è)地方跌倒了。。。
關(guān)閉窗口

相關(guān)文章