2013-07-22 22 views
2

我知道,它不允許與可合成VHDL代碼中的XZ進行比較。但是,是否允許編寫一個代碼,在該代碼中,我將信號與01進行比較以檢測Z並暫停操作?代碼如下:與0或1進行比較以檢測高阻抗

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; 

回答

4

不,這是行不通的。物理數字信號只能有2個狀態,'0'和'1'。狀態由信號上的電壓來定義:小於某個電壓爲「0」,大於該電壓爲「1」。即使浮動(高-z)信號也會有一些電壓被解釋爲「1」或「0」。 'Z'基本上表示某個信號源不驅動信號,允許不同的信號源驅動'0'或'1'。對於沒有信號源驅動信號的情況,信號通常會有一個上拉或下拉電阻,以使其默認保持在定義的「1」或「0」狀態。

+0

Thaks爲您的答覆。解釋是有道理的。我很困惑,因爲我在其中一個模塊中使用了類似的代碼,並且它在預綜合(modelsim)和後綜合模擬(ise)中都起作用。但是當我用fpga實現整個設計時,它並沒有像預期的那樣工作。通常情況下,後綜合模擬應該檢測所有這些故障? – dmm

+1

@dmm理想情況下,它應該,但它強烈依賴於供應商如何爲其原語實現模擬庫。顯然在你的情況下,模擬庫沒有完全建模物理行爲。老實說,由於這個和類似的原因,我認爲後合成模擬浪費時間;在FPGA原型中使用諸如Chipscope或Signal Tap之類的邏輯分析儀通常是更快更實際的選擇。 – zennehoy

相關問題