[PYTHON] Jupyter mit PYNQ und Synthese auf hohem Niveau mit Polyphonie

Jupyter auf einem Board namens PYNQ

Ein von Digilent vertriebenes Board namens PYNQ kann Jupyter als Standard verwenden. Ich werde es vorstellen, weil es ein Produkt mit einem interessanten Konzept der Zusammenarbeit mit FPGA ist. Versuchen Sie dann, Polyphony zu verwenden, ein Synthesewerkzeug auf hoher Ebene, das Verilogs aus Python generiert.

Was ist PYNQ?

Weitere Informationen zu PYNQ finden Sie unter hier. Es ist eine Karte, die mit einem ARM + FPGA-SoC namens Zynq ausgestattet ist. Ich habe diese Art von Board in Eile gekauft.

P in Pynq ist P in Python. Stellen Sie sicher, dass die Tasten rosa sind. IMG_0427.JPG

Finden Sie es nicht interessant, HDMI OUT / HDMI IN zu haben? Dann möchten Sie es verwenden?

Einschalten + einsatzbereit im Netzwerk

Normalerweise muss diese Art von Board bewegt werden, indem man sich das Handbuch ansieht und verschiedene Dinge wie IoT verbindet, die mitten in der Nacht schreien. Dieses Board kann jedoch tagsüber schnell verwendet werden. Wenn Sie das Gerät einschalten und eine Verbindung zum Netzwerk herstellen, können Sie problemlos eine Verbindung zu Windows herstellen, indem Sie mit einem Browser http: // pynq: 9090 eingeben. Es scheint, dass Samba und NetBIOS arbeiten und Namen für Windows auflösen.

2016-12-13.png

Verwenden Sie die Beispielgesichtserkennung (von der USB-Kamera).

Sie können die OpenCV-Gesichtserkennung problemlos verwenden, indem Sie eine USB-Kamera anschließen. Wo ist das FPGA? Das Merkmal ist jedoch, dass es ohne Ausrüstung oder Vorbereitung verwendet werden kann. Wenn Sie nicht einmal eine USB-Kamera haben, können Sie aus einer Datei lesen. Wenn Sie eine Videokamera mit HDMI-Ausgang haben, können Sie diese auch eingeben. Sie verwenden FPGA für den HDMI-Eingang.

Das Ergebnis ist subtil, aber ich bin es leid, es festzuhalten, also vergib mir. Du kannst es trotzdem tun. 2016-12-13 (3).png

Installieren Sie Polyphony und führen Sie es aus

Installieren Sie ein übergeordnetes Synthesetool namens Polyphony. Sie sollten dies wahrscheinlich mit der Installation von pip3 tun können. Hier werde ich die Komposition auf hoher Ebene aufschlüsseln und sie tatsächlich verwenden. Die zu beißende Quelle ist der folgende Python-Code.

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()

Es ist ein bisschen schlau, aber ich führe es von Jupyter mit Unterprozess aus. 2016-12-13 (4).png

Sie sehen, polyphony_out.v wird erstellt.

2016-12-13 (5).png

Dies ist der Verilog-Code, der erstellt wurde !!

Ich würde gerne alle setzen, aber ich lasse sie weg, weil sie 911 Linien erreichen.

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

Was tust du danach?

Sie können es wahrscheinlich simulieren, indem Sie iverilog installieren. Ich habe auch Samba, daher denke ich, dass es in Zusammenarbeit mit Vivado synthetisiert werden kann, wenn es gut gemacht wird. Ich habe noch nicht so viel erreicht.

Es sieht so aus, als würde es gleich geschrieben, aber das war's.

Recommended Posts

Jupyter mit PYNQ und Synthese auf hohem Niveau mit Polyphonie
Verwenden Sie Jupyter Lab und Jupyter Notebook mit EC2
Verknüpfung von Python und JavaScript mit dem Jupiter-Notizbuch
Interaktive Anzeige algebraischer Kurven in Python, Jupyter
Ich habe Funktionssynthese und Curry mit Python versucht
Visualisieren Sie Daten interaktiv mit TreasureData, Pandas und Jupyter.
Bearbeiten Sie S3-Objekte mit Boto3 (High-Level-API und Low-Level-API)
Mehrfachauswahl mit Jupyter
Kerzenbeine mit Plot + Jupyter
Installation von Jupyter und Pandas
Mit und ohne WSGI
Verwenden Sie nim mit Jupyter
Lesen Sie die VTK-Datei und zeigen Sie die Farbkarte mit Jupiter an.