Browse Source

Merge pull request #1 from cmarqu/patch-1

master
T. Meissner 2 years ago
committed by GitHub
parent
commit
4a0c9dc42b
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 13 additions and 14 deletions
  1. +13
    -14
      doc/qz2021_-_using_python_for_verification_of_digital_systems.md

+ 13
- 14
doc/qz2021_-_using_python_for_verification_of_digital_systems.md View File

@ -12,7 +12,6 @@ date: February 2022
* Introduction * Introduction
* Functional Verification * Functional Verification
* Co-Simulation * Co-Simulation
* Cocotb * Cocotb
@ -89,7 +88,7 @@ date: February 2022
- VHDL Procedural Interface (VHPI) - VHDL Procedural Interface (VHPI)
- Verilog Procedural Interface (VPI) - Verilog Procedural Interface (VPI)
- Propitrary interfaces (FLI)
- Proprietary interfaces (FLI)
- Access data in VHDL models in the simulator - Access data in VHDL models in the simulator
## Features ## Features
@ -111,7 +110,7 @@ HDL testbench controls program flow
- Verifying HDL designs with Python - Verifying HDL designs with Python
- HDL normally only used for design, not the testbench - HDL normally only used for design, not the testbench
- Simulator only used to execute DUT RTL description - Simulator only used to execute DUT RTL description
- Support many simulators (Free & propitrary)
- Supports many simulators (Free & proprietary)
- Free & open-source, active community - Free & open-source, active community
## ##
@ -235,7 +234,7 @@ async def test_aes_enc(dut):
# Cocotb Triggers # Cocotb Triggers
- Indicate when cocotb scheduler should resume coroutine execution - Indicate when cocotb scheduler should resume coroutine execution
- Triggers should awaited for by coroutines
- Triggers should be awaited by coroutines
- Cause execution of the current coroutine to pause - Cause execution of the current coroutine to pause
- Execution of paused coroutine will resumes when trigger fires - Execution of paused coroutine will resumes when trigger fires
- Triggers for simulator events, task synchronization etc. - Triggers for simulator events, task synchronization etc.
@ -256,18 +255,18 @@ t2 = Timer(15, units='ns')
t_ret = await First(t1, t2) # returns after 10 ns simulation time t_ret = await First(t1, t2) # returns after 10 ns simulation time
~~~~ ~~~~
# Cocotb Example: Verifying an UART transmitter
# Cocotb Example: Verifying a UART transmitter
![](images/cocotb_uarttx.png) ![](images/cocotb_uarttx.png)
# Cocotb Example: Verifying an UART transmitter
# Cocotb Example: Verifying a UART transmitter
## ##
![](images/vai_uart_wave.png) ![](images/vai_uart_wave.png)
# Cocotb Example: Verifying an UART transmitter
# Cocotb Example: Verifying a UART transmitter
## Valid-Accept Driver Model ## Valid-Accept Driver Model
@ -295,7 +294,7 @@ async def send(self, data, sync=True):
self._valid.value = 0 self._valid.value = 0
~~~~ ~~~~
# Cocotb Example: Verifying an UART transmitter
# Cocotb Example: Verifying a UART transmitter
## UART Receiver Model ## UART Receiver Model
@ -324,7 +323,7 @@ async def receive(self):
return self._rec return self._rec
~~~~ ~~~~
# Cocotb Example: Verifying an UART transmitter
# Cocotb Example: Verifying a UART transmitter
## Test function ## Test function
@ -351,7 +350,7 @@ async def test_uarttx(dut):
assert rec == i, "UART sent data was incorrect on the {}th cycle".format(i) assert rec == i, "UART sent data was incorrect on the {}th cycle".format(i)
~~~~ ~~~~
# Cocotb Example: Verifying an UART transmitter
# Cocotb Example: Verifying a UART transmitter
~~~~ {.shell .stretch} ~~~~ {.shell .stretch}
loading VPI module '/usr/local/lib/python3.9/dist-packages/cocotb/libs/libcocotbvpi_ghdl.so' loading VPI module '/usr/local/lib/python3.9/dist-packages/cocotb/libs/libcocotbvpi_ghdl.so'
@ -392,7 +391,7 @@ VPI module loaded!
- Verification libraries - Verification libraries
- pyuvm - pyuvm
- cocotb-coverage - cocotb-coverage
- umv-python
- uvm-python
- Depending on cocotb - Depending on cocotb
## Python generic ## Python generic
@ -443,12 +442,12 @@ class my_cr():
- Easy to use - Easy to use
- Good documentation - Good documentation
- In active development with regularly releases
- In active development with regular releases
- Free and open-source - Free and open-source
- Allows Python SW-developers to verify digital systems - Allows Python SW-developers to verify digital systems
- Supports all major simulators used by FPGA teams - Supports all major simulators used by FPGA teams
## Presentations code examples
## Presentation's code examples
* https://github.com/tmeissner/cocotb_with_ghdl * https://github.com/tmeissner/cocotb_with_ghdl
@ -491,7 +490,7 @@ dut.some_array[0].value = 1
- Triggers in the postpone phase - Triggers in the postpone phase
- All signals have settled - All signals have settled
- No more updates may occur on the clock edge event - No more updates may occur on the clock edge event
- Sampling any signal here returns values settled current clock cycle
- Sampling any signal here returns values settled in current clock cycle
# Extras: Accessing signals # Extras: Accessing signals


Loading…
Cancel
Save