Verification of Parameterised FPGA Circuit Descriptions with Layout ...
Verification of Parameterised FPGA Circuit Descriptions with Layout ...
Verification of Parameterised FPGA Circuit Descriptions with Layout ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
APPENDIX C. PLACED COMBINATOR LIBRARIES 225<br />
(simp add: overlap0’’)+) |<br />
auto intro: sum_ge0 maxf_ge0 sum_nsub1_plusf maxf_encloses)<br />
done<br />
end<br />
C.1.9 grid<br />
/∗∗ Grid <strong>of</strong> m x n R blocks. m columns, n rows ∗/<br />
block grid (int m, int n, block R (‘a, ‘b) ∼ (‘b, ‘a)) (‘a l[n], ‘b t[m]) ∼<br />
(‘b b[m], ‘a r[n])<br />
attributes {<br />
height = height ((l, t) ; row (m, col (n, R)) ; (b, r)).<br />
width = width ((l, t) ; row (m, col (n, R)) ; (b, r)).<br />
layout−proved.<br />
} → row (m, col (n, R)).<br />
theory grid = col + row:<br />
section {* Function definitions *}<br />
consts<br />
struct:: "(int*int*(((’t581*’t587)=>(’t587*’t581)=>bool,(’t581*’t587)=>(’t587*’<br />
t581)=>int)block))=>((’t581)vector*(’t587)vector)=>((’t587)vector*(’t581)<br />
vector)=>bool"<br />
height:: "(int*int*(((’t581*’t587)=>(’t587*’t581)=>bool,(’t581*’t587)=>(’t587*’<br />
t581)=>int)block))=>((’t581)vector*(’t587)vector)=>((’t587)vector*(’t581)<br />
vector)=>int"<br />
width:: "(int*int*(((’t581*’t587)=>(’t587*’t581)=>bool,(’t581*’t587)=>(’t587*’<br />
t581)=>int)block))=>((’t581)vector*(’t587)vector)=>((’t587)vector*(’t581)<br />
vector)=>int"<br />
grid:: "((int*int*(((’t581*’t587)=>(’t587*’t581)=>bool,(’t581*’t587)=>(’t587*’<br />
t581)=>int)block))=>((’t581)vector*(’t587)vector)=>((’t587)vector*(’t581)<br />
vector)=>bool, (int*int*(((’t581*’t587)=>(’t587*’t581)=>bool,(’t581*’t587)<br />
=>(’t587*’t581)=>int)block))=>((’t581)vector*(’t587)vector)=>((’t587)vector<br />
*(’t581)vector)=>int)block"<br />
defs<br />
struct_def: "struct == % (m, n, R) (l, t) (b, r). Def ((l, t) ;;; row $ (m, col $<br />
(n, R)) ;;; (b, r))"<br />
height_def: "height == % (m, n, R) (l, t) (b, r). Height ((l, t) ;;; row $ (m,<br />
col $ (n, R)) ;;; (b, r))"<br />
width_def: "width == % (m, n, R) (l, t) (b, r). Width ((l, t) ;;; row $ (m, col $<br />
(n, R)) ;;; (b, r))"<br />
grid_def: "grid == (| Def = struct, Height = height, Width = width |)"<br />
declare width_def [simp]<br />
declare height_def [simp]<br />
declare struct_def [simp]<br />
section {* Validity <strong>of</strong> width and height functions *}<br />
theorem height_ge0_int: "!! (m::int) (n::int) (R::(((’t581*’t587)=>(’t587*’t581)=><br />
bool,(’t581*’t587)=>(’t587*’t581)=>int)block)) (l::(’t581)vector) (t::(’t587)<br />
vector) (b::(’t587)vector) (r::(’t581)vector). [| ALL (qs714::(’t581*’t587)) (<br />
qs715::(’t587*’t581)). 0