DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Розробка порівнювача 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:49

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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