Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > VHDL > adding 32bit numbers in 16bit processor

Reply
Thread Tools

adding 32bit numbers in 16bit processor

 
 
isnullpr@gmail.com
Guest
Posts: n/a
 
      10-15-2006
If I had a 16 bit processor, how do I add two 32 bit numbers with it?

 
Reply With Quote
 
 
 
 
Adrian Jongenelen Adrian Jongenelen is offline
Junior Member
Join Date: Sep 2006
Location: Wellington, New Zealand
Posts: 5
 
      10-15-2006
Think about how you do arithmetic in your head with base 10.

75
+58
----
133

5+8 = 3 + 1 carry
7 + 5 + 1 carry = 13
 
Reply With Quote
 
 
 
 
PeteS
Guest
Posts: n/a
 
      10-16-2006
http://www.velocityreviews.com/forums/(E-Mail Removed) wrote:
> If I had a 16 bit processor, how do I add two 32 bit numbers with it?


Search for 'multiple precision addition'


Cheers

PeteS

 
Reply With Quote
 
Ralf Hildebrandt
Guest
Posts: n/a
 
      10-16-2006
(E-Mail Removed) schrieb:
> If I had a 16 bit processor, how do I add two 32 bit numbers with it?


Every addition generates a carry-out. Therefore the carry-out from the
addition of the lower word has to be added during the addition of the
upper word.

Ralf
 
Reply With Quote
 
IsNull
Guest
Posts: n/a
 
      10-16-2006
OK, so first I add the lower 16 bits of each number.Then add the top 16
bits of each number, and to that I add the carry-out from adding the
bottom 16 bits...correct?... but how do I separate the upper bits from
the lower bits? is there some operation or instruction for that?
something like a ShiftR or ShiftL?

thanks for the help!

Ralf Hildebrandt wrote:
> (E-Mail Removed) schrieb:
> > If I had a 16 bit processor, how do I add two 32 bit numbers with it?

>
> Every addition generates a carry-out. Therefore the carry-out from the
> addition of the lower word has to be added during the addition of the
> upper word.
>
> Ralf


 
Reply With Quote
 
Frank Buss
Guest
Posts: n/a
 
      10-16-2006
IsNull wrote:

> but how do I separate the upper bits from
> the lower bits? is there some operation or instruction for that?
> something like a ShiftR or ShiftL?


If you have this:

signal foo: unsigned(32 downto 0);

you can select the upper bits like this:

foo(31 downto 16)

--
Frank Buss, (E-Mail Removed)
http://www.frank-buss.de, http://www.it4-systems.de
 
Reply With Quote
 
PeteS
Guest
Posts: n/a
 
      10-16-2006
IsNull wrote:
> OK, so first I add the lower 16 bits of each number.Then add the top 16
> bits of each number, and to that I add the carry-out from adding the
> bottom 16 bits...correct?... but how do I separate the upper bits from
> the lower bits? is there some operation or instruction for that?
> something like a ShiftR or ShiftL?
>
> thanks for the help!
>
> Ralf Hildebrandt wrote:
>
>>(E-Mail Removed) schrieb:
>>
>>>If I had a 16 bit processor, how do I add two 32 bit numbers with it?

>>
>>Every addition generates a carry-out. Therefore the carry-out from the
>>addition of the lower word has to be added during the addition of the
>>upper word.
>>
>>Ralf

>
>


I don't know if you are doing this with a processor or in HDL of some
description.

Here it is in pseudocode for a processor

we have two numbers - a and b, made up of a[low], a[high], b[low],
b[high], and a result r[low], r[high].

I'll note an important point at the end

Add a[low], b[low] -> r[low]. This may generate a carry, which we use below

add a[high], b[high], carry -> r[high]

There may be a final carry. If you add two values of precision n bits,
the result can have n+1 bits. That's why you chain the carry from the
low order addition.

In HDL, it's not any more work (especially if you use the primitives
with most compilers).

Cheers

PeteS
 
Reply With Quote
 
IsNull
Guest
Posts: n/a
 
      10-16-2006
ok, I see what you are saying..., I'm dealing with a 16-bit accumulator
based processor, I'm trying to figure out a good way of adding 32-bit
numbers with it using its assembly language... I only have 1 register
which is the accumulator and a very limited group of intuctions on its
instruction set.(instructions: Add, Addi, Load, Loadi,Comp,
ShR,BrN,BrNi,Jump,Jumpi,Store,Storei). for example:, if I were to add
4+3 and store it on memory location 1008 the code looks something like
this:
andi 0 # resets accumulator to 0
addi 4 # adds 4 to the accumulator
storei 1000 # stores the value on memory address 1000
andi 0
addi 3
storei 1004
loadi 1000
addi 1004
storei 1008

It's simple but confusing if you are used to x86 or MIPS programming.
so I'm trying to write something like that to add 32bit numbers...

thanks.

PeteS wrote:
> IsNull wrote:
> > OK, so first I add the lower 16 bits of each number.Then add the top 16
> > bits of each number, and to that I add the carry-out from adding the
> > bottom 16 bits...correct?... but how do I separate the upper bits from
> > the lower bits? is there some operation or instruction for that?
> > something like a ShiftR or ShiftL?
> >
> > thanks for the help!
> >
> > Ralf Hildebrandt wrote:
> >
> >>(E-Mail Removed) schrieb:
> >>
> >>>If I had a 16 bit processor, how do I add two 32 bit numbers with it?
> >>
> >>Every addition generates a carry-out. Therefore the carry-out from the
> >>addition of the lower word has to be added during the addition of the
> >>upper word.
> >>
> >>Ralf

> >
> >

>
> I don't know if you are doing this with a processor or in HDL of some
> description.
>
> Here it is in pseudocode for a processor
>
> we have two numbers - a and b, made up of a[low], a[high], b[low],
> b[high], and a result r[low], r[high].
>
> I'll note an important point at the end
>
> Add a[low], b[low] -> r[low]. This may generate a carry, which we use below
>
> add a[high], b[high], carry -> r[high]
>
> There may be a final carry. If you add two values of precision n bits,
> the result can have n+1 bits. That's why you chain the carry from the
> low order addition.
>
> In HDL, it's not any more work (especially if you use the primitives
> with most compilers).
>
> Cheers
>
> PeteS


 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Easy way to tell if a .DLL is 16bit or 32bit? Peter Lawton Windows 64bit 3 10-03-2006 05:39 PM
jpegging 16bit data Oskar Digital Photography 4 12-28-2004 07:18 AM
sources for DOS-16bit McBooCzech Python 3 12-11-2004 05:10 AM
8bit vs. 16bit color Terry Digital Photography 6 10-26-2004 04:42 AM
XP Error meesage:16Bit Windows Subsystem Faz Computer Support 2 10-01-2004 08:45 PM



Advertisments