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

kodlan

Новичок*
  • Постов

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

  • Посещение

Репутация

0 Обычный

Контакты

  • ICQ
    Array
  1. Проблема в том что можно использовать только лог. операции и +, -. И только тип std_logic или std_logic_vector. Пробовал писать сам но что-то оно у меня вообще не работает. Выглядит моя писаниня примерно так: entity F is port( RST: in std_logic; CLK: in std_logic; CX: in std_logic; CY: in std_logic; EZ: in std_logic; DIO: inout std_logic_vector (7 downto 0); RDY: out std_logic ); end entity F; СХ и СУ - сигналы позволения записи значения DIO в регистры соответственно RGX и RGY. Как раз эти значения и нужно умножить. Далее вычисления я делаю так: process (CLK) begin if rising_edge(CLK) then -- write data to registers if CX = '0' and calc = '0' then RGX <= DIO; elsif CY = '0' and calc = '0' then RGY <= DIO; end if; -- do calculations if register is updated if CX = '0' or CY = '0' or calc = '1' then calc <= '1'; -- multiply X*Y using addition -- check if counter == Y if not count = RGY then -- XY = XY + X for i in 0 to 7 loop if (XY(i)='0' and RGX(i)='0' and p(i)='1') or (XY(i)='0' and RGX(i)='1' and p(i)='0') or (XY(i)='1' and RGX(i)='0' and p(i)='0') or (XY(i)='1' and RGX(i)='1' and p(i)='1') then XY(i) <= '1'; else XY(i) <= '0'; end if; if (XY(i)='0' and RGX(i)='1' and p(i)='1') or (XY(i)='1' and RGX(i)='0' and p(i)='1') or (XY(i)='1' and RGX(i)='1' and p(i)='0') or (XY(i)='1' and RGX(i)='1' and p(i)='1') then p(i+1) <= '1'; else p(i+1) <= '0'; end if; end loop; -- counter ++ -- add 1 to counter for i in 0 to 7 loop if (count(i)='0' and inc(i)='0' and cp(i)='1') or (count(i)='0' and inc(i)='1' and cp(i)='0') or (count(i)='1' and inc(i)='0' and cp(i)='0') or (count(i)='1' and inc(i)='1' and cp(i)='1') then count(i) <= '1'; else count(i) <= '0'; end if; if (count(i)='0' and inc(i)='1' and cp(i)='1') or (count(i)='1' and inc(i)='0' and cp(i)='1') or (count(i)='1' and inc(i)='1' and cp(i)='0') or (count(i)='1' and inc(i)='1' and cp(i)='1') then cp(i+1) <= '1'; else cp(i+1) <= '0'; end if; end loop; else RDY <= '1'; calc <= '0'; end if; end if; Вычисления я деляю за таким алгоритмом. Каждый такт я увиличиваю count на "00000001" тосле чего сравниваю с значением У. Если равны - не нужно продолжать. Если не равны считаю суму ХУ = ХУ + Х. И так далее. Но тут возникает проблема. Я никак не могу записать значение в регистры - туда записываеться значение с Х вместо 1 поданых на вход. Почему так? И второе - мои вычисления вообще ничего не дают! Никакие сигнали не меняют свое знаение. У кого есть какие-то идеи как сделать - ПОМОГИТЕ ПЛЗ!!!
×
×
  • Создать...