求救,FPGA内部不支持3态,怎么解决多驱动问题啊?
时间:10-02
整理:3721RD
点击:
FPGA内部不支持3态,怎么解决多驱动问题啊?
老实说,在正规的逻辑设计里,只在顶层做双向处理,其它子模块全部用单向。
但是双向总线挂多模块,就是像我这样在顶层处理的。
比如一条总线双向数据口 bus_d[15:0]接入FPGA,FPGA内部有2个模块要挂在这条总线上,模块1的数据输出bus_1[15:0]和模块片选cs1,模块2的数据输出bus_2[15:0]和模块片选cs2。
那么bus_d的双向控制该如下:
assign bus_d = (cs1 == 0) ? bus_1 : (cs2 == 0) ? bus2 : 16'hzzzz;
其实 ? : 这个三目运算符,是可以级联的,多级连起来,类似 if else if .....自己慢慢去品味吧
这样是相当于把模块的输出数据都连接到顶层了吧?
如果要输出的数据多这样就不太好了,所以我才想用总线,结果出问题了
我内部也是读写总线分开的,就是考虑在读其中一个模块时,其他的不能影响;所以想到三态。
你这也是一种办法,我会认真考虑的!
片内不能做三态,任何赋值z的语句都是不可综合的。你的问题无需用z态止入总线信号,只需要用一定的握手信号使得其处于非“使能”(enable)状态即可。
楼上的回复很对,谢谢分享经验