semvec/pypi-packages huggingface dataset:
fpgatools 1.2.0
University project to support FPGA development.
License: MIT
Keywords: fpga,development,xdc,testbench,generator,tb

# FPGA Tools
University project to support FPGA development for Nexys 4 and Nexys 4 DDR development boards.

Project supports:
  - TestBench generation
  - Constraint generation

Controls:
 - **File -> Browse:** Search for your source VHDL file. Will be used for signal names and the base for the generation.
 - **File -> Import Pinout:** Custom port list can be imported.
 - **Generate -> TestBench:** Click if you want to generate testbench for your project.
 - **Generate -> Constraint:** Click if you want to generate constraints for your project. Double check your Signal - I/O bindings.
 - **Switch between Nexys4 and Nexys4 DDR** with radio buttons.
 - You can choose to **use onboard 100 MHz clock**.
![Picture of GUI](https://github.com/Fint0r/FPGA_Tools/blob/master/misc/doc/sw_gui.jpg?raw=true "Picture of the SW")

## Custom port list format
Custom pinout (port list) can be added to the software. You can browse your JSON file with File -> Import Pinout.
Custom port list should be edited according to the following example.
```json
{
   "Name":"Name of your config", // Shall include a name
   "Switch":{   // Every pin shall be organized into groups
      "SW0":"J15",  // Key: functionality, Value: IC pin name
      "SW1":"J16",
      "SW2":"J17",
      "SW3":"J18"
   },
   "LED":{
      "LED0":"H17",
      "LED1":"H18",
      "LED2":"H19",
      "LED3":"H20"
   },
   "Button":{
      "BTN0":"U01",
      "BTN1":"U02",
      "BTN2":"U03"
   },
    "CLK, Reset":{
      "Clock":"E3",
      "Reset":"R12" 
   }
}
```

## Using as library
You can download files as python library via pip install: "pip install fpgatools".

```python
import fpgatools.FPGA_Tools as ft

ft.showwindow()
```

https://pypi.org/project/fpgatools/
## Windows

Runnable exe can be found under "Runnable exe" folder.\
Exe generation can be run with misc/generate_exe.bat.

## Linux

Executable can be found in "Runnable exe" folder.\
You can generate the executable by running the misc/generate_linux.sh script.

INFO: Be sure libxcb installed. If not install with: "sudo apt-get install libxcb-xinerama0".
## Misc
Generated GUI design can be found in misc/gui_design.ui. Created with QT Designer.
Few popular antivirus software alerts useres about virus in exe. Its false positive alert, because the exe is unsigned (not certificated) [more about signing EXE](https://stackoverflow.com/questions/252226/signing-a-windows-exe-file?noredirect=1&lq=1). [VirusTotal report](https://www.virustotal.com/gui/file/15d41d4d85b69bdeec66af8920b53919d32ba3c486c09b2b85eca7ae09223686/detection)
If you would like to generate your own "virus free" exe you can use [generate_exe.bat](https://github.com/Fint0r/FPGA_Tools/blob/master/misc/generate_exe.bat), in this case you need all of the dependencies installed for your python.

### Feel free to contact us if you have any question.
fooster-cron 0.9.0
a small cron-like scheduler in Python
License: MIT

fooster-cron
============

fooster-cron is small cron-like scheduler designed for simple, recurring jobs. It supports a basic set of field values though is extensible by using any class inheriting from `cron.Field`. Because this package is multiprocessing, shared objects must be synchronized, e.g. by `multiprocessing.Manager`.


Usage
-----

Below is basic usage for calling a function and printing a message every hour (at minute 0), a set of minutes every hour, and every 20 minutes per hour.

```python
from fooster import cron

def count():
    for i in range(5):
        print(i)

scheduler = cron.Scheduler()
scheduler.add(cron.Job(count, minute=5))
scheduler.add(cron.Job(print, ['Hourly function, run every hour on the hour!'], name='hourly', minute=0))
scheduler.add(cron.Job(print, ['This one runs at special minutes!'], minute=[1, 2, 3, 5, 8, 13, 21, 34, 55]))
scheduler.add(cron.Job(print, ['This one runs every 20 minutes within each hour!'], minute=cron.Every(20)))
scheduler.start()

scheduler.join()
```


### cron.Job

Prototype:
```python
cron.Job(function, args=(), kwargs={}, name=None, minute=cron.All(), hour=cron.All(), day=cron.All(), month=cron.All(), weekday=cron.All())
```

Attributes:

| Attribute | Value                                  |
| --------- | -------------------------------------- |
| function  | function to call                       |
| args      | tuple of function arguments            |
| kwargs    | dictionary of named function arguments |
| minute    | range [0, 59]                          |
| hour      | range [0, 23]                          |
| day       | range [1, 31]                          |
| month     | range [1, 12]                          |
| weekday   | range [0, 6], 0 is Monday              |


### cron.Field

To make a custom field, inherit from `cron.Field` and change the `__eq__` method to return `True` when the passed value matches. The param member of the class is automatically populated with the passed argument unless the `__init__` method is overridden. The value passed is a value from one of the `time.struct_time` fields.


#### Examples

##### List

```python
class List(cron.Field):
    def __eq__(self, value):
        return value in self.param
```


##### All

```python
class All(cron.Field):
    def __init__(self):
        pass

    def __eq__(self, value):
        return True
```