[PYTHON] Jupyter avec PYNQ et synthèse de haut niveau avec Polyphony

Jupyter sur un tableau appelé PYNQ

Une carte appelée PYNQ vendue par Digilent peut utiliser Jupyter en standard. Je vais le présenter car c'est un produit avec un concept intéressant de coopération avec FPGA. Ensuite, essayez d'utiliser la polyphonie, un outil de synthèse de haut niveau qui génère des verilogs à partir de Python.

Qu'est-ce que PYNQ?

Pour plus d'informations sur PYNQ, veuillez consulter ici. Il s'agit d'une carte équipée d'un SoC ARM + FPGA appelé Zynq. J'ai acheté ce genre de planche à la hâte.

P en Pynq est P en Python. Assurez-vous que les boutons sont roses. IMG_0427.JPG

Ne pensez-vous pas qu'il est intéressant d'avoir HDMI OUT / HDMI IN? Alors, souhaitez-vous l'utiliser?

Allumer + prêt à l'emploi sur le réseau

Normalement, ce type de carte doit être déplacé en regardant le manuel et en connectant diverses choses, comme l'IoT, en hurlant au milieu de la nuit, mais cette carte peut être utilisée rapidement à partir de la journée. Si vous mettez l'appareil sous tension et que vous vous connectez au réseau, vous pouvez facilement vous connecter à Windows en tapant http: // pynq: 9090 avec un navigateur. Il semble que Samba et NetBIOS fonctionnent et résolvent les noms pour Windows.

2016-12-13.png

Utiliser un exemple de reconnaissance faciale (depuis une caméra USB)

Vous pouvez facilement utiliser la reconnaissance faciale OpenCV en connectant une caméra USB. Où est le FPGA? Cependant, la caractéristique est qu'il peut être utilisé sans équipement ni préparation à portée de main. Si vous n'avez même pas de caméra USB, vous pouvez lire à partir d'un fichier. Si vous disposez d'une caméra vidéo avec sortie HDMI, vous pouvez également y entrer. Vous utilisez FPGA pour l'entrée HDMI.

Le résultat est subtil, mais j'en ai assez de le capturer, alors pardonnez-moi. Vous pouvez le faire de toute façon. 2016-12-13 (3).png

Installer et exécuter Polyphony

Installez un outil de synthèse de haut niveau appelé Polyphony. Vous devriez probablement pouvoir le faire avec l'installation de pip3. Ici, je vais décomposer ce qu'est la composition de haut niveau et l'utiliser réellement. La source à mordre est le code Python suivant.

list11.py


from polyphony import testbench


def sum(l1:list):
    def sub_sum(l2:list):
        def sub_sub_sum(l2:list):
            s = 0
            for l in l2:
                s += l
            return s
        return sub_sub_sum(l2)
    return sub_sum(l1)

def list11(x):
    data1 = [x, 1, 2]
    data2 = [x, 1, 2, 3, 4, 5]
    s1 = sum(data1)
    s2 = sum(data2)
    return s1 + s2 + x

@testbench
def test():
    assert 18 == list11(0)
    assert 21 == list11(1)
    assert 24 == list11(2)


test()

C'est un peu sournois, mais je l'exécute depuis Jupyter avec un sous-processus. 2016-12-13 (4).png

Vous voyez, polyphony_out.v est créé.

2016-12-13 (5).png

C'est le code verilog qui a été créé !!

Je voudrais tous les mettre, mais je les omets parce qu'ils atteignent les lignes 911.

polyphony_out.v


module sum_sub_sum_sub_sub_sum
  (
    input wire signed [31:0] l21_q,
    input wire signed [12:0] l21_len,
    input wire CLK,
    input wire RST,
    input wire sub_sub_sum_READY,
    input wire sub_sub_sum_ACCEPT,
    output reg signed [31:0] sub_sub_sum_OUT0,
    output reg l21_req,
    output reg signed [31:0] l21_d,
    output reg signed [12:0] l21_addr,
    output reg l21_we,
    output reg sub_sub_sum_VALID  );

Zack ...

  begin
    if (in_addr[ADDR_WIDTH-1] == 1'b1) begin
      address = RAM_LENGTH + in_addr;
	end else begin
      address = in_addr;
    end
  end
  endfunction // address
  wire [ADDR_WIDTH-1:0] a;
  assign a = address(ADDR);
  assign Q = mem[read_addr];
  assign LEN = RAM_LENGTH;
  always @ (posedge CLK) begin
    if (WE)
      mem[ADDR] <= D;
	read_addr <= a;
  end
endmodule

Que faites-vous après cela?

Vous pouvez probablement le simuler en installant iverilog. J'ai aussi Samba, donc je pense que si c'est bien fait, il peut être synthétisé en coopération avec Vivado. Je n'ai pas encore accompli grand chose.

On dirait que c'est sur le point d'être écrit, mais c'est tout.

Recommended Posts

Jupyter avec PYNQ et synthèse de haut niveau avec Polyphony
Utiliser Jupyter Lab et Jupyter Notebook avec EC2
Lier Python et JavaScript avec le notebook Jupyter
Afficher de manière interactive des courbes algébriques en Python, Jupyter
J'ai essayé la synthèse de fonctions et le curry avec python
Visualisez de manière interactive les données avec Treasure Data, Pandas et Jupyter.
Manipuler des objets S3 avec Boto3 (API de haut niveau et API de bas niveau)
Sélection multiple avec Jupyter
Bougies avec plotly + Jupyter
installation de jupyter et pandas
Avec et sans WSGI
Utilisez nim avec Jupyter
Lisez le fichier VTK et affichez la carte des couleurs avec jupyter.