Hallo Forum!
Gesucht wird eine schnelle Addition, die einen eventuellen Überlauf
gleich mit addiert.
Hintergrund ist die Berechung von UDP-Checksummen.
Bisher verwende ich zwei Additionen:
1 | function udp_checksum( valuea : unsigned( 15 downto 0);
|
2 | valueb : unsigned( 15 downto 0)) return unsigned is
|
3 | variable addcarry: unsigned( 16 downto 0);
|
4 | variable result: unsigned( 15 downto 0);
|
5 | begin
|
6 | addcarry := resize( valuea, addcarry'length) + valueb;
|
7 | result := addcarry( 16 downto 16) + addcarry( 15 downto 0);
|
8 | return result;
|
9 | end function udp_checksum;
|
Geht das auch eleganter, sprich ohne zwei Additionen hintereinander?
Wie wurde das z.B. beim Z80 gelöst? Da gibt es auch einen ADC (add with
carry) Befehl?
Duke