DE0 Nano Altera FPGA 보드에 간단한 bruteforce 컨볼 루션 프로세서를 설정하려고합니다. 충동 (impulse_length-1-I)의 인덱스 루프의 연속 동안 감소하지 않지만, audio_buffer (I)의 인덱스는 않습니다 : 내 문제가VHDL : for 루프에서 인덱스 연산이 작동하지 않습니다.
LIBRARY ieee;
USE ieee.std_logic_1164.all;
use ieee.numeric_bit.all;
ENTITY Convolution IS
PORT( clock : IN std_logic;
audio_in : IN unsigned(15 downto 0);
audio_out : OUT unsigned(31 downto 0));
END Convolution;
ARCHITECTURE Convolution_Core OF Convolution IS
constant impulse_length : integer := 10;
type array16 is array(0 to impulse_length-1) of unsigned(15 downto 0);
type array32 is array(0 to impulse_length-1) of unsigned(31 downto 0);
constant impulse : array16 := (x"FFFF", x"FFFE", x"FFFD", x"FFFC",
x"FFFB", x"FFFA", x"FFF9", x"FFF8",
x"FFF7", x"FFF6");
signal audio_buffer : array16 := (others=> (others=>'0'));
signal seq_buffer : unsigned(31 downto 0);
BEGIN
process(clock)
begin
if rising_edge(clock) then
-- buffer the audio input in audio_buffer
for i in 0 to (impulse_length-2) loop
audio_buffer(i) <= audio_buffer(i+1);
end loop;
audio_buffer(impulse_length-1) <= audio_in;
for i in 0 to (impulse_length-1) loop
if i = 0 then
seq_buffer <= audio_buffer(i) * impulse(impulse_length-1-i);
else
seq_buffer <= seq_buffer + audio_buffer(i) * impulse(impulse_length-1-i);
end if;
end loop;
end if;
end process;
audio_out <= seq_buffer;
END Convolution_Core;
: 여기처럼 내 코드가 어떻게 표시되는지를 보여줍니다. 그게 내가 코드를 시뮬레이션하고 내 결과가 왜 틀린 지 알아내는 것을 좋아합니다.
ModelSim에서 볼 수있는 신호에 (impulse_length-1-i) 넣으려고했는데 최대/최소 32 비트 부호있는 범위 (+/- 2 147 483 647)에서 시작하고 다음 사이클이 0으로 점프하고 0으로 유지됩니다.
또한 프로세스 초기에 0에서 시작하여 i 대신 배열에 대한 인덱스로 사용할 수 있도록 변수 j를 프로세스 내부에서 사용하려고 시도했습니다. 하지만 그로 인해 ModelSim이 치명적인 오류를보고하게 만들었지 만 그 이유는 알 수 없습니다.
누군가 내가 잘못한 것을 설명 할 수 있습니까?
고지.
도 참조 http://stackoverflow.com/questions/13954193/is-process-in-vhdl-reentrant/13956532#13956532 –