首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多驱动网:综合好,模拟失败

多驱动网:综合好,模拟失败
EN

Stack Overflow用户
提问于 2018-08-21 06:53:20
回答 1查看 451关注 0票数 0

我对Verilog系统有一个基本的理解问题。我正在进行处理器设计,其中一些总线系统应该在几个处理单元(System模块)之间共享。通过一个仲裁器,一次只有一个模块是活动的,驱动总线,而所有其他模块都是高阻抗的。

在合成过程中,我消除了Vivado中的多驱动网络警告,不再存在任何总线冲突,但是模拟器给出了警告,即总线信号可能是多驱动的。我做了一个很小的例子代码,当'select‘是'10’时,我希望得到'data‘'11’?

虽然模拟在Vivado完全停止,但它与Cadence模拟器一起工作,但结果却是错误的-- 截图模拟

testbench.sv

代码语言:javascript
复制
`timescale 1ns / 1ps
module testbench_top();

logic [1:0] select;
logic [1:0] data;

top top_inst(.*);

initial
begin
  select = 0;
  #2 select = 1;
  #2 select = 2;
  #2 select = 0;;
end
  initial
    begin
      $monitor("t=%3d s=%b,d=%b\n",$time,select,data);
    end
endmodule

design.sv

代码语言:javascript
复制
`timescale 1ns / 1ps
module top
(
 input logic [1:0] select,
 output logic [1:0] data 
);

driver_1 driver_1_inst(.*);
driver_2 driver_2_inst(.*);

endmodule



module driver_1
(
 input logic [1:0] select,
 output logic [1:0] data 
);
always_comb
begin
  if (select == 2'b10)
        data = 2'b11;
    else
        data = 'z;
end
endmodule



module driver_2
(
 input logic [1:0] select,
 output logic [1:0] data 
);
always_comb
begin
  if (select == 2'b01)
        data = 2'b01;
    else
        data = 'z;
end
endmodule
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-21 08:25:11

假设您期望data信号的值--由驱动模块的两个输出驱动的top模块--将被解析(例如,当一个驱动器'z得到总线时)。

如果您将top.data信号声明为output wire logic [1:0] data,则会发生这种情况。

23.2.2.3节用于确定IEEE1800-2012标准的端口种类、数据类型和方向的规则如下:

对于输出端口,默认端口类型取决于如何指定数据类型:-如果省略数据类型或使用implicit_data_type语法声明数据类型,端口类型将默认为默认净网络类型。-如果用显式data_type语法声明数据类型,端口类型将默认为变量。

在您的例子中,第二个子句适用,因为您将data声明为output logic[1:0],这意味着它被解释为变量而不是网。变量上的多个值未被解析(在某些工具中也是非法的)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51943149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档