Verification of Parameterised FPGA Circuit Descriptions with Layout ...
Verification of Parameterised FPGA Circuit Descriptions with Layout ...
Verification of Parameterised FPGA Circuit Descriptions with Layout ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
APPENDIX C. PLACED COMBINATOR LIBRARIES 245<br />
} {<br />
a1 ; A ; a2<br />
at (0,0).<br />
b1 ; B ; b2<br />
at (0, height(a1 ; A ; a2)).<br />
c1 ; C ; c2<br />
at (width(b1 ;B ; b2), height(a1 ; A ; a2)).<br />
d1 ; D ; d2<br />
at (width (b1 ;B ; b2),<br />
max (height (c1 ;C ; c2) + height(a1 ;A ; a2), height(e1 ; E ; e2))).<br />
e1 ; E ; e2<br />
at (max (width (a1 ;A ;a2), width(c1 ;C ; c2) + width(b1 ;B ; b2)), 0).<br />
}<br />
theory irregular_grid = Quartz<strong>Layout</strong>:<br />
section {* Function definitions *}<br />
consts<br />
struct:: "(((’t15=>’t16=>bool,’t15=>’t16=>int)block)*((’t18=>’t19=>bool,’t18=>’<br />
t19=>int)block)*((’t21=>’t22=>bool,’t21=>’t22=>int)block)*((’t24=>’t25=>bool<br />
,’t24=>’t25=>int)block)*((’t27=>’t28=>bool,’t27=>’t28=>int)block))=>(’t15*’<br />
t18*’t21*’t24*’t27)=>(’t16*’t19*’t22*’t25*’t28)=>bool"<br />
height:: "(((’t15=>’t16=>bool,’t15=>’t16=>int)block)*((’t18=>’t19=>bool,’t18=>’<br />
t19=>int)block)*((’t21=>’t22=>bool,’t21=>’t22=>int)block)*((’t24=>’t25=>bool<br />
,’t24=>’t25=>int)block)*((’t27=>’t28=>bool,’t27=>’t28=>int)block))=>(’t15*’<br />
t18*’t21*’t24*’t27)=>(’t16*’t19*’t22*’t25*’t28)=>int"<br />
width:: "(((’t15=>’t16=>bool,’t15=>’t16=>int)block)*((’t18=>’t19=>bool,’t18=>’t19<br />
=>int)block)*((’t21=>’t22=>bool,’t21=>’t22=>int)block)*((’t24=>’t25=>bool,’<br />
t24=>’t25=>int)block)*((’t27=>’t28=>bool,’t27=>’t28=>int)block))=>(’t15*’t18<br />
*’t21*’t24*’t27)=>(’t16*’t19*’t22*’t25*’t28)=>int"<br />
irregular_grid:: "((((’t15=>’t16=>bool,’t15=>’t16=>int)block)*((’t18=>’t19=>bool<br />
,’t18=>’t19=>int)block)*((’t21=>’t22=>bool,’t21=>’t22=>int)block)*((’t24=>’<br />
t25=>bool,’t24=>’t25=>int)block)*((’t27=>’t28=>bool,’t27=>’t28=>int)block))<br />
=>(’t15*’t18*’t21*’t24*’t27)=>(’t16*’t19*’t22*’t25*’t28)=>bool, (((’t15=>’t16<br />
=>bool,’t15=>’t16=>int)block)*((’t18=>’t19=>bool,’t18=>’t19=>int)block)*((’<br />
t21=>’t22=>bool,’t21=>’t22=>int)block)*((’t24=>’t25=>bool,’t24=>’t25=>int)<br />
block)*((’t27=>’t28=>bool,’t27=>’t28=>int)block))=>(’t15*’t18*’t21*’t24*’t27)<br />
=>(’t16*’t19*’t22*’t25*’t28)=>int)block"<br />
defs<br />
struct_def: "struct == % (A, B, C, D, E) (a1, b1, c1, d1, e1) (a2, b2, c2, d2, e2<br />
). Def (a1 ;;; A ;;; a2) & Def (b1 ;;; B ;;; b2) & Def (c1 ;;; C ;;; c2) &<br />
Def (d1 ;;; D ;;; d2) & Def (e1 ;;; E ;;; e2)"<br />
height_def: "height == % (A, B, C, D, E) (a1, b1, c1, d1, e1) (a2, b2, c2, d2, e2<br />
). max ((Height (a1 ;;; A ;;; a2)) + (Height (b1 ;;; B ;;; b2))) ((max ((<br />
Height (a1 ;;; A ;;; a2)) + (Height (c1 ;;; C ;;; c2)) + (Height (d1 ;;; D<br />
;;; d2))) ((Height (e1 ;;; E ;;; e2)) + (Height (d1 ;;; D ;;; d2)))))"<br />
width_def: "width == % (A, B, C, D, E) (a1, b1, c1, d1, e1) (a2, b2, c2, d2, e2).<br />
max ((Width (a1 ;;; A ;;; a2)) + (Width (e1 ;;; E ;;; e2))) ((max ((Width (<br />
b1 ;;; B ;;; b2)) + (Width (c1 ;;; C ;;; c2)) + (Width (e1 ;;; E ;;; e2))) ((<br />
Width (b1 ;;; B ;;; b2)) + (Width (d1 ;;; D ;;; d2)))))"<br />
irregular_grid_def: "irregular_grid == (| Def = struct, Height = height, Width =<br />
width |)"<br />
declare width_def [simp]<br />
declare height_def [simp]