Перейти к содержанию
    

Boobrilla

Участник
  • Постов

    11
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный
  1. Тестбенч не кидал, ибо он стандартно "пустой", ничего не добавлял. Кроме наверное ресета = 1 . ENTITY Final IS END Final; ARCHITECTURE behavior OF Final IS COMPONENT Toplvl PORT( clk : IN std_logic; reset : IN std_logic; sinus1 : OUT std_logic_vector(16 downto 0) ); END COMPONENT; --Inputs signal clk : std_logic := '0'; signal reset : std_logic := '0'; --Outputs signal sinus1 : std_logic_vector(16 downto 0); -- Clock period definitions constant clk_period : time := 10 ns; BEGIN -- Instantiate the Unit Under Test (UUT) uut: Toplvl PORT MAP ( clk => clk, reset => reset, sinus1 => sinus1 ); -- Clock process definitions clk_process :process begin clk <= '0'; wait for clk_period/2; clk <= '1'; wait for clk_period/2; end process; -- Stimulus process stim_proc: process begin -- hold reset state for 100 ns. wait for 100 ns; wait for clk_period*10; reset <= '1'; -- insert stimulus here wait; end process; END;
  2. Ну выходит что так) Но я бы просто тогда наверно вермя такта менял, если бы этого позволяло задание
  3. По портам не заметил) Но, видимо, ISE позволяет) (оба in). По поводу подхода "в лоб" - я слишком еще не опытен. Лучше сделать так, как точно будет работать) Ну а если нужно будет изменить длину задержки, то просто добавлять/удалять кол-во переменных действий) В моем случае задержка была 190 ns = 19 по 10 ns.
  4. И снова я) В общем написал я вывод синусоиды используя алгоритм, все компилит, моделируется и т.д. Но либо он не берет значения из таблицы, либо просто плохой вывод,, не могу понять в чем причина и как с ней поступать. Была мысль просто убрать тип to_signed и описывать без него, либо как то правильно конвертировать в std_logic_vector. Но видимо не получилось. Вопрос в том, что я не правильно описал и как сделать лучше сейчас и в дальнейшем (совет какой-нибудь был бы кстати). library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; Entity sinyth is port( clk : in std_logic; resetn : in std_logic; z : in std_logic_vector(15 downto 0); x : in std_logic_vector(15 downto 0); y : in std_logic_vector(15 downto 0); sin : out std_logic_vector(15 downto 0)); end sinyth; Architecture masive of sinyth is type signed_array is ARRAY (natural range <>) of signed(15 downto 0); constant tan_array: signed_array(0 to 16) := ("0110010001111011", "0011101101100100", "0001111101011100", "0000111111101100", "0000011111111101", "0000001111111110", "0000000111111111", "0000000100000000", "0000000010000000", "0000000001000000", "0000000000100000", "0000000000010000", "0000000000001000", "0000000000000100", "0000000000000010", "0000000000000001", "0000000000000000"); signal x_array: signed_array (0 to 17) := (others => (others => '0')); signal y_array: signed_array (0 to 17) := (others => (others => '0')); signal z_array: signed_array (0 to 17) := (others => (others => '0')); begin process(clk) begin if resetn = '1' then x_array <= (others => (others => '0')); y_array <= (others => (others => '0')); z_array <= (others => (others => '0')); elsif rising_edge(clk) then if signed(z) < to_signed(0, 16) then x_array(x_array'low) <= signed(x) + signed(y); y_array(y_array'low) <= signed(y) - signed(x); z_array(z_array'low) <= signed(z) + tan_array(0); else x_array(x_array'low) <= signed(x) - signed(y); y_array(y_array'low) <= signed(y) + signed(x); z_array(z_array'low) <= signed(z) - tan_array(0); end if; for i in 1 to 14 loop if z_array(i-1) < to_signed(0,16) then x_array(i) <= x_array(i-1) + (y_array(i-1)/2**(i-1)); y_array(i) <= y_array(i-1) - (x_array(i-1)/2**(i-1)); z_array(i) <= z_array(i-1) + tan_array(i-1); else x_array(i) <= x_array(i-1) - (y_array(i-1)/2**(i-1)); y_array(i) <= y_array(i-1) + (x_array(i-1)/2**(i-1)); z_array(i) <= z_array(i-1) - tan_array(i); end if; end loop; end if; end process; sin <= std_logic_vector(y_array(y_array'length(15 downto 0))); end architecture masive;
  5. только так( file:///C:/Users/i.yakushevski/AppData/Local/Packages/Microsoft.SkypeApp_kzf8qxf38zg5c/LocalState/Downloads/03-Zakharov-Algoritmy-CORDIC-p-353.pdf (http://kit-e.ru/assets/files/pdf/2011_12_36.pdf))и там есть матч часть
  6. 1. Ну напишите на Veriloge (из спортивных соображений). Лишним не будет. 2. существующие взять не проблема, тут как раз таки академическая цель, для разбора написания их самому)
  7. X Y - это координаты вектора (x0 y0 это начальные координаты.) Z - сдвиг фазы (со знаком) Конкретно вызывает вопросы реализация алгоритма на VHDL. сама мат часть
  8. Всем привет. Всегда было проще разбираться в новом материале с помощью конкретных примеров. Но тут к сожалению пусто (либо я просто не нашел) в плане РАБОЧИХ примеров. По сухой теории сложно заходит. Поэтому пишу сюда в попытке получить помощь. (Сам не совсем новичок в программировании, но в программировании лог. устройств. чуть больше нолика ). Вот частичка того, что нужно, что самому получилось описать. В большей степени проблема в понимании основного куска кода, где и есть тот алгоритм, который двигает собственно вектор наш. library IEEE; use IEEE.STD_LOGIC_1164.ALL; use ieee.numeric_std.all; entity sinustest is port( clk: in STD_LOGIC; rst: in STD_LOGIC; dataz : out STD_LOGIC_VECTOR (15 downto 0); data : out STD_LOGIC_VECTOR (15 downto 0)); ); end sinustest; architecture Behavioral of sinustest is type arr_type is array (0 to 16) of std_logic_vector(15 downto 0); signal Y : arr_type; signal X : arr_type; signal Z : arr_type; signal a : arr_type:= ( "0011111111111111", "0010010111000111", "0001001111110110", "0000101000100010", "0000010100010110", "0000001010001100", "0000000101000110", "0000000010100011", "0000000001010001", "0000000000101001", "0000000000010100", "0000000000001010", "0000000000000101", "0000000000000011", "0000000000000001", "0000000000000001","0000000000000000"); -- описание сигналов и фазового сдвига на каждый такт type mode is (functioning1, functioning2); signal state : mode; begin process (clk) begin if clk = '1' and clk'event then -- начальное значение (очевидно) по x y. стартовая отсечка вектора if rst = '1' then X(0) <= "0011111111111111"; Y(0) <= "0000000000000000"; state <= functioning1; Z(0) <= "0000000000000000"; .... .... -- та дичь, где должно все происходить end if; dataz <= Z(16); data <= Y (16); end process; end Behavioral; CODE Вот мне бы с "дичью" разобраться, был бы благодарен
×
×
  • Создать...