Project Done By: Apurva Patel Vrajesh Patel Swapna Kalakonda.

20
Project Done By: Apurva Patel Vrajesh Patel Swapna Kalakonda
  • date post

    20-Dec-2015
  • Category

    Documents

  • view

    222
  • download

    1

Transcript of Project Done By: Apurva Patel Vrajesh Patel Swapna Kalakonda.

Project Done By:

Apurva PatelVrajesh PatelSwapna Kalakonda

• 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

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 surethe ans is going to be negative. For the ans to be negative we willtake 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 BXOR 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 nIF /if n = 1 the answer is negative indicated by

/pushing 80h into 80 LD! / LED registerTHEN ;

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

How to do Unsigned Division to get 16-bit Quotient and a 8-bitremainder.

* 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 QH D R> /R QH D SWAP /R D QH >R /R D QH MU/MOD /R2 QL QH R> ; /R2 QL QH

This takes in a 16-bit signed numerator and an 8-bit DenominatorTherefore, the sign numbers can be broken down into the followingcategories:1. 0000h to 7FFFh --> Positive numbers2. 8000h to FFFFh --> Negative numbersThe 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

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 ;

Cont...

Case 1:Subtracting when both the numbers are negative:

subcase 1:if B>A then get a positive answerelse 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 + Belse 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

: S- (A B -- A-B) 0< /checks wheather B<0 IF /B<0

SWAP /B A 0< /checks wheather A<0IF /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

Signsub.whp

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 ;

Cont...

Changes Made to The W8Y controller

DS

T

N

Tmux

Tregclkclr

Nregclkclr

ALU3

T1

N

Tin

alusel(3:0)

tsel(1:0)

tload

nload

y

Nmux

Nin

nsel

T1

Smux

stack16x8

N1

N1

N2

N2y

T1

N2

clkclr

pop

push

empty

full

d

ssel

0 1 2 3

0

0

1

1

DataStack_ALU

Changed fromMux2g to mux 3g

Output Y2 of ALU4

N2

ALU4

Input from 16x8Dpram

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 operation01h signed subtraction02h unsigned multiplication03h Square04h signed multiplication

Project 2 operations:hex code operations01h unsigned division02h signed division

If the entered hex code is different from the above codes all the LEDs will Light upindicating 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

?

MERRY CHRISTMAS AND A HAPPY NEW YEAR TO ALL