2015-12-02 70 views
0

我想將我的系統時鐘(std_logic)轉換爲整數值(sys_clk)。因此,我正在使用以下庫:std_logic到整數轉換

library IEEE; 
use IEEE.std_logic_1164.all; 
use IEEE.numeric_std.all; 

-- code example 
sys_clk   : INTEGER; 
clk_clk   : in std_logic; 

如何將clk_clk轉換爲我的sys_clk?

感謝

回答

2

假設從std_logic'0''1'integer轉換爲01,你可以併發語句,如:

sys_clk <= 1 when (clk_clk = '1') else 0; 

sys_clk <= to_integer(unsigned'('0' & clk_clk)); 

此外,還有聲明中的一些語法錯誤。

+0

作品完美to_integer()你會使用它 - 感謝! – Norick

+0

不應該是'sys_clk <= to_integer(unsigned(「」&clk_clk));'? – JHBonarius

+0

是的,你也可以**這樣的東西,但記得使用'unsigned''因此'sys_clk <= to_integer(unsigned'(「」&clk_clk));',因爲沒有'''ModelSim生成錯誤:「中綴表達式中的模糊類型; ieee.std_logic_1164.STD_LOGIC_VECTOR或ieee.std_logic_1164.STD_ULOGIC_VECTOR。」。我的答案中的其他2個建議也起作用。 –

3

我不確定你有什麼想法,但將std_logic轉換爲integer聽起來不是個好主意。雖然你可以做到這一點,我建議你不應該做。

你不需要將sys_clk轉換爲整數來添加或測試它的值(我無法想象這樣做有任何用處)。

+1

除此之外 - 我認爲值得注意的是,作爲一個通用規則,如果它是一個數字,則使用像'integer'或'unsigned'這樣的數字類型,並將它看作一個數字。如果它不是一個數字 - 那麼使用'std_logic_vector',不要試圖把它當作一個數字 - 因爲它不是一個!我認爲它的解釋很好[這裏](http://parallelpoints.com/numbers-in-vhdl/) – davidhood2

0

你也可以自己編寫函數:

function to_integer(s : std_logic) return natural is 
begin 
     if s = '1' then 
     return 1; 
    else 
     return 0; 
    end if; 
end function; 

然後,像您使用std_logic_vectors

+0

我會反對調用這個函數'to_integer'這意味着'std_logic'可以很容易被解釋爲一個整數。它實際上是一種自定義轉換。實際上,您正在重現'conv_integer'函數,該函數已經在'IEEE.std_logic_arith'包中... [link](https://www.cs.sfu.ca/~ggbaker/reference/std_logic/arith /conv_integer.html) – JHBonarius