soc中如果让FPGA和HPS同时控制某一个输入或输出

soc中如果让FPGA和HPS同时控制某一个输入或输出会不会出现矛盾?

这是我之前问别人的一个问题。

其实答案很明显,让FPGA和HPS同时控制某一个输入或输出是不可能的事情。就是我太笨,不知道怎么去想这个问题,所以还是试了一下。
 
我还是记录一下,免得哪天又问自己这个傻问题。

问题是这么来的:
 
de1-soc上FPGA和HPS可以通信,FPGA的外设可以由FPGA自己控制,而HPS也可以通过AXI bridge控制FPGA的外设。由于FPGA的工程文件在Quartus中编译,而HPS中的可执行文件是由.c文件生成的,并且在在下载时也是Quartus工程文件下载到FPGA,可执行文件在HPS中运行。所以我觉得这两个过程基本上分开,应该不会相互干扰。那么如果让FPGA和HPS同时控制某一个输入或输出会不会出现矛盾?比如,FPGA的外设LED灯,假设在FPGA中用拨码开关控制,而在HPS中又让它以另一种固定方式亮灯,那么结果会变成怎样?
 
额,,,,然后我就建了一个工程,Qsys生成的系统中含LED和开关,又在FPGA的顶层文件中让LED随开关亮灭。如下图
 
。。。。

其实稍微不是我这样反应迟钝的也该发现问题了,不过我这笨笨还是要分析综合后才意识到问题的。。。
 
添加相应文件后分析和综合出错:(类似这样的)object HEX0 declared in a list of port declarations cannot be redeclared within the module body
 
如图
 
 
我是笨蛋。其实还是因为对FPGA和HPS之间的通信不理解。
 
那个叫做Qsys的东西,生成的文件中有一个模块module,这个模块就像我们一般自己写的模块那样。在FPGA的工程中,我们在顶层文件中实例化这个模块,从而让HPS通过AXI bridge控制FPGA的外设。而在实例化这个模块时,LEDR作为输出,相当于已经确定LED的输出由谁决定,此时再在FPGA中写LED由谁决定输出就会报错。
 
唉,两种方式控制一个东西的状态,肯定会打架的嘛。
 
同时可以看到,同样传到Qsys生成的系统中的KEY[0]和KEY[1],因为是作为输入就没有报错。而同样作为输出的HEX0,也报了同样的错误。
 
我居然问这种问题。。。其实以前写verilog文件时编译出错时就犯过两个地方对同一个输出赋值的情况,也是这样子报错的。。。额。。。我错了。。。居然在同一个地方跌倒了。。。
永不止步步 发表于12-17 09:18 浏览65535次
分享到:

已有1条评论

  • 畅学电子
    畅学电子 12-17 09:19

    额,也不一定吧,在一个工程中fpga可以控制hps的ddr3,同样hps也可以控制fpga,当然不是同时控制哈,不过还是能够跑通,不过fpga跟hps必须错开时间对同一个ddr3进行控制。

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67417个|学分:363791个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号