我想將我的系統時鐘(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?
感謝
我想將我的系統時鐘(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?
感謝
假設從std_logic
爲'0'
和'1'
到integer
轉換爲0
和1
,你可以併發語句,如:
sys_clk <= 1 when (clk_clk = '1') else 0;
或
sys_clk <= to_integer(unsigned'('0' & clk_clk));
此外,還有聲明中的一些語法錯誤。
我不確定你有什麼想法,但將std_logic
轉換爲integer
聽起來不是個好主意。雖然你可以做到這一點,我建議你不應該做。
你不需要將sys_clk
轉換爲整數來添加或測試它的值(我無法想象這樣做有任何用處)。
除此之外 - 我認爲值得注意的是,作爲一個通用規則,如果它是一個數字,則使用像'integer'或'unsigned'這樣的數字類型,並將它看作一個數字。如果它不是一個數字 - 那麼使用'std_logic_vector',不要試圖把它當作一個數字 - 因爲它不是一個!我認爲它的解釋很好[這裏](http://parallelpoints.com/numbers-in-vhdl/) – davidhood2
你也可以自己編寫函數:
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
我會反對調用這個函數'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
作品完美to_integer()你會使用它 - 感謝! – Norick
不應該是'sys_clk <= to_integer(unsigned(「」&clk_clk));'? – JHBonarius
是的,你也可以**這樣的東西,但記得使用'unsigned''因此'sys_clk <= to_integer(unsigned'(「」&clk_clk));',因爲沒有'''ModelSim生成錯誤:「中綴表達式中的模糊類型; ieee.std_logic_1164.STD_LOGIC_VECTOR或ieee.std_logic_1164.STD_ULOGIC_VECTOR。」。我的答案中的其他2個建議也起作用。 –