我用VHDL創建了一個通用的多路複用器(以輸入數量和每個輸入的位數)。我測試了它,它工作正常,但我得到一個寬度不匹配警告: 寬度不匹配。 <輸出>具有8位的寬度,但分配的表達式是64位寬。 這是我的通用MUX的代碼。任何人都可以解釋我爲什麼得到這個警告?我的代碼有什麼問題?我的教授希望我在不使用流程的情況下執行此操作。由於通用多路複用器警告
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use work.package_log.all;
use IEEE.NUMERIC_STD.ALL;
entity mux_generic is
generic(N : natural :=8;
M : natural := 8);
-- N: number of inputs
-- M: bit per input/output
Port (input : in STD_LOGIC_VECTOR (N*M-1 downto 0);
sel: in STD_LOGIC_VECTOR (log2ceil(N)-1 downto 0);
output : out STD_LOGIC_VECTOR (M-1 downto 0));
end mux_generic;
architecture DataFlow of mux_generic is
begin
output <= input(M*(to_integer(unsigned(sel))+1) - 1 downto M*(to_integer(unsigned(sel))));
end DataFlow;
功能log2ceil是這樣定義的:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
package package_log is
function log2ceil(n : natural) return natural;
end package_log;
package body package_log is
function log2ceil (N : natural) return natural is
variable i, j : natural;
begin
i := 0;
j := 1;
while (j < N) loop
i := i+1;
j := 2*j;
end loop;
return i;
end function log2ceil;
end package_log;
這是一個綜合或模擬警告?爲什麼沒有錯誤?寬度不匹配應導致失敗。 – Paebbels
什麼工具報告錯誤,例如Altera Quartus Prime或其他? –
大家的眼睛都是一個忙,並且把'自然範圍x'類型的'sel'聲明爲'y';對於合適的x,y ......那些不必要的轉換是痛苦的看看! –