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.
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.
Ne pensez-vous pas qu'il est intéressant d'avoir HDMI OUT / HDMI IN? Alors, souhaitez-vous l'utiliser?
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.
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.
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.
Vous voyez, polyphony_out.v est 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
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