2015-05-09 162 views
0

我在寫一個順序計數器,它由一系列使用D觸發器組件的單計數器組件組成。在單個計數器中,我需要從的初始值q開始,但我在初始化時遇到問題。VHDL初始化std_logic

qSTD_LOGIC信號,我試圖按如下初始化:

signal q : STD_LOGIC := '0'; 

然而,當我運行使用的ModelSim程序它顯示的U一個值,好象它是未分配的。如果我在ModelSim中運行時強制凍結'0'q的信號,那麼它就起作用。

是否只有這樣才能在行爲描述開始時檢查值並將其設置爲'0'(如果未指定)?

如果我使用BIT而不是STD_LOGIC,則一切正常。

我會發布我的代碼,但我不想冒學術誠信違規,因爲這是一個學校項目。

+0

別的什麼東西開車Q?請注意,如果初始值爲'0'並且有驅動器驅動'U',則這兩個值將解析爲'U'。 (如果你不明白,請閱讀有關解析功能)。 –

+0

那麼,我將一個D觸發器組件的輸出'q'映射到問題中指定的'q'。你是這個意思嗎? –

+2

是的,那是你的問題。您需要清除觸發器中的'U',可以通過重置或'0'或'1'計時。 –

回答

0

這個原因適用於BIT而不是STD_LOGIC是因爲BIT有兩個值'1'和'0'(沒有值表示未初始化),STD_LOGIC有9個值其中之一是'U',它是值用來說「這個數值尚未設定」。

正如在評論中提到的,您可以通過在復位時指定一個值來解決這個問題 - 這是相當標準的做法 - 或者用一個初始化輸出(q)的值計時。

如果您想知道爲什麼信號聲明中的初始化不起作用,這是因爲並非所有的綜合工具都會承認這種初始化,ModelSim就是其中一種工具。當你把它放在FPGA上時,Quartus確實承認了這種初始化,但是Lattice Diamond或Xilinx ISE可能不會,但是如果包含復位條件,大多數器件都會提供POR(上電覆位),q將始終爲初始化,所以這是很好的做法。