在日常设计中常常遇见数据总线连接多个设备,比如数据总线共连接三个设备,在满足条件1时候读写设备1的数据,在满足条件2的时候,读写设备2的数据,在满足条件3时候,读写设备3数据。但是在顶层,如何连接数据总线则成了一个问题。
为了简化例程,我写了两个简单测试程序,总线假定一位。
第一个程序如下:
module top(
input a,b,c,se1_1,se1_2, se1_3,
inout data
);
assign data = (se1_1==1’b1)?a:1’bz;
assign data = (se1_2==1’b1)?b:1’bz;
assign data = (se1_3==1’b1)?c:1’bz;
endmodule
综合的时候会有警告:WARNING:Xst:2039 – Unit top: 1 multi-source signal is replaced by logic (pull-up yes): data_MLTSRCEDGE.
听网友说inout类型变量用IOBUF原语比较好于是我把程序改为如下:
module top(
input a,b,c,se1_1,se1_2, se1_3,
inout data
);
wire a,b,c;
wire a_z =1’bz;
wire b_z =1’bz;
wire c_z =1’bz;
IOBUF IOBUF_1(
.I(a),
.O(a_z),
.T(se1_1),
.IO(data)
);
IOBUF IOBUF_2(
.I(b),
.O(b_z),
.T(se1_2),
.IO(data)
);
IOBUF IOBUF_3(
.I(c),
.O(c_z),
.T(se1_3),
.IO(data)
);
endmodule
但是综合直接报错:ERROR:Xst:528 – Multi-source in Unit <top> on signal <data>; this signal is connected to multiple drivers.
会提示有多个驱动源错误。
请问遇见此类问题大家怎么解决呢,请给个思路。谢谢。