200 likes | 318 Vues
This project presents a comprehensive Coded Hex Calculator capable of performing various mathematical operations including multiplication, square, addition, subtraction, and division for both signed and unsigned numbers. It uniquely handles negative and positive cases by employing absolute value functions and logic gates, providing visual feedback for negative results through LED indicators. The calculator incorporates efficient routines for signed arithmetic while ensuring accurate results for a 16-bit numerator and an 8-bit denominator, making it a sophisticated tool for hexadecimal calculations.
E N D
Coded Hex Calculator With signed & Unsigned Caluclations Project Done By: Apurva Patel Vrajesh Patel Swapna Kalakonda
Introduction • The purpose of this project is to build a coded Hex Calculator that does the following operations: - Multiply -Square of a number - Addions of signed and Unsigned Numbers - Subtractions of signed and Unsigned Numbers - Division - Signed Division
Multiplication case 1: - Multiplying two negative numbers--> will give the answer in positve so we will take the abs of the two numbers and then multiply: the abs function (Absolute Value Function): -This function will take the 2s’ complement of the number if the number is negative (signed) case 2: If a positive number is multiplied by a negative number then for sure the ans is going to be negative. For the ans to be negative we will take the abs of that negative number and then do a normal multiply and to show that the ans is negative will turn on the LED showing the negative sign. case 3: when both are positive then we will do the regular multiply
Sigmul.Whp : SM* (A B -- +(A*B)) OVER OVER /2Dup A B A B XOR 80 AND /n = ((A xor B) and 80h) --To check wheather only /one of them is negative DUP /A B n n >R /A B n ?ABS /call to the routine ?ABS to take the absolute /values of negative numbers either A or B or /both * /call to the normal unsigned multiplication routine /for multiplying / C = |A|*|B| R> /C n IF /if n = 1 the answer is negative indicated by /pushing 80h into 80 LD! / LED register THEN ;
Square This routine multiplies the input number by itself. The following is the whyp file for square. : SQUARE (A -- A*A ) DUP / A A * ; /call to unsigned multiplication routine for multiplying A*A
Unsigned Division How to do Unsigned Division to get 16-bit Quotient and a 8-bit remainder. * In order to get a 16-bit quotient we need to carry out the normal division two times. * Each time we will get a 8-bit quotient. * This routine will not give us an overflow unless a number is divided by 00h.
unsigndiv.whp : MU/MOD (NL NH D -- R Q)/THIS ROUTINE DIVIDES /16-BIT NUMERATOR WITH /8-BIT DENOMINATOR TO /GIVE 8-BIT QIUOTIENT AND /8-BIT REMAINDER -ROT /D NL NH DIV DIV DIV DIV DIV DIV DIV DIV ROT_DROP_SWAP ; /R Q : UM/MOD (NL NH D -- R QL QH) >R 00 R@ /NL NH 00 D D MU/MOD /R QHD R> /R QH D SWAP /R D QH >R /R D QH MU/MOD /R2 QL QH R> ; /R2 QL QH
Signed Division This takes in a 16-bit signed numerator and an 8-bit Denominator Therefore, the sign numbers can be broken down into the following categories: 1. 0000h to 7FFFh --> Positive numbers 2. 8000h to FFFFh --> Negative numbers The following are the cases for signed division: Divident Divisor Quotient Remainder Negative Negative Positive Negative Negative Positive Negative Negative Positive Negative Negative Positive Positive Positive Positive Positive
Signdiv.whp : DIVIDE* (NL NH D -- R QL QH) OVER OVER AND /NL NH D NH D 80 AND IF /NH<0 D<0 --> QLQH>0 AND R<0 ABS -ROT DABS /|D| |NL| |NH| ROT UM/MOD /R QL QH WAITBTN3 /R QL QH DROP DROP 0= /R IF /IF R = 0 NO NEED TO SHOW NEGATIVE SIGN 00 LD! /ELSE LIGHT UP THE SIG LED ELSE 80 LD! /SHOWS REMAINDER IS NEGATIVE THEN ELSE /EITHER NUMERATOR OR DENOMINTOR < 0 OR BOTH > 0 0< IF /D<0 AND NLNH >0 --> QLQH<0 AND R>0 ABS /NL NH |D| UM/MOD /R QL QH 0= >R SWAP 0= /CHECKS WHEATHER QUOTIENT IS ZERO OR NOT >R SWAP R> R> AND
Cont... IF /IF QUOTIENT IS ZERO NO NEED TO SHOW THE /NEGATIVE SIGN 00 LD! ELSE 80 LD! THEN WAITBTN3 00 LD! /R QL QH DROP DROP /R ELSE -ROT /D NL NH 0< /CHECKS WHEATHER NUMERATOR < 0 IF /D>0 AND NLNH<0 --> R<0 AND QLQH<0 DABS /D |NLNH| ROT UM/MOD /R QL QH 0= >R SWAP 0= /CHECKS WHEATHER QUOTIENT IS ZERO OR NOT >R SWAP R> R> AND
Cont... IF /IF QUOTIENT IS ZERO NO NEED TO SHOW THE /NEGATIVE SIGN 00 LD! ELSE 80 LD! THEN WAITBTN3 /R QL QH DROP DROP /R 0= IF /CHECKS WHEATHER QUOTIENT IS ZERO OR NOT 00 LD! ELSE 80 LD! THEN ELSE /D>0 NLNH>0 --> R>0 QLQH>0 ROT /NL NH D UM/MOD /R QL QH WAITBTN3 /R QL QH DROP DROP /R THEN THEN THEN ;
Signed Subtraction Case 1: Subtracting when both the numbers are negative: subcase 1: if B>A then get a positive answer else get a negative answer Case 2: When one of A or B is a negative number subcase 1: if A ‘+ve’ and B ‘-ve’ then ans = A + B else if A ‘-ve’ and B is ‘+ve’ then ans = -(A+B) Case 3: when both are positive ans = A-B and the ans is postive or neg depending on the magnitude of A and B
Signsub.whp : S- (A B -- A-B) 0< /checks wheather B<0 IF /B<0 SWAP /B A 0< /checks wheather A<0 IF /A<0 and B<0 - 0< / C = B-A IF /checks wheather C<0 ABS ELSE 80 LD! THEN ELSE /B<0 and A>0 SWAP ABS + /C = A-(-B) 0< /if C<0 It is a overflow IF FF LD! /Indicates a overflow THEN THEN ELSE SWAP 0< IF /B>0 and A<0 ABS + /C = -A-B 0< /If C is negative indicates a overflow /else answer is negative and 2'scomplement /of C
Cont... IF FF LD! ELSE 80 LD! THEN ELSE /A>0 and B>0 SWAP - /C = A - B 0< IF /if B>A then answer is negative and 2'scomplement of ABS /of C 80 LD! THEN THEN THEN ;
Changes Made to The W8Y controller Changed from Mux2g to mux 3g Input from 16x8 Dpram N2 ALU4 Output Y2 of ALU4
Whyp Words Added to W8Y controller * mpp : Carries out the multiplication of the numbers in the data stack when called 8 times * divide: carries out the division of the numbers in the data stack when called 8 times to leave a 8-bit quotient and 8-bit remainder * ABS: takes the absoloute value of the number in T-Reg * DABS: Takes the 2s complement of a 16-bit number and leaves the higher 8-bit in T-Reg and the lower 8-bits in N-Reg
User’s Guide 1. First enter the code for the operation to be carried out. Project 1 operations: hex code operation 01h signed subtraction 02h unsigned multiplication 03h Square 04h signed multiplication Project 2 operations: hex code operations 01h unsigned division 02h signed division If the entered hex code is different from the above codes all the LEDs will Light up indicating a NULL operation. 2. Enter the required hex values
Cont … user guide * For division enter the lower 8-bits of numerator first and followed by higher 8-bits followed by the denominator * Press BTN3 to enter the values through the switches. * Negative numbers will be indicated by turning on the most significant LED by pushing 80h in the LD-reg * Overflow is indicated by lighting up all the LEDs