Vhdl 与0或1比较,以检测高阻抗

Vhdl 与0或1比较,以检测高阻抗,vhdl,Vhdl,我知道在可合成的VHDL代码中不允许与X或Z进行比较。但是,是否允许编写一个代码,将信号与0或1进行比较,以检测Z并暂停操作?代码如下: process(clk) begin if rising_edge(clk ) then if(rst = '0') then reg_0 <= (others => 'Z'); elsif(btf_start = '1') then reg_0 <= "ZZ" & frame_in;

我知道在可合成的VHDL代码中不允许与
X
Z
进行比较。但是,是否允许编写一个代码,将信号与
0
1
进行比较,以检测
Z
并暂停操作?代码如下:

process(clk)
begin
  if rising_edge(clk ) then
    if(rst = '0') then
      reg_0 <= (others => 'Z');
    elsif(btf_start = '1') then
      reg_0 <= "ZZ" & frame_in;
    elsif(t_btf_finish = '1') then
      reg_0 <= (others => 'Z');
    end if;
  end if;  
end process;

process(clk)
begin
  if rising_edge(clk) then
    if(reg_0(0) = '0' or reg_0(0) = '1') then
        -- DO SOME OPERATIONS
    else
        -- DO NOTHING
    end if;
  end if;
end process; 
过程(clk)
开始
如果上升沿(clk),则
如果(rst='0'),则
reg_0'Z');
elsif(btf_开始='1'),然后

不,这行不通。物理数字信号可以有两种状态,“0”和“1”。状态由信号上的电压定义:小于某个电压为“0”,大于该电压为“1”。即使是浮动(高z)信号也会有一些电压被解释为“1”或“0”


“Z”基本上表示某个源不驱动信号,允许另一个源驱动“0”或“1”。对于没有电源驱动信号的情况,信号通常会有一个上拉或下拉电阻器,以使其在默认情况下保持定义的“1”或“0”状态。

Thaks等待您的答复。这个解释很有道理。我很困惑,因为我在我的一个模块中使用了类似的代码,并且它在预合成(modelsim)和合成后模拟(ise)中都有效。但是当我在fpga中实现整个设计时,它并没有像预期的那样工作。通常情况下,合成后仿真应该检测所有这些故障,对吗?@dmm理想情况下应该检测,但这在很大程度上取决于供应商如何为其原语实现仿真库。显然,在你的例子中,模拟库并没有精确地模拟物理行为。老实说,考虑到这一点和类似的原因,我认为合成后模拟是浪费时间;在FPGA原型中使用逻辑分析仪(如芯片示波器或信号抽头)通常是一种更快、更现实的选择。