Частина тексту файла (без зображень, графіків і формул):
/
Звіт
до лабораторної роботи №1
з дисципліни «Реконфігуровані комп’ютери»
на тему: «Розробка порівнювача 32х розрядних чисел засобами мови VHDL»
Львів-2014
Лабораторна робота #1
На тему: Розробка порівнювача 32х розрядних чисел засобами мови VHDL
Мета:
Розробити схему порівняння 32-ох розрядних чисел. Все це реалізувати на Verilog (бажано), без використання уже вбудованого порівняльного елемента (тобто - створити свій порівняльний елемент, описати його логіку роботи). А на виході елемента отримати три сигнали: рівне, менше, або більше.При створенні схеми можна зробити синхронну, чи асинхронну.
Виконання роботи:
Маючи залишкові знання із мови VHDL я вирішив працювати саме з нею. Оскільки використовувати готові елементи порівнювання на більше-менше не можна, мені довелось придумати спосіб їх заміни. За умовою мій спецобчислювач складається із двох вхідних портів по 32 біти і одного вихідного на чотири біти ( для отримання результату).
constant equal:bit_vector(3 downto 0):="1111"; -- Числа, що ввелись є рівними
constant low:bit_vector(3 downto 0):="0000"; -- А є меншим ніж число B
constant high:bit_vector(3 downto 0):="0001"; -- А є більшим ніж число B
Мій компаратор базується на функції конкатенації і вибірки з кейсу результатів, котрі підходять. З двох чисел я виділяю по два старших біта і обєдную їх, опісля чого шукаю відповідну комбінацію в «кейсі» і виводжу результат.
Наповнення CASE:
when "0000"=>Result<=equal;
when "0101"=>Result<=equal;
when "1010"=>Result<=equal;
when "1111"=>Result<=equal;
when "0001"=>Result<= low;exit;
when "0010"=>Result<= low;exit;
when "0011" =>Result<=low; exit;
when "0100" =>Result<=high; exit;
when "0110" =>Result<=low; exit;
when "0111" =>Result<=low;exit;
when "1000" =>Result<=high;exit;
when "1001" =>Result<=high; exit;
when "1011" =>Result<=low; exit;
when "1100" =>Result<=high;exit;
when "1101" =>Result<=high; exit;
when "1110" =>Result<=high; exit;
Повний VHDL код компаратора:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity CALC is
port(
A : in BIT_VECTOR(31 downto 0);
B : in BIT_VECTOR(31 downto 0);
Clock:in bit;
RESULT : inout BIT_vector(3 downto 0)
);
end CALC;
architecture CALC of CALC is
constant equal:bit_vector(3 downto 0):="1111";
constant low:bit_vector(3 downto 0):="0000";
constant high:bit_vector(3 downto 0):="0001";
begin
PROCESS(A,B)
variable temp1:bit_VECTOR(3 downto 0);
BEGIN
for CNTR IN 31 downto 0 loop
if cntr=0 THEN EXIT;
end if;
temp1:=A(cntr downTO (cntr-1)) & B(cntr DOWNTO (cntr-1));
case temp1 is
when "0000"=>Result<=equal;
when "0101"=>Result<=equal;
when "1010"=>Result<=equal;
when "1111"=>Result<=equal;
when "0001"=>Result<= low;exit;
when "0010"=>Result<= low;exit;
when "0011" =>Result<=low; exit;
when "0100" =>Result<=high; exit;
when "0110" =>Result<=low; exit;
when "0111" =>Result<=low;exit;
when "1000" =>Result<=high;exit;
when "1001" =>Result<=high; exit;
when "1011" =>Result<=low; exit;
when "1100" =>Result<=high;exit;
when "1101" =>Result<=high; exit;
when "1110" =>Result<=high; exit;
when others=>Result<="0101";
end case;
end loop;
-- enter your statements here --
END PROCESS;
end CALC;
Наповнення TestBench:
calc_32:process
begin
wait for 50 ns;
A<="00000000000000000000000000000001";
B<="00000000000000000000000000000000";
wait for 50 ns;
A<="00000000000000000000000000000010";
B<="00000000000000000000000101010101";
wait for 50 ns;
A<="11111111111111111111111111111111";
B<="11111111111111111111111111111111";
wait for 50 ns;
A<="11111111111111111111111111111111";
B<="11111111111111111111111111111111";
end process;
Моделювання:
/
При A=0 та B=0 результат F, тобто числа рівні.При A=1 та B=0 результат 1, тобто число А є більшим.При A=2 та B=155 результат 0, тобто число А є меншим.
Висновок: на даній лабораторній роботі я навчився використовувати засоби мови VHDL для створення спецобчислювача, що порівнює 32х розрядні числа.Створив даний спецобчислювач і протестував його роботу.
Ви не можете залишити коментар. Для цього, будь ласка, увійдіть
або зареєструйтесь.
Ділись своїми роботами та отримуй миттєві бонуси!
Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!