From ec2b3b108b300d5a2118b55675503359a3816b93 Mon Sep 17 00:00:00 2001 From: tmeissner Date: Thu, 10 Mar 2022 17:04:07 +0100 Subject: [PATCH] Add presentation 'using python for verif. of dig. systems' --- doc/Makefile | 13 + doc/images/cocotb_cosim.drawio | 1 + doc/images/cocotb_cosim.png | Bin 0 -> 54416 bytes doc/images/cocotb_overview.svg | 3 + doc/images/cocotb_uarttx.drawio | 1 + doc/images/cocotb_uarttx.png | Bin 0 -> 45831 bytes doc/images/readonly.drawio | 1 + doc/images/readonly.png | Bin 0 -> 30470 bytes doc/images/uart_wave.json | 4 + doc/images/uart_wave.png | Bin 0 -> 9438 bytes doc/images/vai_uart_wave.png | Bin 0 -> 55638 bytes doc/images/vai_wave.json | 7 + doc/images/vai_wave.png | Bin 0 -> 13279 bytes doc/images/vhdl_cosim.drawio | 1 + doc/images/vhdl_cosim.png | Bin 0 -> 51274 bytes doc/images/vhdl_sim.drawio | 1 + doc/images/vhdl_sim.png | Bin 0 -> 43955 bytes ...hon_for_verification_of_digital_systems.md | 498 ++++++++++++++++++ doc/template/template.tex | 191 +++++++ 19 files changed, 721 insertions(+) create mode 100644 doc/Makefile create mode 100644 doc/images/cocotb_cosim.drawio create mode 100644 doc/images/cocotb_cosim.png create mode 100644 doc/images/cocotb_overview.svg create mode 100644 doc/images/cocotb_uarttx.drawio create mode 100644 doc/images/cocotb_uarttx.png create mode 100644 doc/images/readonly.drawio create mode 100644 doc/images/readonly.png create mode 100644 doc/images/uart_wave.json create mode 100644 doc/images/uart_wave.png create mode 100644 doc/images/vai_uart_wave.png create mode 100644 doc/images/vai_wave.json create mode 100644 doc/images/vai_wave.png create mode 100644 doc/images/vhdl_cosim.drawio create mode 100644 doc/images/vhdl_cosim.png create mode 100644 doc/images/vhdl_sim.drawio create mode 100644 doc/images/vhdl_sim.png create mode 100644 doc/qz2021_-_using_python_for_verification_of_digital_systems.md create mode 100644 doc/template/template.tex diff --git a/doc/Makefile b/doc/Makefile new file mode 100644 index 0000000..778be05 --- /dev/null +++ b/doc/Makefile @@ -0,0 +1,13 @@ +DOC := qz2021_-_using_python_for_verification_of_digital_systems.md + +PDF := $(DOC:.md=.pdf) + +.PHONY: all +all: $(PDF) + +%.pdf: %.md template/template.tex images/* + pandoc -t beamer --pdf-engine xelatex --listings --template=template/template.tex $< -o $@ + +.PHONY: clean +clean: + rm -rf $(PDF) diff --git a/doc/images/cocotb_cosim.drawio b/doc/images/cocotb_cosim.drawio new file mode 100644 index 0000000..4026c6d --- /dev/null +++ b/doc/images/cocotb_cosim.drawio @@ -0,0 +1 @@ +7ZpZb9s4EIB/jYHuQwrdlh8bO012kwLBeutN9qVgJFpiS4suRcV2f/2SEmlJpny0lqIibQIE4vD+ZjjDIwN7vFhfU7CMP5AQ4oFlhOuBPRlYlmcb/K8QbAqB63uFIKIoLERmKZiib1AKZb0oQyFMawUZIZihZV0YkCSBAavJAKVkVS82J7je6xJEUBNMA4B16b8oZLGUeoZRZtxAFMWqa0vlLIAqLQVpDEKyqojsq4E9poSw4muxHkMs4CkwRb33e3K3I6MwYadUwF8vJ1n64e+Pn9AnY2OsHu7+G19YRSvPAGdyxlO0yDBghMpRs41iQUmWhFC0Zg7sy1WMGJwuQSByV1z5XBazBZbZz5AyxDm+wyhKuIwRUUAfs5yGKA7XFZGcwzUkC8johheRuY4CLC3KUXxXFf2MpCyuqsaVQiBtItq2XVLjHxLcd0C0NYiTj/8MLA/zni+fOEgvEl9vZjeTu4HF+zBmkCJMoj8OMDaOM54jjMcEc1WJunboQj90uDxllHyBlRzferI9ryX+Tp2/azTwtxr4d4bf1fCPCefIUALb5QugPw+a+HqBD5/m7fA1zR37dnS+XgNeqyu8pqnxnd3c/3keWkoYYIgIz3AxMtohZ/u75FyNnO12Q+45+8uaecHt1+B2SDarh/TudnKhg7vfsJhP+izPWrXKhHAbP+xsNX4NlPciHfXpaxuZ6gFr1pEtngVOs0W/Z1vUY1Rni7hVcK7V9yIeHYFEKF/TEUkAviNi3eVoPkPGNnI7CzJG6uDgGrGHyvejaOotn2mRnKxl03lioxIJn85DXtJVycdqXlktT6l6KQOUvRN7YS4IMEhTFCjxe4TVmIpZwlDbD2seOSUZDeABZFI9vIMIsqORRTcFCvkGFD3XB9K+JzE0xYrZT2VSutaOdP2KVb3fbfemabNHTQ9/NVXbfapaPwtcnxvlGvZbbcQ5a2eDMNTjnNOws3K6inOeRq7nU9RZeLVT1PDlTlGNeIevGm/TJcCL4vVfN167Z7ymfzCClsHyqpS2F1DL7dJjJedYPK1F0zK4/jTx1HRODKhunwFVjbKysi5REqIkSttbWCGcgyy/Le3iSGmpe6ADZ/Hhi64mPdZOgxiGGYZUX2cYo2Uq1lMagyXMrZNk4XHA2/eG3Ly/QBbEW1sXvku9ZzR4ubkrfoWcJKwiL34avV/+05L32707aYjdfoO+urtz0oO3rqYk1L1H7a6kujZ+7FAYnu2I9j9f6Nqo0HYP0D7ZDcke7gniA9wq29t5ztm+GKomiuHLWqUitYbc4ageM9XFkWqo8LNaQ7lFbKd9hpHoW5BzjaSm8B8NbKcbytH7ml4NxVFV9un3VEPRHrDM0VvXellbGf0OAIeeGN2dANDwBNZSAODJ8gW+UG/5fwz21f8= \ No newline at end of file diff --git a/doc/images/cocotb_cosim.png b/doc/images/cocotb_cosim.png new file mode 100644 index 0000000000000000000000000000000000000000..371200e70b6d407d605f2c7a796ff53f18cf35ee GIT binary patch literal 54416 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 + +
DUT
(Verilog / VHDL)
DUT...
VPI
VPI
VHPI
VHPI
FLI
FLI
GPI
GPI
Scheduler
Embed
Embed
Extend
Extend
SchedulerPythonSimulator
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Coroutine
Test
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/doc/images/cocotb_uarttx.drawio b/doc/images/cocotb_uarttx.drawio new file mode 100644 index 0000000..04ca9ee --- /dev/null +++ b/doc/images/cocotb_uarttx.drawio @@ -0,0 +1 @@ +1VjbctowEP0aP5bxPfAI5NLOJDOZkLSkL4ywF1uNbFFZDqZfXwnL+AppA7lgZhjt2dXt7B5ZY80aR9kVQ8vwhvpANFP3M80610zzzDbEvwTWCtDPciBg2M8howQm+A8oUFdoin1IaoGcUsLxsg56NI7B4zUMMUZX9bAFJfVZlyiAFjDxEGmjP7DPQ4W6ul46vgIOwmJqs/BEqIhWQBIin64qkHWhWWNGKc9bUTYGIskriMn7Xe7wblfGIOb/0oH8Hp2nyc3dwwzP9LW+ml7/HH+x81GeEUnVjjkkfJYixnmm1s3XBRuMprEPcjxds0arEHOYLJEnvSuRfoGFPCLCMkSToDmQW5pgjmksME+sE5hwPAPjWFB83QiIsO/LmUaI4KCzx1A5OJVzLTAhY0oo2yzOWjjyJ3Ea8wqePwJPOKNPUPG4m0d42lQqduXEkFUgRe0V0Ag4W4sQ5bWKvKtCtwbKXpVlYxcxYaViTEeBSJVqsB27TKZoqHz+R26dVm5lWmea6RIx92jORCuQLQYeYLHVw/LdSIePoL/wOmn3+jBfHId2t0G77bRp73ew7r4V6YbZYhF8caQokzIe0oDGiFyU6KjOcxlzTWWhb9j9BZyv1fmIUk7r3EOG+VR27znKeqx4zjM18sZYF0Ys9jutGo/lCNIsu22sot/OrCU0ZR7s4cZVBzhiAfA9caaVB0ri9hYBA4K4qNz6sd+RUtX1lmKx5lKzzqA3EBW0fexaLTlnes+yBuVTHz/fhhqyUTXbNb6+kNyWep8RnvnsRIVqmZ9NqPZHCtWoyLQU7S6h+kN5lRFmTGPIkUsst7vxJ6ISeRHhEZQk2CtgFWYcpNtCjy8K13kf3bq23uvQquvs1Gq+xTfTakFQRazjELynk1SqbdeV6rhtpRrme0rVbLE7wVEqSoju49d4md/ue+UxOGyedmYHh24Hh4bxViS2S/RBnA/3B17ymxXqQN+3uyq0b86tY921mxXa9S553wrtt8j9Pvx2Ou+Xz3oRPPo98KAkD9oKGt7dn0qWX5+tD3v778iWMMuvJvkrvPz2ZF38BQ== \ No newline at end of file diff --git a/doc/images/cocotb_uarttx.png b/doc/images/cocotb_uarttx.png new file mode 100644 index 0000000000000000000000000000000000000000..3c060054e2bcb41408d830351d9359411e8d77fd GIT binary patch literal 45831 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�k>M+>(UDAVrMNpYvUk^M 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 Kl&^H{!T$jZFcE(M literal 0 HcmV?d00001 diff --git a/doc/images/readonly.drawio b/doc/images/readonly.drawio new file mode 100644 index 0000000..88ebbfe --- /dev/null +++ b/doc/images/readonly.drawio @@ -0,0 +1 @@ +5Vpdc6MgFP01mdl96Iwf0SSPbdpu+9DZneZhn4lQZRbFRWyS/fULClHRJmmaptY+BS5wuZ5zuAJm5M7j9Q8G0uiBQkRGjgXXI/d65Di2bTniR1o2ymI5XmkJGYbKVhkW+B/SHZU1xxBljY6cUsJx2jQGNElQwBs2wBhdNbs9UdKcNQUhahkWASBt628MeaSsvmVVDXcIh5Ge2tEtMdC9lSGLAKSrmsm9GblzRikvS/F6joiETwNTjrt9oXUbGUMJP2TA7QO5h6uUs7vl4u7eiZcXs/RCeXkGJFdPrILlGw2BiDuVRTETx4A8CphBEsrWq1WEOVqkIJDtKyEBYYt4TETNFsUl5ZzGomKJClMgyfITJmROCWWintBEulJxIMbR+sUHtLewCcUhGiPONqLLestKOUSJzdX1VcXcVJmiGmfaBpRWwq3nCk1RUIC+AtzxgMB1nZ6B6w0I3PG0Z+D6AwLXH/cM3ElfwIWYCceYJoWJSTBOAbjXtzw8HTjgY6tngM8GDrjTt5Sit8uDRXzSt+2H7exHHCXwUp5BKnRqoDKaJxBBhWQ5FsHWaWQvQDUAvA4AtI0hAjh+brrvQkXN8ItiMfGL27/tAUi7yGjOAqRG1U8hpiOv6cgzY+GAhYi3HBUkbR/7Dby5X4o3z8hU3mx2HG+ebfJmnZe3Aw5TQ+JtH9zHr7cz83bAOW1AvJl3EMfnyX0J9715O+AIOCDezDx5NG9T64N5O+B0GeTsuWBG8lQjMSAgy3DwmXl09ZDtPtE9cv25k2be9LyDeBRYgk2tWyo7ZDsCnjX1MratnXE5k+58XsmojOCkotK56IuKyrye881TxXu/jF8tKvMtNNktqrEZ1+Qcojrg28OARWXeIRwvqiN3Cm8W1Wy3qEyx+2fJVF3Hcp9weVlBi+gqdfl/c6obLrLi0+Ol6CA0sq4aRSmUv484w0l4I+T07bv2KCIsnZZdWurlaM0NiSIxD1gWHaRIQc5pOXPRDAgO5cVJICSKmDDIOxMcAHKpGmIMYXFjo8gS03hXI++6+y4m44z+QYaxa5W87bOb3Z1s6uvIdjsWkpn8TnY347TP+I8IwJ8J2UjyPh9LUmXq27hzItZa7zTfa7PmdLDmvp41Ua0+c5crvfq7gHvzHw== \ No newline at end of file diff --git a/doc/images/readonly.png b/doc/images/readonly.png new file mode 100644 index 0000000000000000000000000000000000000000..c13b66191bb85b84060a2c4978726970e01619c0 GIT binary patch literal 30470 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 @SlId1u>i>*bbq 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 literal 0 HcmV?d00001 diff --git a/doc/images/uart_wave.json b/doc/images/uart_wave.json new file mode 100644 index 0000000..a2d8263 --- /dev/null +++ b/doc/images/uart_wave.json @@ -0,0 +1,4 @@ +{signal: [ + {name: 'tx', wave: '10.10...101..'}, + {name: '', wave: "x34.......53x", data: ["start", "data (0x42, 0d66)", "par", "stop"] } +]} diff --git a/doc/images/uart_wave.png b/doc/images/uart_wave.png new file mode 100644 index 0000000000000000000000000000000000000000..ae17e189acbdc8e718ca9228a60dcc285dad3248 GIT binary patch literal 9438 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 literal 0 HcmV?d00001 diff --git a/doc/images/vai_uart_wave.png b/doc/images/vai_uart_wave.png new file mode 100644 index 0000000000000000000000000000000000000000..95dc846144091df010779d4653d316264435b9ca GIT binary patch literal 55638 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 literal 0 HcmV?d00001 diff --git a/doc/images/vai_wave.json b/doc/images/vai_wave.json new file mode 100644 index 0000000..e6910f8 --- /dev/null +++ b/doc/images/vai_wave.json @@ -0,0 +1,7 @@ +{signal: [ + {name: 'reset', wave: '01...|.....'}, + {name: 'clk', wave: 'P....|.....'}, + {name: 'valid', wave: '0.1.0|..10.'}, + {name: 'accept', wave: '0..10|1..0.'}, + {name: 'data', wave: 'x.3.x|..3x.'} +]} diff --git a/doc/images/vai_wave.png b/doc/images/vai_wave.png new file mode 100644 index 0000000000000000000000000000000000000000..46fcd868faa4c7f258e12c7098f4409385732abc GIT binary patch literal 13279 zcma)@XE>bQ*YG2hAJL;k^a#<3E_zKwkZ55TCAuMD z#NfSh-~Vzy&+&YCzc}VFGuPgG?LF5z*Y8|cg1)XADKP^v78Vw%hPtvL78VW@@H+bz z0q{3V(_jw^iw#RdSbVcF}YF2 zxi5Xc$!El{*GX;f%VnIJZ=c=)zg!3@YUzD;AlAE3$BE5siP!4BAnLTx=mcvcCbD;K zgp&!OIH93~Rv0;kD+=S#Vy*HWv8 z=qn!j3B$&?TjY_>I9y<`gQ8y!Ri%_iV@6o0azYUb{jpHy{4j}5xToRSx7tIcxZ9D) z5x5yQ4-c)RgoKdtGhx?;TugPW=~6Q=BRBSkQA#B50=_&h>)W)Qv*b4jx?iZ|^!UNp z8`%e$(z*^ZP=}FJ|IExxK4k_5hKPjJ-@l)CQ+tfS7wcB^4NeyLt^51?v zT@AcR%?Lc0g&gmvLmLN!Bc#?HlFH~?^e;dBm@XCY_3?>ov?dK0930Hd%E_r*cWZfZ zz_SEI2#c++?+!jKy53S`jUyucI&l95RrKLL&vs?!N{Q%V0_)jR zS$O{by-%Z~`p5Sy8aGZ4mfqJ5&A9wJX{J)>PL`ek_VLYP3M&!lCP+gdDdP9;lh-1# zSG(^A`i8qLZrA5aFe`ufjK{&rsUQzQe5gmGgN8n>4Zyyc8XId5%uvNi6eM%vC_e;t zU_gP~5>^?xzd#sV73NOKI#U12y`L|CK#`C_L^Ki_O-NST1zCG!jWBFESFRNUMpQ!eBi?^@0b)c%63;o7=;{oDhVB?Wzr248vPO;#T8C^X@3~I zoY|LVK1=sp!n3b;=JVW@V)iL^hXP)(#y0ggy}Rm!8js;FHbZpz?LD|BhP7~%G>Nml zb!&yEVD?8IP5G3f8)D1YCaev~IvBhFuf6IBpO}}5a5CClQUVtJ3*xt6XAiX+p1kP~ zSo>C~S5))v$$KH2=25!ZYSVWe9p1=cHB{y^|12vszJPfGE2~8(N~{Ng6)Zv=-OUE; zCcX%Kg_Cp1Hrj^DGKk=KYw5a~^z-T1xS08u7Q zC>;=MMB3OAIK7!#b|v)37CkI#(?ZaNJ28pw*jI+Msw*;iKE^=d#n87PK1qsOw2|1j z1ex|n!}QBvEZdbWEiL6duZNyXCPw+|@aF)(+XlR3VK7%)oE&41r;(W=MOY@$tC)Hcdxqih5>j zhw!y}cA7I19$}~U^*b(WSKzJ_jx$a16~tYQ-8jZiwQMO;@x;&V+E5qs)0sR zF4@AzdF4@SwI9M^_Rv+|u4!S-9`|63&W&>{o)}ODrBtEI64kZcCxWTz` zrecu+I}*iei1HKd)4Z@aBKR~131vOuIT~O|C##3yomSQt$F#yy*=aHelI;TM9^6&v z=}i8xEU|Vj;^}n#b9b&fM8r=f@X+x|Ufl>$>GIOcrI?}*@tqBPe~&uJ4K^fJeI&V~ zbR3srvgKRvu)D@rkb`0nA18ZsUax*UngHQ*GSZ?4f4|fZ3Nk1QWefqI*-oj^6Q{B^ zhaURW4WC2ed7K(vv4DCYdyUIh9i6T@b9qAUnmFAd=TMiUmF^kmDQ9M1EHURv*AG|V z!y%)*a7Rse`g8!dtx#WI*M?7T91ad|NPj5;VySemfgwbUgI)AuPv0nrPM0!F?Ls@s z@_5|g_{IiVKPFK?m>w&~ied})J|c1>5ntz;6`8U!|7seF-mx6jy5`jO?u3Ay6|!ZB z-(H5}lsnW}h=_EA1{#ovmh_}l(?%j6R=R`zj=R;@997sU&HgR0< ziExMYJCpL#Y}D5^4^-Sg9HAyBCu#B}y$+{x5!OugK%Q~=RHSf|`&hNGyy?#+)FF5Y zCEwTKcxq`lW3Pu8>;ny=8`+y~tFv)%lz@&B(@ai=rW_CPI^wa2 zK)S~~dz50!hb277kvsR+o1PTd&oC~8Elk#tHGTQ%Sl z&&q1wiQ??*qZ1~lr45)yqLwEulEVX9@80oL<=Hx9>X)WAE)wi#Eu;qF@W$`x7YIZW-M9{3d_)kA z!P?qdXJTUFa0;t}JTY&4e-u6m1MK!4(P!s}-!F%3QZ>17l-Z~O{SXr+Y84IKlkVZA z)>^ioe2yb!6l&5Qh$9VQla_wozH|W9&|=Tb20r0H0c6k}vQGa5@Aan{g@8EWh5{pF z*?1-@tXIYY0lC+_sG&ugO2+oTl+6L{AL+6l>qCVN#12S8Y&iTt!1b{c(#ikxpHN^j z$EZ@5`{W9`IH3y%U%4mLsy#f{N7ORW6bko%cU_C;bRR#3gkmMIqGpuX?%s7{7s|1M zQ7&c1N_Hem95E*CdwZGU> zEpzx0dj!r}r>U(i=;`im8Bgb|7hmxw61bGWI*&4$1p9|USC~Kz-3QvAx=#)AFrR9>`Hhn{$zSpJ8j{SNLPr+Yot&hIi-@@;5$i5 zC+iIMHHt=_G6Ru(OO#B1|B(*}>Ac^_`}-#IJ?5RU;M|)#~Td zSXu8ak)-~euTtg@)7d0{$w6pCiPMp4Y5ABAP-8>x_U#_k^=fUk>$ArAF7~vrP+fK? z!8+ZYI~S-(T*A1akr4q?Qdaq{){+u?hF7mXyYXC@@wQdC4^Ay&VvfX|dRagXQPDca z4!!mB6Ou_OH{^H0qw@0MJlnn_cAB zf+Vy>J|MQ_Z|prAqDrZ?n4;^#5zhqQd-UKa69d~hb$4(I{127$ve|1@K3CFf1xn2n z=$os4y%_YFNh!n0k#I9orwrI6b`HSl7iLX+HPFp2`Vs z8~w!vYM31Aa@R{vP2D;i+?rA$t&XQ;a%8pf{j=_W$Q9QY_H%Dds%t%$+fW9wCIJj{ z-f7|f4^Jl^VQN0Y>jIcJS}PE_hR63H>fsNIUtn90toE_r+?wje^%=ZHpL=Z4=?mVl zhCS>EC09|!AGLw9o>+pXN@q&jWg4WWAInnQui?;y00GyDL*I#Cjljm$YzTC??deu) z9-ALNmy?-UzmmdH=$szzAN6cp6&O^niuqoW3DU9h^46IlQ^ay6jpm6A*?G*ZBLT3K zpMdhpjwdJhLjyJb82tXG3EB*P=lFV1*u=8p&xloT>}U+4qW6u~26fZP6>w2WDJl09 ze77bKKJuh6Ni~+#)VPCT2^%(`pxms#x5fWDiyJ~?O>ief{KRn8Go$jm6q6yi;@tLV zmIHPj!E}+(hTtSZVYWx!0vN7C!1Ej z9b&^wdKosbV;w`K6Nvac@kiNJr+3_nWb5cN2<9)W{@he!b5?9B%%7aM3ZltsDYb=zb2O1n^|KM6H?{1;J z+4?KV+T&u*K1GZ;RsGx*zkq-MO$Zfe$b*Y$GA>k;ghJ0^%eaSCA3L>CWvl^kGt$At+qmGdOifN&HUyt;T?<4XOE>7VnyJurMs1d^SKj+EjKpk>xbA-5*U<3xFi(U|sva&Mu_V)IOUY@vy zh8PqR1O{$~9Isf`22`V>(K{Tr)t59M*FMv5Dt>gV#^Q<`V%DM--lb3-8XVjxkPFE^ zSSQ*3R2c0xQ-OUr!rthTjVWGXJt*gb(r&3mMNhT&jp~r5!uf&wGc(0#e|bIGTDrLt z7@xPUPdNNS>kJ`5$@JSHZZRJk5U@YJRXWH2el$*CR)mV?jA&8X_;t6GdA62qa9i;m zKPq#Ug%QFGbk)W;AlDnw30pG(C1}M4J+SA!x`opI$%`<}hy&hIG_s#C02!#ean48t z>OoNTe3SiC$0r?9a$YJ^Aq1vMu2YD~$W~2^jm1IR?#gR;2Ilp)ipVr}CFg^c?hpmm z21ef}nMLZ#h1n_?wEohcTC^vK9oT3v(XrF}AEbLf#g*PQ)!t*^NE$cl>ra?V%?4FbTuTTxh@es)-&)=K_$lk`}Y<;MJBR^te&5?dMxoE-J%)g+(SFhMYA)LQ@)tPc+l$Eu%3(Ut^kRL1JPZXOgSFaD(Po>Aei zDf)sR4d_iALaoKe`rNX^1H`g&lH&Ae%mWWgq995K6m)cEVJ917J(F#5aRl*+iTv$; zJB9@;4$-znEMn4=4iuNkU!Vt{snUQ>70ig*PiNopqu4ih=@E|UWJ7-@zXI}x@K1Jq1%O@9moh%elb6-fl414@iZ zG%^~in>DHn<^OphEm7>f!VdpN^Kgr6kbiT{x;qJwsJgrls2j6@SlsshJba)F4x8QY~$|KREqF6y?$ah zqXR_CchhPaQ{7Wm7W2!Kny4L%h9fWH#ZukoBFuFgzgo8GR%!|#&NV=nc=*^X4{Z?5 zZFPuMU$!B++Z|e~v3b`DurCeYLW}73`=>7Lk4Da=shND{Y0|o!a)oFnyag_J=s;1o zyto5iyL0zZ)T9|%3FV_*Q_;p&19)P<|pnmthzj5 zlJR!k{H2Re2=*jgxKyKN1oH?sAWoTe&nYmMy>rB%X)E0l&XKaSJ6m+|8W#;BqJzTP zivPFrv08e0`ToA*S%PQlz0H@i@?y<40xe`SgGEw!Fb+K8>&Qn4{QVbbtY3Z4KKqWo zJ2u_#?X!q~w$Vihxy8-e^+kqHTz+tMXtnQ#FmPo6Td85zZ1EN-=aM`zJCu@1F=>sF z_z)4N=}^OuT5<$U4zy)m%v77z9ro4lFSloSxb?8`Ci{4~czzM~%bKRZIP!S*s=jid z3>~TJiu!S8$J5t9i$7vaO~uV8%|%U2c6ZVeU$69`?Epsx=J{QSJZ!nwsE=Jr2&p^` z_oO$}5Zoo{X7E;5d2amum}=T5)S~X=45K z58g5%FQ$t3UPy4@_Q5yNgHn>Knu{-66iihY4zKf(N9F_4)I?4CwrHND_GP^iNDxz3 zYRHGRH-o`U{mewkgiT=(MNTO)IEf^ZamGDp$(a*$KE~ zHm5f7X&n>gHeBVkhvBW3M%4icpNh|a>;&6=Xo~z9^6Hr*_D#Uft6K$_M#$ZLr8X|p zJGy=4_4O`OukHc5;bo{npqyl7Sjps%dZvs8m*KN#TW5A1en9WZe8rbh}Lsl|PJV34&|HxelSv0LvC{WK_5?c15DBz3SMls#}S zvRJCSyQIdqPPVk-g1(Ya-|XhJ75!_GIDnpcq|L@JD;sKNU@+Z=LXN2YZ><&{?@>HK zfz8482Q(?NRnY_AiJ<^@_-u|VF-o|%O=>bpxXH8thebrwJf^0+PlUeh0E=l|bp zV*6W_$paTdqo?VmQAn;2IfcWY0osn;vrHX6s7HcL$@JK@B_o@GiS^;S8s;atx~Asi z_z9=If&RLcjU<67Mo2lO3N;HlW0+!)t*ZC@;gZcvNaYWIJS3|bLE*7rD zuZxvno<$1bPy%@yl`)vsm%V=j8)JPVdm5Ar*UfH~z5eMN1l{Z&A%DTEIqG=*?V_YJ zVE{UWe=ajv|5mP-@9wW8vOFWLvRbbSXR&&jks+2zT3(M^#Ph_|+WHfVnaw+1YLof@ zb**L315R?XcYj~&9n0&V$_P~)6ZAGS`u8lBt)~j(%E&hlf_iRx9xh%kE+$!@4Rt($ zuKIfN3cVueZJ3F;4)vUC?h8!yw4dfmV#M4MY>inrYT#Ii1D8}gf{65tB&a0PT{f;& z@F^t=foRey_5NHC6fh@~#6(3i`?LRnd@$wjpF~kyF_yhutT6wh#e&lCV7)nC#yMX1 z{HEp8w(EUr%v{o0U~FZq#L=jSTN98@fEd{#t(O?=`Ps4IIwJ3!lq|f;1rw529=36G z+!!GQG11eqvewN$MIW!V(9qD#9RG}2d7AgR_jxr#W+=xM<89o7S@}nU@I6s3Fb35Q z(!*V7B0Dj>d{h3kpP;h!DZ7S?57g@VSrs!h?zf51=iVyy69>M?N<0{ z$F~ix<{despcl#e#5i$JDAoy!waiTM2JQfOZ)~x{fA2&kY5pg5gh{oj)%P}UWNFab zeQ}1EfzfNyNB$lrWq?Ss==z2qRf=FmbBALyeNjCg6$L{u`9$!pObudjvpx_;h8cgr zo|=#ai;OYpFwW+hs?Q>ZqZlQg_`;^76-~9}zjomq8b$>w@4*&2f2w_XgZf3E2x~%Q zUE|KkVyD;%@wJ_{=|R-NJ@@J!HLMMv9wAy-2*>h?+XHEENULIGJ$2@}mnKKaL#+Ki z)M=fk9+PnxTr-QM8ncR2pW7fL&Y2EMibjq)t27^@1h4U_sHz&pxuGR+EG*2^a z>;l|a*|#b$eb{N48e`jp#w`tDsOQ>x)*Uen`l?;O9R_hb^# z_Z?w*_B;|2t(eJ|fbMo-kn(X%nM7gQay0kO`Jx6)(&CS3`b^Y>g91g*RGXy>@V(Y#SZx=17olf|2W-Lm zgQF}Mep|_<3MJx!x>!qU>KST4K0)K7HXbPSMSgGm0@sg8{>lmVGpN*d=C#dbiP3$? zuuj*(rpAjL&)i>Mw|DC2TMBphR3OFO($dnm_-Xm}HBHRd)*%~C0uB+RL_Eb;marbTnO3QUkBE7`=(CTny}?w`|Y;`;El-4Gon}$VKg4{T6gKO zzL!4^4X1`eJFLi>1;EQ-zi40e6GMAIF7SAEF6xUVV?S{N_5W8vGWGgy>$a9(JTDM= z`%K1{rq6-k=It8-?wy#3tVNg`6Z7M~`{iuR+n!y-HseYk3ZH8fZ}_dkqL3CUkg_eZ z7|&D^#0$%`qJpE#E(jB-stX^aMtqhis8}ot8p7VAK{3}xt*-Un^xI{t0c1`V+Jmid zlXaxzM7dLqUS)*vU8vZQ!G1DQbHST80%}*;E<7Xw&9EGeM$Y7s*5?^A=9wc|kE|~10k?bpC%Qh-kl9k0*8)b!-Oe8_yPrNN0 zhz38F3a0hSlqY4Yyobn$I2;F5puFourCW^0WPR4Q zd-)KQ1nU}OZP8}Pax73^{77n-vO3I?&Fh^zR9@rway`JVZUWkM$oJ;(Mx(P^@SRA0 zTi*^b{q#%i(JAdqOLKcxBFkb!BNLMc&-CDN>EuC1Nv58{nc-? zdCG(6sp!IO+Jn{4#2{12oJ$SrTMB*Fu@H;`;f+ng%?(X2T3A59WZtvLtXk4;{0LFa z3e6_5KH^MM*rdWIrMd^QG$j#DU0r`lM>M47x%;c!`x8#9u_p!b3%kT05%rUd*+b*0 zYWkTNEPNfDtsyDaFVg$p(Mg79g|LuEWO^*nvj>w!QJan1hMyJjFhqVAhb0Wl4YV^1 z&fg4311@=W=uo zlGNJ4(%V%rA62n^>IFW&ewLs2Fz1H<%fl)C?)wb;XL`SboSnB4Kjup!i6yX>lW+s} z=TVavr`z5;A^IS(3rRjKcjGrSi?FI?m8j?$DB>K(6TALalU$qVO1+f`~1dpxS z6C+gl7sm|X((?ODY1!FLy^?zZ5Mi-s>U`&)UTOOC73N~^$!4Sy z@CbV+jDEn2cPBGvUt-=J72DmtU=hY+u> z@1i5`B|4t6S7?onhJ~f4`pp~HWi$#|3W?$qG_QZ{J(|Ye6abj;MN=h=z8T>cu9W|9 zC-VX2pJ>(Xer~M9;>cR`B;F?HSmwW?x>o*wK+hVt{Cv#BKm11(xBoU@SpkmZkABsc zf7zLTwPXFqqhuJ^zy+MNf6L*&JkrjgzhJ9dw>PIY{)WHMElrd=ARKt>SVM286+#|ON%Tjl+(2=vzauu?v#-O zG0YxC=jBcHR>XM+1xa2kwy4@+CXHEqq!S8yRzSS>WbQJ^TMwr)3uFPkUvuuRu2?+M zyL)?cF=`=hw{2{wzLVYl4n6n+sK6vHjhl3*_PUkfIq9N$#wNaKZEFy+ozjL8v#WS? zftSf3v~NLMhunJ)#W>3pdJAuFc^bZ|EM6ZS5Z9&IG3I%3%)?*(oz_z2WywTz_U{hM ziM^APYk9hqpqZ&OKUo`i9m+I*43O`j+<(dUs!xEQS-Z};_a3p6SMj?l<$-2pkJVcz zrw?b(>dq)Oj#y~U-+#(TLm*V=4I>s+HFl(XrVo_zYP3QP#OAKAyq;fFRUY;p^%2g@ z4!`xlA0ZL$;&ySqhU!^;r{R&#gMZZ<5ckKVu*h|Y^76Xy?akQ|%Imb&bafTT)%Gyh zRMh6<;}v5s9r^d!!OkcK=_yZis?Kz48y zHY@TucE`t|Ge=*an7|(s(J+yczFL1JH-HHt1P_?Ilc^~wAroH7bqkK zG2>a`m*)f~Yifb@@XmD-3kZh$KNUi?mz^EEc9HxQJ*c`qp`>Fm+x9ZgK`G~+&P%V+ zXQG$4=b;{R@=-M5FtFG2dkY#6Nc!Nm9N6sL;~}Ws9UuCkm@{Uj>>5}!5nQI{_gvjZ zD0;1~IhlRY6jHCx@?cl(SEXK&gI==B+3u>x= zR2QJo9ZC$x!A!r(I|YDb^ez60&#yCzWHgoB-FZyZfJFo{E|n@Rr;Gn}fchUERDK8% zLD_$3-lY_Q-jLaJUZtO6I_%)(E)$q}_sgvT&&>v5@-vdFO0b=8nDbU(k!9~StYFUYuqGOi8aNKbdAMG zVNuZ&BrYN7b`so7+Ryes)k@|^qiIewsg+Gl#+?H(^UD^!%Uh4S>O)4Z(9aD%78>d> zgb;yT*jF;UP-!{ip89>@ph4`-Utv<$I5ss&q4qb|-BVqspN8jU4(W@B%vx!gj(Tq> zLXnID6T7=YaAnv1Z(H!=tcp{T1@-$2UdM<&y5k>xQN^{jpkt!Oxi)F1O8i}Cu1{U9 z^fgy2d|<(4`Jk(cEy9HCOGu|1ux%Va_k4(B2OiiAl$|vM6S`epo=b=Bd?^ZX^LwG+ zXICM`^s#{8cH4PUM~Cn{kGYp55m>JG`oTzEQPJZQ;^bZhpcMKJbpE{?8~~U+);SXW z<79K9;lRr5AOz>Y$amoD!=>8aUZF&{gef}Vd5ziIaBMcWe)rRv&GhktSPZM--wx>!H&RY22WE(Op& zRaYmZs?r7rrFup3a^4qzN}y1ZT+slW(PA z0;sxTszSalgMY_Dqrmd~Xk^o{tbY*PE=BeaiKbu@Iv3X0E{o=pBTh;6CEqH9@7lAA z`}N|lXuXAfRpO8QQccC&;przUslm9R69_KruIugDtypN{tvc=hWgHx|JDXR9{8_SX z8837+EaYGcmt2*_S^fQW>M0|m-06IgX?)H=boyJkMa+s`=Brn#rbw*X$vro_Kd-j=neEyRRJv7(vA{Dh`&O%Q_}R7`x5 zu^?&^(Fr1rt*_UVWh89BTke6U_WEa}fKrC4|8=ALqoswiwqK3=z2PRdF5>0&-3VJI zt_1&+mVNW;vx(9A3~C1lhl!~IDc=xZ>g0c$_?7b_?qMd)WO8!+#Wi(`i(XIq?1s)L z%7PkDWd>$zl8R^76hj074O;Fp_N!}ttbM&VolaTfv;9?wUn>bm4KL$#yEYs1jW463 zH;)9n6OY(tLzss3@$6NR&c-ZFdR`)S?Rvx!ywN;6q z)}6IDQGsSPzL59+6cfk=`*Q3|ld*5jhZV>)<7s*?5;E>a&B6;< z1HdMKc=koZ>f?hwAM7vK3b-lQ`7X#h=gQwH29k)7qBk_*ed@e#!eqOgKjtw5J=6!o zyKO)<6Ld1h`wdB)rD~mzzd+X<;AnVxdlo8FIAE7`Mv;g%LV3`G6N2$ZX8UiVPsQXr z?9^iqs;8?dV8&(J#ZLw$jxFB}@mC^`HChdSRl!Q@%{DAMqmYavzwxzMbBpYH+U78e z8{JZ{V}`hwn?lglWW>~(YhG+o^0htL3m*J`QI}|*VJMmt)kj^|7s(! z9x%GOw;UZX^FT(S*(PX8DMPZ+SOweQT8AIT$GB$2v8iaMfM-B#-;Cvo%jb*E@Dx@9o>S z1ZRgSNwdd5<7Dj|(2LN0SSLQW)a)-d4aaJ+|6+R}iI8Wi@B)6f>?V@zEeYB@;7q56 zDgF}0^xERI56qv-)I+UKNUIR_Nn9QSQwu&Hs1QU?;si{f$vaySYN>r);DlzBiS`U# zh$07Wg>c(m)59o_**69jtWfltk793BjNWel!qtuc&KK@gJ*Cw?Utdsc*vC$X+Mz;K zNmG`T#UyvCGMIcXf0yEQy87=GTY0Zf+~&@KawuFu&~fRv(Hw;LN?wg7}>A6x3YB zJXWOOD+K8L>qWo5ZE-i_Il7nG8nHLZl2AIEpMo?rsO9IZsR6Ib`_HOuC&o;4)@cfL zKa`D(h>3}rxvz9t1hX;!vt7bF(S@4_f1dZz=rcFgr!kyxzUj>O%us@7z1T(N_Gf1l z<7gvqwOv^vB9LdyJ$%=vZ%VxOY40B0tr;OhIptOk<+*{>Wb~4p?vHIfNa>>sc`PWS zO;h;~ynp8KQpB$Rf#th?mh7NRB7&sBZj)WR4`(4^>O+YKoG~7cMv~eARK&L&&Oa#8@4i`|0)Bxy_L0xi8qd#t@aVWXd7&N9$!s!cXL2FIQV&Zc(#Ft%l&o{$bSo-odYh3+dEpg ztu|Wk$uoDbCpkn)GBD#y zdF?tmKX_6cHn92FIw$8mkVnE30SgzymgL2gtdNl3c4xI{!#qH`C|tfg`5+++lLI<+ zs%mPw_IWki)?d!Zo813&T5kK7uBs!eGOrKAle_+b`pMtp{U}$tztlS0Y4vCDeHdMm zT}G!evok;Z9edE;O^!`w6pqu|jUE}#B)H%m-X=u`nV zSsR>zL6TZs?1JOueEiF;+ekbQaMPfb^~#81Vlbb9owFP41SNvDUJxbw2OBbp1EJVS6rd1LZZID8WpiZkyB/frZxLmRAC0l0KZSlXN8if1953w+CQ2rM1l+43ga3rAAaMM0gmXD6jZMs4U8+V85VrHDc+zYMeYkiF0ocwzIP9BOQ3vnJIBZoaNgjAoyLTp9FkXgi4IPc84WxW4jRotPneIxlBwDH9Oy9xcJRKi9rmFkDddAxmHyaDNpmeCkt3bMQhywRc5lXTWsDmdMxHeTZQeoAi8BJh73dUtrujIOkXjJAPq33Z3Pbm5/PJJHY2Us7nu/O1/MeJZnTOd6xwMymVMsGNerFqsEC87mUQBqNtSw2ouQCBhMsa9aF5J86QvFhOrmZ+CCSBwvKRlH0ieY6qCfJttguXUbKAVHRhWwCQi+kl30ANPReOqIsjxtLzJ+nISEMEdNygzWMTFO585QkzcauFeAaJdAvIOZGELkhztANPaDSPEQaJ/NiCBMgehLjIDn0O1tdJiQIFBPamMNe2lEkY8RobTDqCRbLc4aOepP+Vkkcv74kv6Z4OwJci3u+joSs16RWRuVmbXtCmaRXRezrRJ/EEh90CbjImRjFmF6lXnbRYazPj2mIF/z+geEWGmxw3PBiqzDkoj73P2DmqrpaKu71DOvjZU24nWqxe0GX+6FzbkPO/ZsaZnFfAxiRz+nmkwOUj3Ic3EdRyfGKqVc98fd25JtIxcCB7zArop5zxxax4r5NJ6TmHfKMY/Miph36wp5p4RsJwT/CXadBwegi8Eb+ZWK4nswHB0H3fSY3oGud0pwvY+iJxJgvrrPG7lRysyGra0adMh9oQ5Z59QhZJ6T0YzFh1zLPkabCKEiqwa62MPr2uoDJxI2VU+ci2y0JeFfzLYe2mdELjGTYaPVbOUuryAbjrehB/Ey9RwbEZQu6vCgcksSPBCqKicfUIIt851JcPJGmkc3lNsJpI+SIcf6GQfD/AEq7bSy1qS4FZU2qmIFobpoMc8qpIcdjU3PaxWFtLXvfKxbRxN+TiSkl5zjVa7DVEnibLvOuhvlrus6G5ETz3hUOU0wyWX8LYxAgiuhNF0qYWoPZXnrjtWd/oS16f7EphANBr3Px9Xgs7xkuJZTTveTvmQg+7xlk07cNOONtebuyHlp1Jm1yafNut+5q7PSaRXjo1TvxBuord5B5/nMcuArThZFuo5Oo6i15+B4J0GEjFqiKFWLtKhwThtFqCTzP6/739+m1zVUwM5Fudiy3Ar1NV+vvtLMflCIgc1+lrGu/gM= \ No newline at end of file diff --git a/doc/images/vhdl_cosim.png b/doc/images/vhdl_cosim.png new file mode 100644 index 0000000000000000000000000000000000000000..30bf058654ea00ac9c8e9ab8b57683b8556444ce GIT binary patch literal 51274 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 JE3nx|{Wo`<03-ka literal 0 HcmV?d00001 diff --git a/doc/images/vhdl_sim.drawio b/doc/images/vhdl_sim.drawio new file mode 100644 index 0000000..7a55f55 --- /dev/null +++ b/doc/images/vhdl_sim.drawio @@ -0,0 +1 @@ +1VhNc9owEP01HMvYku2YY4G0PSQzmZBMk14ywl5sNbJFhRxwf30lLH9hh6YJJEXMMN6nlbR6b7UID/Ak2XwVZBlf8hDYAFnhZoCnA4TOPEt9ayA3gHVWAJGgYQHZNTCjv8GAZlyU0RBWLUfJOZN02QYDnqYQyBZGhODrttuCs/aqSxJBB5gFhHXR7zSUsUE9y6o7vgGN4nJpVPYkpPQ2wComIV83IHw+wBPBuSyeks0EmCavJKYY9+WZ3ioyAal8yQD2azzNVpfXtw/0wcqt9d3Fj8knVMzyRFhmdjyjScaI5MJELfOSC8GzNAQ9mz3A43VMJcyWJNC9ayW+wmKZMNP9BEJSxeNnRqNUYZJrB7Oa6oPNs9uwK3JUVgFPQIpcuZgByDV8mozCvrHXtT5uKULckAaVjsTkRFTNXbOmHgxx/0Ci0yHxBlZyDmkQ7yHR+juJjMyBXfEVlZRrEgPFEYgGuxc7DgkNQ73SmBjaOyPaeiwoYxPOlNg6OLxw9UfjPJUNvGgKX0nBH6HR423bgZT128o6dldZx+lTFh1L2VFHPwhVfTAmFzLmEU8JO6/RcVvh2ueCa8q3uv4EKXNT7EgmeVt12FB513i+11MNXWNNN2bmrZEbo4hTB7effLUXnokA9uwZmzJLRARyj5/bL6YAVT3oUzuOgwuDO0duenvztsO2cxZCF/zQ6ct5H83xoXK+yucy591uztuoJ+e9Y6W822F2EkPwCPt+D17BLgF/EfRWlMCH+eIw7FY/03vY9d+TXP9U6okiWOR3TaMxSpv1sK11hDrkvbAO4Y+sQzb6SEVrFe8bPSevKHqrpGboFacqxKoaYHc0HKmSUDWnVRzcM2uI8ahu7fmLqM2UO1lTxfj6RPI6ZXcm9U2cnmDZxeg/K7u2cyp194CnDb3XRa7/tHmONew5YZ777AkrdnS0E4a6d8ZrWIAiVtGo/q8Xry5O/gbpOse7QSqzfl9R6FK/9cHnfwA= \ No newline at end of file diff --git a/doc/images/vhdl_sim.png b/doc/images/vhdl_sim.png new file mode 100644 index 0000000000000000000000000000000000000000..9e8c09fb3c29a52d99e3b7c0fbfe934bd6f02d9f GIT binary patch literal 43955 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ℜ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 K760sV?f(F;H#YMC literal 0 HcmV?d00001 diff --git a/doc/qz2021_-_using_python_for_verification_of_digital_systems.md b/doc/qz2021_-_using_python_for_verification_of_digital_systems.md new file mode 100644 index 0000000..efb1871 --- /dev/null +++ b/doc/qz2021_-_using_python_for_verification_of_digital_systems.md @@ -0,0 +1,498 @@ +--- +title: Using Python for Verification of Digital Systems +subtitle: QZ 2021 +author: +- Torsten Meißner +- torsten.meissner@secunet.com +date: February 2022 +... + +# Overview + +* Introduction + +* Functional Verification + +* Co-Simulation + +* Cocotb + +* Python Packages + +* Live Demo + +* Summary + +# Introduction + +## FPGA-Workflow + +1. Specification +2. Design entry +3. **Verification** +4. Synthesis +5. Device Mapping +6. Place & Route +7. Static Timing Analysis +8. Programming file generation + +# Introduction + +## Design Entry + +1. Schematic Entry +2. **Hardware Description Languages (RTL)** + * **(System)Verilog** + * **VHDL** +3. High level languages + * System C + * Bluespec + * Chisel + * nmigen + +# Functional Verification + +1. **Functional Verification** + * **Simulation** + * Emulation +2. Formal Verification + * Property checking + * Equivalence checking +3. Lab Tests + * Target platform + * Logic Analyzer + * Oscilloscope + +# Functional Verification + +## Simulation + +* Executing of design description in a simulator +* Test benches as infrastructure (HDL, C, etc.) +* Reference models (HDL, C, etc.) +* Directed & Random tests +* Code & functional Coverage +* Assertion Based Verification (PSL, SVA) +* Verification Frameworks (UVM, OSVVM, vUnit, etc.) +* Co-Simulation + +# HDL Simulation + + ![](images/vhdl_sim.png) + +# Co-Simulation + +- Simulation with access to/from external program code +- Linked per shared library + +## HDL Programming Interfaces + +- VHDL Procedural Interface (VHPI) +- Verilog Procedural Interface (VPI) +- Propitrary interfaces (FLI) +- Access data in VHDL models in the simulator + +## Features + +- Static VHDL Design Data (Traverse hierarchy etc.) +- Dynamic VHDL Objects (R/W values of VHDL objects) +- Interaction and control (Callbacks as comm. mechanism between simulator user code) +- Foreign model instantiation and intercommunication + +# Co-Simulation with SW reference Model + +![](images/vhdl_cosim.png) + +HDL testbench controls program flow + +# Cocotb + +- COroutine based COsimulation TestBench environment +- Verifying HDL designs with Python +- HDL normally only used for design, not the testbench +- Simulator only used to execute DUT RTL description +- Support many simulators (Free & propitrary) +- Free & open-source, active community + +## + +- High-level, multi-paradigm language +- Writing Python is fast - **very productive** language. +- **Easy interfacing** to other languages from Python +- **Huge library** of existing code to re-use +- **Interpreted** - tests can be edited and re-run w/o recompiling the design +- **Popular** - far more engineers know Python than Verilog / VHDL +- Working and reliable packet manager (PyPI) + +# Cocotb Co-Simulation + +![](images/cocotb_cosim.png) + +Python testbench controls program flow + +# Cocotb Design Interaction + +## Accessing Design + +- *dut* as handle to toplevel instantiation +- Access to toplevel and other signals with dot-notation + +~~~~ {.python .stretch} +# Reference to toplevel clock input +clk = dut.clk_i +# Reference to signal in sub-unit +cpu_pc = dut.cpu.regfile.pc +~~~~ + +## Read / Write Values from Signals + +- Via handle's *value* property +- Direct R/W access through the hierarchy + +~~~~ {.python .stretch} +# Via value property +valid = dut.valid_i.value +if valid.value == 0: + valid.value = 1 +# Direct access through hierarchy +if dut.reset_i.value == 1: + dut.cpu.regfile.pc.value = 0 +~~~~ + +# Cocotb concurrent & sequential execution + +## *async*: Mark Functions & Methods as Coroutines + +~~~~ {.python .stretch} +async def reset(signal, time,): + signal.value = 0 + # Block execution, wait for simulator time advances by 100 ns + await Timer(time, units='ns') # cocotb built-in class + signal.value = 1 +~~~~ + +## *await*: Wait for other Coroutines or Simulator + +- Block on another coroutines execution +- Pass control of execution back to simulator, allowing simulation time to advance + +~~~~ {.python .stretch} +print("Hold reset") +await reset(dut.reset_i) +print("Released reset") +~~~~ + +# Cocotb concurrent execution + +## *start()* + +1. Schedules the new coroutine to be executed concurrently +2. Yields control to allow the new task (& any other pending tasks) to run +3. Resumes the calling task + +~~~~ {.python .stretch} +await cocotb.start(reset(dut.reset_i, 100) + +await Timer(90, units='ns') +print(f"Reset is still active: {dut.reset_i.value}") +await Timer(15, units='ns') +print(f"Reset has gone inactive: {dut.reset_i.value}") +~~~~ + +## *start_soon()*: + +- Schedules the new coroutine for future execution, after the calling task yields control + +~~~~ {.python .stretch} +clock = Clock(dut.clk_i, 10, units="ns") # Create a clock, cocotb built-in class +cocotb.start_soon(clock.start()) # Start the clock concurrently +~~~~ + +# Cocotb test functions + +## *@cocotb.test()* Decorator + +- Mark a callable which returns a coroutine as a test +- Provides a test timeout +- Allows to mark tests as skipped or expecting errors or failures +- Tests are evaluated in the order of their definition in a test module + +~~~~ {.python .stretch} +@cocotb.test() +async def test_aes_init(dut): + """ Test AES initialization """ +... +@cocotb.test() +async def test_aes_enc(dut): + """ Test AES encryption """ +... +# This test is skipped from execution +@cocotb.test(skip=True) +async def test_aes_enc(dut): + """ Test AES encryption """ +~~~~ + +# Cocotb Triggers + +- Indicate when cocotb scheduler should resume coroutine execution +- Triggers should awaited for by coroutines + - Cause execution of the current coroutine to pause + - Execution of paused coroutine will resumes when trigger fires +- Triggers for simulator events, task synchronization etc. + +~~~~ {.python .stretch} +# Wait for 100 ns +await Timer(100, units='ns') + +# Wait for rising clock edge +await RisingEdge(dut.clk_i) + +# Wait for 10 clock cycles +await ClockCycles(dut.clk_i, 10) + +# Fires when first trigger in fires & returns its result +t1 = Timer(10, units='ns') +t2 = Timer(15, units='ns') +t_ret = await First(t1, t2) # returns after 10 ns simulation time +~~~~ + +# Cocotb Example: Verifying an UART transmitter + + ![](images/cocotb_uarttx.png) + +# Cocotb Example: Verifying an UART transmitter + +## + +![](images/vai_uart_wave.png) + + +# Cocotb Example: Verifying an UART transmitter + +## Valid-Accept Driver Model + +~~~~ {.python .stretch} +async def send(self, data, sync=True): + if sync: + await self._clkedge + + self._valid.value = 1 + + if isinstance(self._data, list): + for i in range(len(self._data)): + self._data[i].value = data[i] + + else: + self._data.value = data + + while True: + await ReadOnly() + if self._accept.value: + break + await self._clkedge + await self._clkedge + + self._valid.value = 0 +~~~~ + +# Cocotb Example: Verifying an UART transmitter + +## UART Receiver Model + +~~~~ {.python .stretch} +async def receive(self): + # Wait for frame start + await FallingEdge(self._txrx) + + # Consume start bit + await self._get_start_bit() + + # Receive data bits + self._rec = 0 + for x in range(self._bits): + await self._wait_cycle() + await ReadOnly() + self._rec |= bool(self._txrx.value.integer) << x + + if self._par: + # Consume parity bit + await self._get_parity_bit() + + # Consume stop bit + await self._get_stop_bit() + + return self._rec +~~~~ + +# Cocotb Example: Verifying an UART transmitter + +## Test function + +~~~~ {.python .stretch} +@cocotb.test() +async def test_uarttx(dut): + + # Instantiate VAI driver & UART receiver + vai_driver = VaiDriver(dut.clk_i, dut.data_i, dut.valid_i, dut.accept_o) + uart_receiver = UartReceiver(dut.tx_o, dut.clk_i, 10, 8, True); + + # Drive input defaults (setimmediatevalue to avoid x asserts) + dut.data_i.setimmediatevalue(0) + dut.valid_i.setimmediatevalue(0) + + cocotb.start_soon(Clock(dut.clk_i, 10, units="ns").start()) # Start the clock + await reset(dut.reset_n_i, 100) # Block until reset() has completed + + # Test 10 UART transmissions + for i in range(256): + await RisingEdge(dut.clk_i) + await vai_driver.send(i) + rec = await uart_receiver.receive(); + assert rec == i, "UART sent data was incorrect on the {}th cycle".format(i) +~~~~ + +# Cocotb Example: Verifying an UART transmitter + +~~~~ {.shell .stretch} +loading VPI module '/usr/local/lib/python3.9/dist-packages/cocotb/libs/libcocotbvpi_ghdl.so' + -.--ns INFO cocotb.gpi ../gpi/GpiCommon.cpp:99 in gpi_print_registered_impl VPI registered +VPI module loaded! + 0.00ns INFO Running on GHDL version 2.0.0-dev (v1.0.0-974-g0e46300c) [Dunoon edition] + 0.00ns INFO Running tests with cocotb v1.7.0.dev0 from /usr/local/lib/python3.9/... + 0.00ns INFO Seeding Python random module with 1644512771 + 0.00ns INFO Found test tb_uarttx.test_uarttx + 0.00ns INFO running test_uarttx (1/1) + First simple test + 0.00ns INFO Valid-accept driver + 0.00ns INFO cocotbext-vai version 0.0.1 + 0.00ns INFO Copyright (c) 2022 Torsten Meissner + 0.00ns INFO UART receiver + 0.00ns INFO cocotbext-uart version 0.0.1 + 0.00ns INFO Copyright (c) 2022 Torsten Meissner + 100.00ns INFO Released reset + 110.00ns INFO Send data: 0xb6 + ... + 11160.00ns INFO Received data: 0xd8 + 11160.00ns INFO test_uarttx passed + 11160.00ns INFO ********************************************************************** + ** TEST STATUS SIM TIME (ns) REAL TIME (s) + ********************************************************************** + ** tb_uarttx.test_uarttx PASS 11160.00 0.21 + ********************************************************************** + ** TESTS=1 PASS=1 FAIL=0 SKIP=0 11160.00 0.22 + ********************************************************************** +~~~~ + +# Python Packages + +## Cocotb related + +- Reusable packages for cocotb testbenches +- Bus protocols, reference models etc. +- Verification libraries + - pyuvm + - cocotb-coverage + - umv-python +- Depending on cocotb + +## Python generic + +- Generic Python packages useful for verification + - pyvsc + - pyucis +- Whole Python ecosystem +- Not depending on cocotb + + +# Python Packages: pyvsc + +## Python library for Verification Stimulus and Coverage + +- Random verification-stimulus generation +- Functional coverage collection +- Implemented in pure Python +- Uses Boolector SMT-solver for solving user-defined constraints + +~~~~ {.python .stretch} +@vsc.randobj +class my_cr(): + def __init__(self): + self.a = vsc.rand_bit_t(8) + self.b = vsc.rand_bit_t(8) + + @vsc.constraint + def ab_c(self): + self.a != 0 + self.a <= self.b + self.b in vsc.rangelist(1,2,4,8) +~~~~ + +# Live Demo + +## UART transmitter & receiver +- Simple tests using self written Python models for VAI & UART + +## Wishbone slave with local SRAM interface +- Using cocotbext-wishbone package from PyPI + +## AES128 en- and decryption +- Using pyvsc for constrained random & functional coverage +- Using Pycrypto for AES reference + +# Summary + +- Easy to use +- Good documentation +- In active development with regularly releases +- Free and open-source +- Allows Python SW-developers to verify digital systems +- Supports all major simulators used by FPGA teams + +## Presentations code examples + +* https://github.com/tmeissner/cocotb_with_ghdl + +## References + +* https://github.com/cocotb/cocotb +* https://github.com/fvutils/pyvsc +* https://github.com/wallento/cocotbext-wishbone + + +# Extras: Accessing signals + +## *dut.signal.value = 1* + +- Value is stored by the Scheduler +- All stored values are written at the same time at the end of the current simulator time step + +## *.setimmediatevalue()* + +- Value is assigned to this simulation object immediately + +## Access to elements of indexable objects (arrays etc.) + +~~~~ {.python .stretch} +dut.some_array[0].value = 1 +~~~~ + +- Bit order depends on the HDL object (*to* or *downto*) + +# Extras: Accessing signals + +## Reading synchronous signals + +- Returns after clock changes, but no sympathetic signals changed yet +- Sampling any signal here returns values settled during previous clock cycle +- Equivalent to registered processes in HDLs + +## *ReadOnly()* + +- Triggers in the postpone phase +- All signals have settled +- No more updates may occur on the clock edge event +- Sampling any signal here returns values settled current clock cycle + +# Extras: Accessing signals + +![](images/readonly.png) diff --git a/doc/template/template.tex b/doc/template/template.tex new file mode 100644 index 0000000..922e0a6 --- /dev/null +++ b/doc/template/template.tex @@ -0,0 +1,191 @@ +\documentclass[usenames,dvipsnames,10pt,aspectratio=169]{beamer} +\usepackage{fontspec} +\setmainfont{Liberation Sans} +\setmonofont{Liberation Mono} +%\usepackage[margin=1in]{geometry} +\usepackage{hyperref} +\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref +\hypersetup{unicode=true, +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$; $endfor$}, +$endif$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls + +\setbeamercolor{title}{fg=Maroon} +\setbeamercolor{subtitle}{fg=MidnightBlue} +\setbeamercolor{frametitle}{fg=MidnightBlue} +\setbeamercolor{structure}{fg=MidnightBlue} + +% Don't show things we don't want to see +\beamertemplatenavigationsymbolsempty + +% Slide number in lower right +\setbeamertemplate{footline}{ + \raisebox{5pt}{ + \makebox[\paperwidth]{ + \hfill\makebox[0.15\linewidth]{\color{Gray} \footnotesize Torsten Meißner} + \hfill\makebox[0.7\linewidth]{\color{Gray} \footnotesize \insertshorttitle} + \hfill\makebox[0.15\linewidth]{\color{Gray} \footnotesize \insertframenumber ~/ \inserttotalframenumber} + } + } + \hspace*{5pt} +} + +% Color and shape of bullets +\setbeamercolor{item}{fg=Gray} +\setbeamercolor{subitem}{fg=Gray} +% \setbeamercolor{itemize/enumerate subbody}{fg=gray} +\setbeamertemplate{itemize item}{{\textendash}} +\setbeamertemplate{itemize subitem}{{\textendash}} +\setbeamerfont{itemize/enumerate subbody}{size=\footnotesize} +\setbeamerfont{itemize/enumerate subitem}{size=\footnotesize} + +%\usepackage{fancyvrb} +%\DefineVerbatimEnvironment{verbatim}{Verbatim}{frame=leftline, fontsize=\small, baselinestretch=1.17} +%\VerbatimFootnotes % allows verbatim text in footnotes + +\usepackage{listings} +\lstset{ + basicstyle=\ttfamily\scriptsize, + keywordstyle=\color{Maroon}, + stringstyle=\color{NavyBlue}, + showstringspaces=false, + frame=leftline, + xleftmargin=5pt, + tabsize=2, +} + +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +\usepackage{caption} +% These lines are needed to make table captions work with longtable: +\makeatletter +\def\fnum@table{\tablename~\thetable} +\makeatother +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight0.8\textheight\else\Gin@nat@height\fi} +\makeatother +\centering +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ + +% Prevent slide breaks in the middle of a paragraph: +\widowpenalties 1 10000 +\raggedbottom + +\newif\ifbibliography +$if(section-titles)$ +\AtBeginPart{ + \let\insertpartnumber\relax + \let\partname\relax + \frame{\partpage} +} +\AtBeginSection{ + \ifbibliography + \else + \let\insertsectionnumber\relax + \let\sectionname\relax + \frame{\sectionpage} + \fi +} +\AtBeginSubsection{ + \let\insertsubsectionnumber\relax + \let\subsectionname\relax + \frame{\subsectionpage} +} +$endif$ + +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{5} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ + +$if(title)$ +\title{$title$} +$endif$ +$if(subtitle)$ +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \\ $endfor$} +$endif$ +\date{$date$} + +\begin{document} +$if(title)$ +\frame{\maketitle} +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ + +$if(toc)$ +\begin{frame} +\tableofcontents[hideallsubsections] +\end{frame} + +$endif$ +$body$ + +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document}