Olen suunnitellut järjestelmän, joka käyttää Artix-7 FPGA: ta mukautetulla levyllä. Tavoitteena on siirtää 32-bittinen data ulkoiselle sirulle, jonka tietoväylä on inout
-portti. Ensinnäkin pieni tausta:
Ulkoista sirua ohjaa 100 MHz: n kello, jonka FPGA muodostaa, kutsumme sitä nimellä o_clk
. FPGA muodostaa tämän kellon MMCM: n kautta muistiliitäntän generaattorissa (MIG IP) käyttäen 200 MHz: n differentiaalijärjestelmän kelloa. o_clk
on kytketty takaisin FPGA: n lähtöön ja se annetaan toiselle pallolle tulokellona, kutsumme sitä nimellä i_clk
.
Ulkoinen siru vastaanottaa o_clk
ja näkee tietoja tämän kellon nousevasta reunasta. Kuitenkin, kun ulkoinen siru lähettää tietoja takaisin FPGA: lle, FPGA näkee nämä tiedot silmukoituna takaisin i_clk
-näytöllä. Tämän tekemisen idea on, että voimme käsitellä viestintää synkronisena lähteenä molempiin suuntiin (muista, että se on inout
-portti). Jotain alla olevaa:
FPGA - > EC on synkronoitu FPGA: n kanssa, koska FPGA luo kellon
EC - > FPGA on synkronoitu EC: n kanssa, koska FPGA saa ulkoisen kellon (käytännössä EY: ltä)
Tämän mallin rajoittamiseksi olen käyttänyt i_clk
-näppäintä asettamaan viiveitä io_data
-toiminnolle ja rajoittanut tuotoksen sama io_data
-väylä. Olen varmistanut, että käytän edelleen lähetettyä kelloa ( create_generated_clock
) (käyttäen ODDR2: ta) rajoitukselle set_output_delay
.
Tässä ovat rajoitukseni:
create_clock -period 10.000 -name i_clk -waveform {0.000 5.000} [get_ports i_clk]
set_clock_groups -name loopback_grp -asynchronous -group [get_clocks i_clk] -group [get_clocks o_clk]
set_input_delay -clock i_fx3_pclk -max 8.000 [get_ports io_fx3_fdata]
set_input_delay -clock i_clk -min 2.000 [get_ports io_data]
set_output_delay -clock o_clk -max 2.000 [get_ports io_data]
set_output_delay -clock o_clk -min -0.500 [get_ports io_data]
Järjestelmä näyttää toimivan kunnolla, kun käytän sitä laitteistolla, mutta minulla on silti epäilyksiä, koska olen edelleen amatööri FPGA-kehittäjä ja tämä on ensimmäinen iso FPGA-suunnitteluni.
Kysymykseni ovat:
- Olenko suunnitellut hyvän järjestelmän?
- Onko oikein kohdella tiedonsiirtoa EY: stä -> FPGA: sta lähdekoodina?(Toinen suunta on lähdesynkronointi, koska FPGA tarjoaa kellon, jos en ole väärässä.!)
- Ovatko rajoitukseni oikein?