Программируемая логика - это не так уж и сложно. Разберемся вместе.
Ответить

тактовый умножитель на VHDL

Сб май 20, 2017 15:59:29

День добрый, уважаемые форумчане. Я новенький в VHDL, и первое задание мое было это восьмиразрядный тактовый умножитель . Причем не банальным способом где a*b, а иным. Немного поискав информации в интернете я нашел способ, получил умножитель в виде счетчика с регистром сдвига. В общем вот код.

Код:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
use IEEE.STD_LOGIC_unsigned.all;

entity test is
    port(
    clk, r: in std_logic;
    a : in std_logic_vector(7 downto 0);
    b : in std_logic_vector(7 downto 0);
    p : out std_logic_vector(15 downto 0)
    );
   
end test;

--}} End of automatically maintained section

architecture test of test is
begin
process(clk,r,a,b)
    variable pv,bp: std_logic_vector(15 downto 0);
    begin         
        pv:= "0000000000000000";
        bp:= "00000000" & b;
        if r='1' then
            pv:="0000000000000000";
            p<=pv;
        else
        if clk'event and clk = '1' then
        for i in 0 to 7 loop
                if a(i) = '1' then
                pv:= pv+bp;     
                p<=pv;
            end if;
            bp:= bp(14 downto 0) & '0';
        end loop;
        end if;     
        end if;http://radiokot.ru:5050/elecir/
        end process;
end test;


а вот результат моделирования.
Изображение

Как видите все работает. Но возникает вопрос. Почему он выдает результат сразу за 1 такт, а не за 8 тактов как должно быть? ведь каждое начало цикла должно входить в 1 такт. а тут сразу весь цикл в такт входит. Но мне нужен тактовый умножитель, чтобы за каждый такт он делал сложение pv с bp и последующим сдвигом влево. Подскажите как сделать так чтобы результат умножения был за 8 тактов а не за 1. Если есть возможность, желательно подскажите на примере, так как я начинающий в этом деле на словах могу не понять. Спасибо.
Вложения
testt.PNG
моделирование
(3.94 KiB) Скачиваний: 622

Re: тактовый умножитель на VHDL

Вс июл 23, 2017 02:29:11

хм, возможно for работает не так , как в Си, и код перерабатывается в большой блок логики.

для решения за 8 тактов возможно надо выделить эту итерацию в отдельное "устройство".
Ответить