![]() ![]() ![]() |
// ************************************************************************** // // // // eses eses // // eses eses // // eses eseses esesese eses Embedded Systems Group // // ese ese ese ese ese // // ese eseseses eseseses ese Department of Computer Science // // eses eses ese eses // // eses eseses eseseses eses University of Kaiserslautern // // eses eses // // // // ************************************************************************** // // The following module implements an analogon to the full adder of radix-B // // numbers that is used for subtraction. // // To see that sm and cout are of types int{B} and nat{2}, respectively, note // // that 0-(B-1+1) <= +x-(y+cin) <= B-1-(0+0), i.e., -B <= +x-(y+cin) <= B-1. // // Note further that -B = (-1)*B+0 and B-1 = 0*B+(B-1). // // ************************************************************************** // macro B = 4; // base of the radix numbers module FullSub(nat{B} ?x,?y,nat{2} ?cin,!cout,nat{B} !s) { event int{B} sm; sm = +x - (y + cin); cout = -(sm / B); s = sm % B; }

|