HOME       UP       PREV       NEXT (RTL Synthesis: Summary)  

Examples of converstion to binary (bit lane) form

Sign extend an arg to width n:

fun sex n nil = if n<=0 then nil else raise "cannot do sex on an empty list"
|   sex n [item] = if n<=1 then [item] else item :: sex (n-1) [item]
|   sex n (h::t) = h :: (sex (n-1) t);

Example: integer constant:
| pandex w (Num n) = if n = 0 then [ xi_false ]	else 
    let fun k 0 = nil  (* lsb first *)
	|   k n = (if (n mod 2)=1 then xi_true else xi_false) :: k (n div 2)
        fun q 0 = [xi_true]  (* final negative sign bit *)
	|   q n = (if (n mod 2)=0 then xi_true else xi_false) :: q (n div 2)
	in if (n >= 0) then k n else sex w (q (0-1-n)) end
Example: -4 in a 6 bit field is 111100. Example: conditional expression: a broadside multiplexor:
| pandex w (Query(g, t, f)) = 
    let val t' = pandex w t
        val f' = pandex w f
	fun k([], []) = []
	|   k(a, nil) = k(a, [ false ])
	|   k(nil, b) = k([ false ], b)
	|   k(a::at, b::bt) = gen_mux2(g, a, b) :: k(at, bt)
	in k(t', f') end

See other examples in the multipler/adder additional material.


63: (C) 2008-11, DJ Greaves, University of Cambridge, Computer Laboratory.