Здравствуйте. Так случилось что в универе у нас есть предмет где нас ДОЛЖНЫ обучать работе с ПЛИС. Но почему-то препод предпочитает рисовать всякие таблицы о том что есть внутри у ПЛИС, как взаимодействует ПЛИС и комп через PC 104. Лабораторные ведет другой препод - сам только закончил этот же универ и ничего нам объяснить не может, приходиться все самому узнавать.
Суть вопроса:
Используем ISE Web Pack.
На контрольной будут 2 вопроса:
1) Построить множитель на константу (лектор сказал будет схематично, просто изобразить что и как, без кода и прочего).
У нас на лабораторных никто ничего не знает как делать, я смог написать на VHDL следующее:
По моему варианту константа tg(PI/30). Я перевел в двоичную систему, оптимизировал константу в итоге вот что получилось.
Кстати, если кто захочет помочь - константу любую (желательно дробную) можно покзать, что бы я хоть мож по примеру разобраться (нудля схематического изображения)
Спойлер
library IEEE;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
use IEEE.STD_LOGIC_1164.ALL;
entity sep_scheme is
Port ( I : in std_logic_vector(31 downto 0);
O : out std_logic_vector(63 downto 0));
end sep_scheme;
architecture Behavioral of sep_scheme is
signal tmp: std_logic_vector(63 downto 0);
begin
tmp <= ("000" & I(31 downto 0) & "00000000000000000000000000000") + ("0000000000000" & I(31 downto 0) & "0000000000000000000")+("0000000000000000000" & I(31 downto 0) & "0000000000000")+("0000000000000000000000000" & I(31 downto 0) & "0000000")+("000000000000000000000000000000" & I(31 downto 0) & "00")+("00000000000000000000000000000000" & I(31 downto 0));
O <= tmp - (("00000" & I(31 downto 0) & "000000000000000000000000000")+("0000000" & I(31 downto 0) & "0000000000000000000000000")+("0000000000" & I(31 downto 0) & "0000000000000000000000")+("000000000000000000000" & I(31 downto 0) & "00000000000")+("0000000000000000000000000000" & I(31 downto 0) & "0000"));
end Behavioral;Так много нулей - не синтезируется sll команда, пришлось брать нужные разряды и склеивать с "0".
Так вот, нужно реализовать схематично это, а я даже не представляю как. Препод (тот что лабы ведет, молодой) тоже не может объяснить, просто съезжает с темы. Помогите пожалуйста, как оно чисто схематически (без привязки к апаратуре, на сумматорах) реализовывается покажите.
2) Память с сортировкой
До этого даже не дошли, а на зачете нужно будет тоже схематично нарисовать как оно работает. Лектор вообще ничего не объяснял по этому, лабораторные дальше множителя не сдвинулись.
В общем ждет нашу группу завал полный. Если кто знает как оно должно выглядеть, чисто схематически. нарисуйте пожалуйста. Больше действительно некуда обратиться.
P.S. С такими преподами сталкиваюсь впервые. Если не трудно спасите от завала.
P.P.S. Поясню что я делал. А именно получил такую последовательность:
Спойлер
0 0001 1010 1110 1000 0001 1100 0111 0101
Оптимизировал:
Код:
0 0001 1010 1110 1000 0001 1100 0111 0101 = 15
| | ||
0 0001 1010 1110 1000 0001 1100 1000 0101
| | | |
0 0001 1010 1110 1000 0010 0000 1000 0101
| | | |
0 0001 1011 0000 1000 0010 0000 1000 0101 = 8
| ||
0 0001 1100 0000 1000 0010 0000 1000 0101
| | | |
0 0010 0000 0000 1000 0010 0000 1000 0101 = 6 одиниц = 30, 20, 14, 8, 3, 1(без сдвига) ===== 5 + 4 = 9
0 0001 1010 1110 1000 0001 1100 0111 0101 - 0 0010 0000 0000 1000 0010 0000 1000 0101
537403525 - 451419253 = 85984272
Минимизировал в связи с особенностью умножения в двоичной системе. То есть нужны только сдвиги и суммирование. Чем меньше "1" тем меньше суммирования и сдвигов. Отсюда необходимость минимизации константы. Так как оптимизированное число оказалось больше - от результата нужно отнять лишнее. В итоге все равно меньше операций сдвига и суммирования чем если бы без таких манипуляций. И да, символы " | " почему то поехали(