anatolich 0 19 августа, 2013 Опубликовано 19 августа, 2013 · Жалоба Cделал такой генератор синуса library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.numeric_std.all; entity sinnw is port ( clk : in std_logic; en : in std_logic; preset : in std_logic; adr : in std_logic_vector(1 downto 0); sin_reg : in std_logic_vector(15 downto 0); sine : out std_logic_vector(13 downto 0)); end sinnw; architecture behave_sine_cos of sinnw is signal sine_s : unsigned(13 downto 0); signal ampl : integer; signal cosw : natural; signal shft : natural; begin -- behave_sine_cos registers: process (clk, en) variable sine_d : integer; variable y_1, y_2, sine_m : integer; begin -- process registers if clk'event and clk = '1' then -- rising clock edge if (en = '1') then sine_d := cosw*y_1; sine_m := sine_d/4096-y_2; y_2 := y_1; y_1 := sine_m; sine_s <= to_unsigned(sine_m+ shft,14); sine <= std_logic_vector(sine_s); else y_1 := 0; y_2 := ampl; sine <= "00000000000000"; end if; end if; end process registers; setregisters: process (clk, preset) begin -- preset registers if clk'event and clk = '1' then -- rising clock edge if (preset = '1') then CASE adr IS WHEN "00" => ampl <= to_integer(signed(sin_reg)); WHEN "01" => cosw <= to_integer(unsigned(sin_reg)); WHEN OTHERS => shft <= to_integer(unsigned(sin_reg)); END CASE; end if; end if; end process setregisters; end behave_sine_cos; Кому интересно, то с регистры ampl="1111111110011001", cosw="0001111111111011", shft="0000111111000000" дают в поведенческой модели ModelSim отличный синус Но в postroute ближе С чем это может быть связано? Вроде бы у меня выход синхронный по фронту. Чем это можно поправить? Пробовал вынести вычисление в отдельный процесс, в нем буфер, а оттуда в синхронном процессе из буфера на выход... То же самое Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grumbler_2002 0 19 августа, 2013 Опубликовано 19 августа, 2013 · Жалоба Разверните шину синуса и убедитесь, что всё работает правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sergey_Bekrenyov 0 19 августа, 2013 Опубликовано 19 августа, 2013 · Жалоба а какую частоту задаете? У Вас умножитель стоит - он самый медленный будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anatolich 0 20 августа, 2013 Опубликовано 20 августа, 2013 · Жалоба Частота у меня 5МГц. Это же не много? Да в синусе видно, что на шину вываливаются не одновременно новые значения Еще одну защелку ставить? Сдвинуть на такт весь выход? Подвигал в PlanAhead. Собрал все выходы синуса поближе. Не помогло Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vetal 0 20 августа, 2013 Опубликовано 20 августа, 2013 · Жалоба Все нормально у вас на картинке. В postroute у вас показана картина с учетом задержек на кристалле. Вас должно интересовать значение сигнала только на фронте тактовой частоты. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
anatolich 0 20 августа, 2013 Опубликовано 20 августа, 2013 · Жалоба В принципе - да. ЦАП будет забирать по фронту. Спаяю - посмотрю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться