Я хочу создать тестовый стимул для моего модуля I2S demux.Стимул содержит значения из измерения АЦП.Стандарт I2S предусматривает два тактовых сигнала: LRCLOCK и BITCLOCK.В моем случае LRCLOCK имеет частоту 48 кГц (что также является частотой дискретизации), а BITCLOCK равен 64 * LRCLOCK, что дает тактовую частоту 3,072 МГц.
При создании тактовых импульсов в тестовом стенде всегда естьсмещение между LRCLOCK и BITLCOCK.И я не могу объяснить, откуда исходит это смещение.
Я пытался создать процедуру генерации часов в соответствии с этим постом: VHDL - Как мне создать часы в тестовом стенде?
Оба предложенных решения демонстрируют одинаковое поведение.Я работаю с VIVADO 2016.4, симулятор имеет разрешение 1ps
Процедура:
procedure clk_gen(signal clk : out std_logic; constant FREQ : real) is
constant PERIOD : time := 1 sec / FREQ; -- Full period
constant HIGH_TIME : time := PERIOD / 2; -- High time
constant LOW_TIME : time := PERIOD - HIGH_TIME; -- Low time; always >= HIGH_TIME
begin
-- Check the arguments
assert (HIGH_TIME /= 0 fs) report "clk_plain: High time is zero; time resolution to large for frequency" severity FAILURE;
-- Generate a clock cycle
loop
clk <= '1';
wait for HIGH_TIME;
clk <= '0';
wait for LOW_TIME;
end loop;
end procedure;
Назначение часов:
process
begin
i2s_lrclock <= '1';
wait until reset /= '1';
clk_gen(i2s_lrclock,48.0e3);
end process;
process
begin
i2s_bitclock <= '1';
wait until reset /= '1';
clk_gen(i2s_bitclock,48.0e3*64);
end process;
Я ожидаю, что края обоих часов равныбудьте синхронными, но смещение ips_bitclock составляет 26 сек. до i2s_lrclock.