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.
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.
Finden Sie es nicht interessant, HDMI OUT / HDMI IN zu haben? Dann möchten Sie es verwenden?
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.
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.
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.
Sie sehen, polyphony_out.v wird erstellt.
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
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