【发布时间】:2009-10-02 16:32:31
【问题描述】:
我正在尝试测试VHDL 组件,但我似乎无法让这个输入端口给我任何行为。我尝试将端口设置为从“1”到“-”的所有内容,但它在模拟中仍然显示为“U”。任何可能有什么问题的建议?
【问题讨论】:
-
将其显式设置为 Z 使端口为我提供数据,但现在我似乎无法从端口读取内部信号:(
标签: vhdl
我正在尝试测试VHDL 组件,但我似乎无法让这个输入端口给我任何行为。我尝试将端口设置为从“1”到“-”的所有内容,但它在模拟中仍然显示为“U”。任何可能有什么问题的建议?
【问题讨论】:
标签: vhdl
对于 Inout 端口(例如在 RAM 中):
....
port(
data :inout std_logic_vector (DATA_WIDTH-1 downto 0);
....
-- Memory Write Block
-- Write Operation : When we = 1, cs = 1
MEM_WRITE: process (address, cs, we, data, address_1, cs_1, we_1, data_1) begin
if (cs = '1' and we = '1') then
mem(conv_integer(address)) <= data;
end if;
end process;
-- Tri-State Buffer control
data <= data_out when (cs = '1' and oe = '1' and we = '0') else (others=>'Z');
-- Memory Read Block
MEM_READ: process (address, cs, we, oe, mem) begin
if (cs = '1' and we = '0' and oe = '1') then
data_out <= mem(conv_integer(address));
else
data_out <= (others=>'0');
end if;
end process;
您使用条件为 inout 分配数据读取和写入。读取数据时,由另一个模块驱动。写的时候是内部驱动的。
【讨论】:
您需要一个明确的驱动程序来“Z”。
【讨论】:
我尝试将端口设置为从“1”到“-”的所有值,但在模拟中它仍然显示为“U”。
除了关于分配/读取输入端口的好答案之外,上面引用的文本可能与分配到两个不同位置的端口有关,因此它被解析为“U”。
【讨论】:
当使用 inout 端口时,当 VHDL 语句显然太复杂而无法通过综合来推断 IOBUF 时,我被一个实例化 OBUF 而不是 IOBUF 的综合工具所困扰。下面是一个简单的例子(假设所有信号都是std_logic)让我感到困惑:
data_a <= '1' when assert_a = '1' else '0';
data_b <= 'Z' when float_b = '1' else '0';
data_inout <= data_a when choose_a = '1' else data_b;
在我的失败案例中,综合为 data_inout 生成了一个 OBUF。我本来希望 IOBUF 来处理 choose_a='0' 和 float_b='1' 的情况,因为这应该将 'Z' 分配给 data_inout,但这不是我得到的。
【讨论】: