【发布时间】:2018-08-21 06:53:20
【问题描述】:
我对 System Verilog 有一个基本的理解问题。我正在研究一种处理器设计,其中一些总线系统应该在几个处理单元(系统 Verilog 模块)之间共享。使用仲裁器时,一次只能激活一个模块来驱动总线,而所有其他模块都是高阻抗的。
我在综合过程中消除了 Vivado 中的多驱动网络警告,不再有任何总线冲突,但模拟器发出警告,总线信号“可能”是多驱动的。我做了一个很小的示例代码,当'select'是'10'时,我希望得到'data''11'?
虽然模拟在 Vivado 中完全停止,但它适用于 Cadence 模拟器,但结果错误 - screenshot simulation
testbench.sv
`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
`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
【问题讨论】:
标签: simulation fpga system-verilog bus