【提问】verilog inout类型变量多分支赋值问题-FPGA常见问题社区-FPGA CPLD-ChipDebug

提问verilog inout类型变量多分支赋值问题

在日常设计中常常遇见数据总线连接多个设备,比如数据总线共连接三个设备,在满足条件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.

会提示有多个驱动源错误。

请问遇见此类问题大家怎么解决呢,请给个思路。谢谢。​

请登录后发表评论

    • chipdebug的头像-ChipDebugchipdebug徽章-创作大使-ChipDebug等级-LV3-ChipDebug超级版主0