這是一個家庭作業的作品,但這裏是一個使用with
/select
的示例實體。 With
語句的操作類似於case
語句,但在併發邏輯中工作在進程之外。 Case
陳述和if
/elsif
樹通常用於時序邏輯,因爲它們只允許在一個過程中使用。
您也可以創建一個16位4位std_logic_vectors的常量數組,並使用您的4位i
值將其索引,以獲得o
值。這可能更容易閱讀和理解,儘管它沒有按照您的要求使用任何類型的with
或case
陳述。合成後,這兩種語法格式都會導致相同的結果。
這個with
語句將在給定任意輸出數據作爲要分配的文字時合成爲4x4輸入LUT。請注意,輸出數據(文字的左側列)將需要更改以符合您所需的「非線性映射」。
library ieee;
use ieee.std_logic_1164.all;
entity example is
port(i : in std_logic_vector(3 downto 0);
o : out std_logic_vector(3 downto 0)
);
end example;
architecture behav of example is
begin
with i select
o <= "1111" when "0000",
"1110" when "0001",
"1101" when "0010",
"1100" when "0011",
"1011" when "0100",
"1010" when "0101",
"1001" when "0110",
"1000" when "0111",
"0111" when "1000",
"0110" when "1001",
"0101" when "1010",
"0100" when "1011",
"0011" when "1100",
"0010" when "1101",
"0001" when "1110",
"0000" when "1111",
"XXXX" when others;
end behav;