Розробка порівнювача 32х розрядних чисел засобами мови VHDL»

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2014
Тип роботи:
Лабораторна робота
Предмет:
Реконфігуровані комп ютери
Варіант:
7

Частина тексту файла (без зображень, графіків і формул):

/ Звіт до лабораторної роботи №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х розрядні числа. Створив даний спецобчислювач і протестував його роботу.
Антиботан аватар за замовчуванням

29.11.2014 15:11-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!