numeric_std에서 std_logic_vector 로의 변환과 관련된 질문이 있습니다. 나는 온라인에서 보았던 이동 평균 필터 코드를 사용하고 ADC 값을 필터링하여 값을 안정화했습니다.vhdl에서 numeric_std 서명되지 않은 코드에서 std_logic_vector로 변환
필터 패키지 코드는 다음과 같습니다
이library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
package filterpack is
subtype number is unsigned(27 downto 0);
type numbers is array(natural range <>) of number;
function slv_to_num(signal slv: in std_logic_vector) return number;
procedure MAF_filter(
signal x: in number;
signal h: inout numbers;
signal y: out number
);
end filterpack;
package body filterpack is
function slv_to_num(signal slv: in std_logic_vector) return number is
variable x: number := (others => '0');
begin
for i in slv'range loop
if slv(i) = '1' then
x(i+4) := '1';
end if;
end loop;
return x;
end function slv_to_num;
procedure MAF_filter(
signal x: in number;
signal h: inout numbers;
signal y: out number
) is
begin
h(0) <= x + h(1); -- h[n] = x[n] + h[n-1]
y <= h(0) - h(h'high); -- y[n] = h[n] - h[n-M]
end MAF_filter;
end package body filterpack;
내 최고 수준의 파일에서, 나는 MAF_filter 프로 시저를 호출. I는 MAF_Filter의 출력 (23 downto 0)을 std_logic_vector로 변환 할
adc_dat : out std_logic_vector (23 downto 0);
:로
Asign_x: x <= slv_to_num(adc_dat);
Filter: MAF_filter(x,h,y);
adc_dat
정의된다. 아무도 어떻게 필터 출력 'y'를 'std_logic_vector'로 변환 할 수 있습니까?많은 감사!
MAF 용으로 이미 만들어진 코드를 사용했습니다. 나는 함수 slv_to_num 정의 때문에 여분의 4 비트를 사용해야한다. – user3008991
나는'slv_to_num' 함수에 대한 제안으로 대답을 편집했습니다. – rick