我有一个像这样的 VHDL 代码
`library IEEE;
entity slave is
Port ( clk : in STD_LOGIC;
rst : in STD_LOGIC;
Pdata_0 : inout STD_LOGIC;
Pdata_1 : inout STD_LOGIC;
Pdata_2 : inout STD_LOGIC
);
end slave;
architecture Behavioral of slave is
signal mem : std_logic_vector(2 downto 0);
….`
我想将 inout 端口分配给 internal 信号,将 internal 信号分配给 inout 端口。为此,我做了以下工作:
`Pdata_0 <= mem(0) when mem(0) = ‘0’ else ‘Z’;
Pdata_1 <= mem(1) when mem(0) = ‘0’ else ‘Z’;
Pdata_2 <= mem(2) when mem(0) = ‘0’ else ‘Z’;
mem(0) <= Pdata_0;
mem(1) <= Pdata_1;
mem(2) <= Pdata_2;`
我还有一个使用Systemverilog写的接口如下
`Interface intf (input bit clk);
bit rst;
tri1 [2:0] data;
logic [2:0] data_i;
assign data = data_i;
clocking cb_drv @(posedge clk);
// Input #1step
output #1ns data;
endclocking
clocking cb_mon @(posedge clk);
// Input #1step
input #1ns data;
endclocking
task write(input bit[2:0] data_in );
@(cb_drv);
data_i <= data_in;
repeat(3) @(cb_drv);
data_i <= ‘0;
entask
endinterface`
最后,在tesbench文件中,我使用来自接口的信号如下:
`Module tb();
bit clk;
always #5ns clk = ~clk;
interface evif(clk)
slave dut( .clk (clk),
.rst (evif.rst),
.Pdata_0 (evif.data[0]),
.Pdata_1 (evif.data[1]),
.Pdata_2 (evif.data[2]) );
endmodule`
在仿真中,我得到的波形仅在 P_data 信号的上升沿具有竞争条件,如下例所示。我该如何解决这个问题并获得清晰的信号?
我在 VHDL 中尝试了不同的组合赋值方式,但都没有奏效。