рдПрдирд╛рд▓реЙрдЧ рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡реЙрдпрд╕ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕реЙрдЗрд▓ Xilinx Zynq 7000 рдкрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛рд░реНрдб рдХрд╛ рд╡рд┐рдХрд╛рд╕



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо SoC ARM + FPGA Xilinx Zynq 7000 рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдпреВрдирд┐рдЯ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдб рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрдкрдирд╛ рдЕрдиреБрднрд╡ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВрдЧреЗред рдмреЛрд░реНрдбреЛрдВ рдХреЛ рдПрдирд╛рд▓реЙрдЧ рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ PRI / BRI рдкреНрд░рд╛рд░реВрдк (ISDN, E1 / T1) рдореЗрдВ рднрд╛рд╖рдг рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдВрддрд┐рдо рдЙрдкрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╛рдЧрд░рд┐рдХ рдЙрдбреНрдбрдпрди рдореЗрдВ рдмрд╛рддрдЪреАрдд рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЖрдпрд░рди: рдбрд┐рд╡рд╛рдЗрд╕ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдЪрдпрди


рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рд╡рд┐рдХрд▓реНрдк PRI / BRI рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рдорд░реНрдерди рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдХреЗрд╡рд▓ FPGA рдкрдХреНрд╖ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ (рдПрдорд╕реАрдпреВ) рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ (рдПрдордкреАрдпреВ) рдлрд┐рдЯ рдирд╣реАрдВ рдереЗред

рдХреЛрдИ рднреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рджреЛ рд╕рдорд╛рдзрд╛рди рдЪреБрди рд╕рдХрддрд╛ рд╣реИ:

  1. рдорд╛рдЗрдХреНрд░реЛрдмреНрд▓реЗрдЬрд╝ рдЖрдИрдкреА рдХреЛрд░ рд╕рдВрд╢реНрд▓реЗрд╖рдг
  2. SoC Zynq-7000ред

рд╣рдо Zynq 7000 рдЪрд┐рдк (SoC) рдкрд░ рдПрдХ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдмрд╕реЗ, рдХреНрдпреЛрдВрдХрд┐ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдФрд░ рд╡рд░реНрддрдорд╛рди рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

рдХреБрд▓ рдореЗрдВ, рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рддрд╣рдд рд▓реЛрд╣реЗ рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реВрдЪреА рдПрдХрддреНрд░ рдХреА рдЧрдИ рдереА:

1.Xilinx Zynq 7020 ( рдорд╛рд░реНрд╕-рдЬреЗрдбрдПрдХреНрд╕ 3 рдФрд░ рдорд╛рд░реНрд╕ рдИрдмреА 1 )

рдПрдВрдХреНрд▓рд╕реНрдЯреНрд░рд╛ рдорд╛рд░реНрд╕ рдЬреЗрдбрдПрдХреНрд╕ 3 рдПрд╕рдУрдПрдо

рдПрдВрдХреНрд▓рд╕реНрдЯреНрд░рд╛ рдорд╛рд░реНрд╕ EB1 рдмреЗрд╕рдмреЛрд░реНрдб

2. TI TLV320AIC34 ( tlv320aic34evm-k рдФрд░ USB рдорджрд░рдмреЛрд░реНрдб)ред


Tlv320aic34 рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рдмреЛрд░реНрдб (tlv320aic34evm-k)


Tlv320aic34evm-k рдХреЗ рд▓рд┐рдП USB-MODEVM рд╡рд┐рд╕реНрддрд╛рд░ рдмреЛрд░реНрдб

3. IDT82P2288 - PRI, XHFC-4SU - BRI microcircuits, рдХреЛрдИ рдбреАрдмрдЧрд┐рдВрдЧ рдХрд┐рдЯ рдирд╣реАрдВ рдереЗ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдХреЗрд╡рд▓ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИрдкреА рдХреЛрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдиреАрдВрд╡ рд░рдЦреА, рдФрд░ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХреЗ рдмреЛрд░реНрдб рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдЖрдЧ рдХреА рдмрдкрддрд┐рд╕реНрдорд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╣реА рд╣реБрдЖред

Xilinx Zynq 7000 рдЪрд┐рдк рдкрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ




SoC Xilinx Zynq 7000 рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛


Xilinx Zynq рдХреЗ рд▓рд┐рдП рдмреВрдЯ рдлрд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо

Zynq рдХреЗ рд▓рд┐рдП рдлреНрд▓реИрд╢рд┐рдВрдЧ / рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ рдирд┐рд╖реНрдкрд╛рджрди рдПрдордкреАрдпреВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдбрд╛рдЙрдирд▓реЛрдб рд╕реЗ рдЕрд▓рдЧ рд╣реИред рдХреЙрд░реНрдЯреЗрдХреНрд╕-рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рдпреВ-рдмреВрдЯ, рдХрд░реНрдиреЗрд▓ рд▓рд╛рдЗрдирдХреНрд╕, рд░реВрдЯрдлрд╝реНрд╕ рд▓реЛрдб рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ Zynq рдкрд░, рдмрд┐рдЯрд╕реНрдЯреНрд░реАрдо рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, FPGAs рдХреЗ рд▓рд┐рдП рдлрд░реНрдорд╡реЗрдпрд░ рдлрд╝рд╛рдЗрд▓ред рдмрд┐рдЯрд╕реНрдЯреНрд░реАрдо рдореЗрдВ FPGA рдкрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдмреНрд▓реЙрдХ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд╕рд╛рде рдЖрдВрддрд░рд┐рдХ рд╕рдВрдЪрд╛рд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░ рднрд░реА рд╣реБрдИ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓рд┐рдирдХреНрд╕ рдХреА рдУрд░ рдПрдХ рддрдВрддреНрд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рджреМрд░рд╛рди рдкреАрдПрд▓ рднрд╛рдЧ рдХреЛ рддреБрд░рдВрдд рдлреНрд▓реИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ 2018.1 рдХреЗ рдмрд╛рдж рд╕реЗ xdevcfg ( ZYNQ FPGA рдкреНрд░рдмрдВрдзрдХ ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

PRI / BRI рдЗрдВрдЯрд░рдлреЗрд╕



рдбрд┐рдЬрд┐рдЯрд▓ рдиреЗрдЯрд╡рд░реНрдХ PRI / BRI рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдкреНрд░рд╛рдердорд┐рдХ рджрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (PRI) рдПрдХ рдорд╛рдирдХ ISDN рдиреЗрдЯрд╡рд░реНрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ рдЬреЛ ISDN рд╕реНрдЯреЗрд╢рдиреЛрдВ рдХреЛ рдмреНрд░реЙрдбрдмреИрдВрдб рдЯреНрд░рдВрдХ рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдиреБрд╢рд╛рд╕рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреАрдп рдФрд░ рдХреЗрдВрджреНрд░реАрдп рдПрдХреНрд╕рдЪреЗрдВрдЬреЛрдВ рдпрд╛ рдиреЗрдЯрд╡рд░реНрдХ рд╕реНрд╡рд┐рдЪ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред


рдкреАрдЖрд░рдЖрдИ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рд┐рдд рдлреНрд░реЗрдо рдХрд╛ рдкреНрд░рдХрд╛рд░


BRI рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд░рд┐рдд рдлреНрд░реЗрдо рдХрд╛ рджреГрд╢реНрдп


PRI рднреМрддрд┐рдХреА рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ - IDT82P2288


BRI рднреМрддрд┐рдХреА рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ - XHFC-4SU

рдСрдбрд┐рдпреЛ рдХреЛрдбреЗрдХ TLV320AIC34


рдкреЛрд░реНрдЯреЗрдмрд▓ рдСрдбрд┐рдпреЛ рдФрд░ рдЯреЗрд▓реАрдлреЛрдиреА рдХреЗ рд▓рд┐рдП рдЪрд╛рд░-рдЪреИрдирд▓ рд▓реЛ-рдкрд╛рд╡рд░ TLV320AIC34 рдСрдбрд┐рдпреЛ рдХреЛрдбреЗрдХ рдПрдирд╛рд▓реЙрдЧ рдЯреЗрд▓реАрдлреЛрдиреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИред


Tlv320aic34 A-part, рдСрдбрд┐рдпреЛ рдХреЛрдбреЗрдХ рдореЗрдВ рджреЛ рдРрд╕реЗ рдлрдВрдХреНрд╢рди рдмреНрд▓реЙрдХ рд╣реЛрддреЗ рд╣реИрдВ

рдбреЗрдЯрд╛ рдХреЛ I2S рдЗрдВрдЯрд░рдлрд╝реЗрд╕, рд╕рд╛рде рд╣реА рдбреАрдПрд╕рдкреА, рдкреАрд╕реАрдПрдо, рдЯреАрдбреАрдПрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

I2S рдПрдХ рд╕реАрд░рд┐рдпрд▓ рдмрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдорд╛рдирдХ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдбрд┐рдЬрд┐рдЯрд▓ рдСрдбрд┐рдпреЛ рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рджреНрдпреБрдд рд░реВрдк рд╕реЗ 3 рдХрдВрдбрдХреНрдЯрд░реЛрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕рдХреНрд░рд┐рдп рдбрд┐рд╡рд╛рдЗрд╕ рд╕реЗ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдПрдХ рддрдХ рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА 4 рд╕рд┐рдЧреНрдирд▓ рдЬреЛ рдЙрдирдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВ:

  1. рдмрд┐рдЯ рдХреНрд▓реЙрдХ (BCLK)ред
  2. рдШрдбрд╝реА рд╕рдВрдХреЗрдд рдлреНрд░реЗрдо (рд╢рдмреНрджреЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░) рддреБрд▓реНрдпрдХрд╛рд▓рди (WCLK)ред
  3. рдбреЗрдЯрд╛ рд╕рд┐рдЧреНрдирд▓ рдЬреЛ 2 рдЯрд╛рдЗрдо-рд╡рд┐рднрд╛рдЬрд┐рдд рдЪреИрдирд▓ (рдбреАрдЖрдИрдПрди / рдбреАрдУрдпреВрдЯреА) рдкреНрд░рд╕рд╛рд░рд┐рдд рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреИрдирд▓ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реИрдВ, рдЕрд░реНрдерд╛рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЪреИрдирд▓ рдФрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЪреИрдирд▓ рд╣реИред рдирд┐рдпрдВрддреНрд░рдХ рдСрдбрд┐рдпреЛ рдХреЛрдбреЗрдХ рджреНрд╡рд╛рд░рд╛ рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд░рд┐рд╡рд░реНрд╕ рднреА рд╕рдВрднрд╡ рд╣реИред


I2S рдлреНрд░реЗрдо, I2S рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рд╕рднреА рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдШрдЯрдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдСрдбрд┐рдпреЛ рдХреЛрдбреЗрдХ рдФрд░ Xilinx Zynq 7020 рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ред

I2S рдХреЛрд░ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВ


Xilinx Zynq 7020 рдореЗрдВ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдХрдард┐рди рдХреНрд╖рдг рдпрд╣ рдерд╛ рдХрд┐ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рднрд╛рдЧ рдкрд░ рдореВрд▓ рд░реВрдк рд╕реЗ рдЪрд┐рдк рдкрд░ I2S рдмрд╕ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ I2S рдХреЛрд░ рдвреВрдВрдврдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рдХрд╛рд░реНрдп рдЗрд╕ рд╢рд░реНрдд рд╕реЗ рдЬрдЯрд┐рд▓ рдерд╛ рдХрд┐ рдЖрдИрдкреА рдХреЛрд░ рдореБрдХреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╣рдо рдХрдИ рдЖрдИрдкреА рдХреЛрд░ рдкрд░ рдмрд╕ рдЧрдПред рдирдВрдЧреЗ рдзрд╛рддреБ рдХреЛрд░ I2S Digilent рдХреЗ рд▓рд┐рдП рдорд┐рд▓рд╛ред рд╣рдореЗрдВ opencores рдкрд░ рдХрдИ рдЖрдИрдкреА рдХреЛрд░ рдорд┐рд▓реЗ рдФрд░, рд╢рд╛рдпрдж, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдПрдирд╛рд▓реЙрдЧ рдбрд┐рд╡рд╛рдЗрд╕реЗрд╕ рдЖрдИрдкреА тАЛтАЛрдХреЛрд░ рд╣реИред рд╡реЗ рдЕрдкрдиреЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП FPGA / FPGA рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП ip-cores рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо AXI-I2S-ADI рдирд╛рдордХ рдЖрдИрдкреА-рдХреЛрд░ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ ред рдПрдирд╛рд▓реЙрдЧ рдбрд┐рд╡рд╛рдЗрд╕реЗрдЬ рдЦреБрдж рдЕрдкрдиреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП рдЗрди рдЖрдИрдкреА рдХреЛрд░ рдХреЛ рдмрдврд╝рд╛рд╡рд╛ рджреЗ рд░рд╣реЗ рд╣реИрдВред

рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреА рдХреБрд▓ рд╕реВрдЪреА:

  1. рдирдВрдЧреЗ рдзрд╛рддреБ - I2S рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА рдХреЛрд░ (рдбрд┐рдЬреАрд▓реЗрдВрдЯ ZYBO рдСрдбрд┐рдпреЛ)
  2. opencores.org
  3. AXI-I2S-ADI рдирд┐рдпрдВрддреНрд░рдХ (рдПрдирд╛рд▓реЙрдЧ рдбрд┐рд╡рд╛рдЗрд╕)

AXI-I2S-ADI IP рдХреЛрд░


рдЖрдИрдкреА тАЛтАЛрдХреЛрд░ рдЦреБрдж рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: рдЗрд╕рдореЗрдВ рд▓рд╛рдЗрдиреЗрдВ рд╣реИрдВ bclk, wclk, din, doutред рдпрд╣ DMA Xilinx Zynq 7000 рд╕реЗ рдЬреБрдбрд╝рддрд╛ рд╣реИ, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, DMA PS рднрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдбреАрдПрдордП рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред DMA рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЗрдХрд╛рдИ рдпрд╛ PS SoC рдХрд╛ рдЕрднрд┐рдиреНрди рдЕрдВрдЧ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдЗрд╕ рдЖрдИрдкреА-рдХрд░реНрдиреЗрд▓ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╕рдордп, рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ mlk рдорд╛рд╕реНрдЯрд░ рдЖрд╡реГрддреНрддрд┐ рдХреЛ tlv320aic34 рдореЗрдВ рд╕рдмрдорд┐рдЯ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ, tlv320aic34 рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧрд┐рдВрдЧ рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ - рдПрдХ рдмрд╛рд╣рд░реА рдорд╛рд╕реНрдЯрд░ рдЖрд╡реГрддреНрддрд┐ рд╕рдмрдорд┐рдЯ рдХрд░реЗрдВред


рдХрдиреЗрдХреНрдЯреЗрдб рдРрдХреНрд╕реА-рдЖрдИ 2 рдПрд╕-рдПрдбреА рдХреЗ рд╕рд╛рде рдлрдВрдХреНрд╢рди рдмреНрд▓реЙрдХ

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рдж, рдХрд╛рд░реНрдп рд▓рд┐рдирдХреНрд╕ рдУрдПрд╕ рдореЗрдВ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдерд╛ред

Tlv320aic34 рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА рд▓реЙрдиреНрдЪ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


I2c рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ (tlv320aic34 рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ):

i2c0: i2c@e0004000 { ... tlv320aic3x: tlv320aic3x@18 { #sound-dai-cells = <0>; compatible = "ti,tlv320aic3x"; reg = <0x18>; gpio-reset = <&axi_gpio_0 0 0>; ai3x-gpio-func = <&axi_gpio_0 1 0>, /* AIC3X_GPIO1_FUNC_DISABLED */ <&axi_gpio_0 2 0>; /* AIC3X_GPIO2_FUNC_DIGITAL_MIC_INPUT */ AVDD-supply = <&vmmc2>; DRVDD-supply = <&vmmc2>; IOVDD-supply = <&vmmc2>; DVDD-supply = <&vmmc2>; ai3x-micbias-vg = <1>; }; ... }; 

I2s рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ (рдСрдбрд┐рдпреЛ рдбреЗрдЯрд╛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИ):

 i2s_clk: i2s_clk { #clock-cells = <0>; compatible = "fixed-clock"; clock-frequency = <11289600>; clock-output-names = "i2s_clk"; }; axi_i2s_adi_0: axi_i2s_adi@43C00000 { compatible = "adi,axi-i2s-1.00.a"; reg = <0x43C00000 0x1000>; xlnx,bclk-pol = <0x0>; xlnx,dma-type = <0x1>; xlnx,has-rx = <0x1>; xlnx,has-tx = <0x1>; xlnx,lrclk-pol = <0x0>; xlnx,num-ch = <0x1>; xlnx,s-axi-min-size = <0x000001FF>; xlnx,slot-width = <0x18>; }; &axi_i2s_adi_0 { #sound-dai-cells = <0>; compatible = "adi,axi-i2s-1.00.a"; clocks = <&clkc 15>, <&i2s_clk>; clock-names = "axi", "ref"; dmas = <&dmac_s 0 &dmac_s 1>; dma-names = "tx", "rx"; }; 

рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА (рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб) рдореЗрдВ рд╕рд╛рдЙрдВрдб рдХрд╛рд░реНрдб рд╕реЗрдЯ рдХрд░рдирд╛:

  sound { compatible = "simple-audio-card"; simple-audio-card,name = "TLV320AIC34"; simple-audio-card,format = "i2s"; simple-audio-card,bitclock-master = <&dailink0_master>; simple-audio-card,frame-master = <&dailink0_master>; simple-audio-card,widgets = ... simple-audio-card,routing = ... dailink0_master: simple-audio-card,cpu { clocks = <&i2s_clk>; sound-dai = <&axi_i2s_adi_0>; }; simple-audio-card,codec { clocks = <&i2s_clk>; sound-dai = <&tlv320aic3x>; }; }; }; 

рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА рдореЗрдВ рдХреЛрдбреЗрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдмрд╛рдж, рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдСрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдФрд░ рд╣рдо рд╕рдВрдЧреАрдд рд╕реБрдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ (рд╣рдорд╛рд░рд╛ рдкрд╣рд▓рд╛ рд╕рдВрдЧреАрдд рдЯреНрд░реИрдХ рд╣рд╛рдИрд╡реЗ рдЯреВ рд╣реЗрд▓, рдПрд╕реА / рдбреАрд╕реА) рдерд╛ред

рдпрд╣рд╛рдВ рд╣рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ:

  • рдЖрд╡рд╢реНрдпрдХ рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди clk_wiz (рдХреНрд▓реЙрдХрд┐рдВрдЧ рд╡рд┐рдЬрд╝рд╛рд░реНрдб)
  • Tlv320aic34 рдХреЗ рд▓рд┐рдП рд╕рд╣реА рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ DTS
  • Tlv320aic3x рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╕рдорд░реНрдерди
  • рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдСрдбрд┐рдпреЛ рдкреИрдХреЗрдЬ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ (рдСрдбрд┐рдпреЛ, рдкреНрд▓реЗрдкреНрд▓реЗ рдЖрджрд┐)

рдЕрдВрдд рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╣рдореЗрдВ 4 tlv320aic34 microcircuits рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд tlv320aic34 рдЪрд┐рдк рдореЗрдВ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 2 рдмреНрд▓реЙрдХ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдСрдбрд┐рдпреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА i2c рд▓рд╛рдЗрди рд╣реИред рдПрдХ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреНрд░рдорд╢рдГ рдЪрд╛рд░ рдкрддреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд╛рд░ tlv320aic34 microcircuits рдХреЛ рдПрдХ i2c рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИ, рдЖрдкрдХреЛ рджреЛ i2c рдЗрдВрдЯрд░рдлреЗрд╕ (8 рд╕реНрд╡рддрдВрддреНрд░ рдСрдбрд┐рдпреЛ рдмреНрд▓реЙрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдмреНрд▓реЙрдХ рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ mclk, blck, wclk, din / dout рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ 40 рд╕рд┐рдЧреНрдирд▓ рд▓рд╛рдЗрдиреЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╣рдордиреЗ рдЪреБрдиреЗ рдЧрдП рд╕реЛрдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП рд╕рд░реНрдХрд┐рдЯ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдЕрд╕рдВрднрд╡ рдФрд░ рддрд░реНрдХрд╣реАрди рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрди рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдХрдИ рдЕрдиреНрдп рд▓рд╛рдЗрдиреЗрдВ рдФрд░ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рдерд╛ рдЗрдВрдЯрд░рдлреЗрд╕ред

рдирддреАрдЬрддрди, рд╣рдордиреЗ рдСрдбрд┐рдпреЛ рдХрд╛рд░реНрдб рдХреЛ рдЯреАрдбреАрдПрдо рдореЛрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА mclk, bclk, din, dout рд▓рд╛рдЗрдиреЗрдВ рд╕рдВрдпреБрдХреНрдд рд╣реИрдВ, рдЬреЛ рд╕рдВрдЪрд╛рд░ рд▓рд╛рдЗрдиреЛрдВ рдХреА рдХреБрд▓ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдирд┐рд░реНрдгрдп рдиреЗ axi-i2s-adi рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛, рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдЖрдИрдкреА рдХреЛрд░ рдиреЗ рд╕реНрд╡рдпрдВ рдорд╛рд╕реНрдЯрд░ рдореЛрдб рдореЗрдВ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдмрджрд▓рд╛рд╡ рдиреЗ рд╣рдореЗрдВ рдЯреАрдбреАрдПрдо-рдореЛрдб рдореЗрдВ рд╣рдорд╛рд░реЗ рдЖрдИрдкреА-рдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА, рдФрд░ рдПрдХ рдордЬрдмреВрдд-рдЗрдЪреНрдЫрд╛ рд╡рд╛рд▓реЗ рдирд┐рд░реНрдгрдп рдХреЛ рд╣рдореЗрдВ рдЪрдпрдирд┐рдд рдЖрдИрдкреА-рдХреЛрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ред рдореБрдЭреЗ i2s рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕реБрдирдиреЗ рдФрд░ рдЗрд╕реЗ dma рдХреЛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдИрдкреА рдХрд░реНрдиреЗрд▓ рд▓рд┐рдЦрдирд╛ рдерд╛, рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдиреЗ рд╣рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬреЛ рд░рд┐рдХреЙрд░реНрдбрд┐рдВрдЧ рдХреЙрд▓ (рдПрдирд╛рд▓реЙрдЧ рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдХрд╛рд░реНрдб) рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

I2s рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛:



I2s рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдСрдбрд┐рдпреЛ рд╕реНрдЯреНрд░реАрдо рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдВрддрд┐рдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛:



PRI рд╕реНрдЯреНрд░реАрдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдФрд░ рдЗрд╕рдХреА рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ:



BRI рд╕реНрдЯреНрд░реАрдо рд░рд┐рд╕реЗрдкреНрд╢рди рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░:



рдЖрд╕реА рджрдорд╛


рдпрд╣ dma рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рддрддреНрд╡ рд╣реИред


Xilinx Vivado рдореЗрдВ AXI DMA рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╡рд┐рдВрдбреЛ

рдкреНрд░рд┐рдВрдЯрд╕реНрдХреНрд░реАрди рдкрд░, AXI DMA рдмреНрд▓реЙрдХ рдХреЛ рд╣реА рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдХрдИ рдорд╛рдкрджрдВрдб рд╣реИрдВред рдЖрдк рдмрд╕ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдирд╛ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рд╣реИред рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд░реЗрдЦрд┐рдд рдпрд╛ рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЕрдХреНрд╖реАрдп рдбреАрдПрдордП рдХреЗ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдФрд░ рдмрд╛рддрдЪреАрдд рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рддрдХрдиреАрдХреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рд╕рдВрд╕реНрдХрд░рдг рддрдХ рд╡рд┐рд╡рд░рдг рдореЗрдВ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХрд╛ рдПрдХ рдЬреЛрдбрд╝ рдФрд░ рд╕реБрдзрд╛рд░ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЖрдИрдкреА-рдХрд░реНрдиреЗрд▓ рдХрд╛ рд╢реЛрдзрди)ред

AXI DMA, AXI DMA рдкрд░реАрдХреНрд╖рдг рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ


рдбреНрд░рд╛рдЗрд╡рд░ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдордиреЗ рдЦреБрд▓реЗ рд╕реНрд░реЛрдд рдХреЛ рдЦреЛрдЬрдиреЗ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рдХрд╛рд░реНрдп рдореЗрдВ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ред рдирддреАрдЬрддрди, рд╣рдордиреЗ рдЧрд┐рдЯрдм-рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдПрдЬреНрдбрдорд╛ ( рд╕рдЬрд╛ , рдЖрд╕рд╛рди рдбрдорд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдврд╝рд╛) рдХреЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдЪреБрдирд╛ред

рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЪрд╛рд▓рдХ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИ, рдпрд╣ рдЙрд╕ рдХреНрд╖рдг рдХреА рдкреНрд░рддреНрдпрд╛рд╢рд╛ рдореЗрдВ рдПрдХ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдЪрд░рдг рдерд╛ рдЬрдм рдПрдлрдкреАрдЬреАрдП рд╡рд┐рдХрд╛рд╕ рд╡рд┐рднрд╛рдЧ рд╕реЗ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдИрдкреА рдХреЛрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдпрд╛ (рд╡рд░реНрдгрд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдЧрдарди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рдЗрд╕ рдХреНрд╖рдг рд╕реЗ рдкрд╣рд▓реЗ рд╣рдордиреЗ AXI DMA, AXI DATA FIFO рдХреЛ рд▓реЗрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдФрд░ рднрд╡рд┐рд╖реНрдп рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЦрд┐рд▓рд╛рдл рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реВрдкрдмреИрдХ рдмрдирд╛рдпрд╛ред рд╣рдордиреЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рдо рдЯрд╛рд▓ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рдкрд░рд┐рдгрд╛рдо рдФрд░ рдЕрдкрдиреЗ рдбреНрд░рд╛рдЗрд╡рд░ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХреАред рд╣рдордиреЗ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛, рдЗрд╕реЗ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдЗрдВрдЯрд░рдлреЗрд╕ рдкрд░ рд╣рдорд╛рд░реА рдЗрдЪреНрдЫрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрд╛ рдФрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓рдХ рдФрд░ рдЪрдпрдирд┐рдд рдЗрдВрдЯрд░реИрдХреНрд╢рди рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рд╕рдВрдЪрд╛рд▓рди рдХреНрд╖рдорддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХреАред


рд▓реБрдХ-рдмреИрдХ рдмреНрд▓реЙрдХ рдбрд┐рдЬрд╝рд╛рдЗрди, AXI DMA рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдкрд╣рд▓рд╛ рддрд░реАрдХрд╛

рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА рдореЗрдВ рдбреАрдПрдордП рдФрд░ рдПрдЬрд╝реНрдбрдорд╛ рдХреЗ рд╡рд┐рд╡рд░рдг рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 / { amba_pl: amba_pl { #address-cells = <1>; #size-cells = <1>; compatible = "simple-bus"; ranges ; axi_dma_1: axi_dma { #dma-cells = <1>; compatible = "xlnx,axi-dma-1.00.a"; reg = <0x40400000 0x10000>; clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk"; clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>, <&clkc 15>; interrupt-parent = <&intc>; interrupts = <0 29 4 0 30 4>; xlnx,addrwidth = <0x20>; xlnx,include-sg; dma-channel@40400000 { compatible = "xlnx,axi-dma-mm2s-channel"; dma-channels = <0x1>; interrupts = <0 29 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; xlnx,include-dre ; }; dma-channel@40400030 { compatible = "xlnx,axi-dma-s2mm-channel"; dma-channels = <0x1>; interrupts = <0 30 4>; xlnx,datawidth = <0x20>; xlnx,device-id = <0x0>; xlnx,include-dre ; }; }; ezdma0 { compatible = "ezdma"; dmas = <&axi_dma_1 0 &axi_dma_1 1>; dma-names = "loop_tx", "loop_rx"; // used when obtaining reference to above DMA core using dma_request_slave_channel() ezdma,dirs = <2 1>; // direction of DMA channel: 1 = RX (dev->cpu), 2 = TX (cpu->dev) }; ... }; }; 

рдЖрдк рдбрд┐рд╡рд╛рдЗрд╕ рдЯреНрд░реА рдЬреЗрдирд░реЗрдЯрд░ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрд╕рд╛рдиреА рд╕реЗ dts / dtsi рдлрд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдорд╛рд░реА рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рджреВрд╕рд░рд╛ рдЪрд░рдг рдЪрд╛рд▓рдХ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЖрдИрдкреА-рдХрд░реНрдиреЗрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рд╣реИ, рдХреЗрд╡рд▓ рдЗрд╕ рдмрд╛рд░ рдбреЗрдЯрд╛ рд╕рд╛рд░реНрдердХ рд╣реЛрдЧрд╛, AXIS_DMA рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг (рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдЖрдИрдкреА-рдХрд░реНрдиреЗрд▓ рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рд╣реЛрдЧрд╛)ред


AXIS рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ

рд╣рдо рдбреЗрдЯрд╛ рдЙрддреНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЖрдИрдкреА-рдХрд░реНрдиреЗрд▓ рдХреЗ рджреЛ рд╡реЗрд░рд┐рдПрдВрдЯ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рд╡реЗрд░рд┐рд▓реЙрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ - рдПрдЪрдПрд▓рдПрд╕ рдкрд░ (рдЗрд╕ рд╕рдВрджрд░реНрдн рдореЗрдВ, рдПрдЪрдПрд▓рдПрд╕ "рд╕реНрдЯрд╛рдЗрд▓рд┐рд╢-рдлреИрд╢рди-рдпреВрде" рдирд╛рд░реЗ рдХреЗ рддрд╣рдд рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛)ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ ip-cores рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп verilog рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯрд░ (рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдПрдЪрдбреАрдПрд▓ рдкрд░рд┐рд╡рд╛рд░ рдХреА рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ - verilog, vhdl, рдЖрджрд┐) рдПрдХ рдорд╛рдирдХ рд╕рдорд╛рдзрд╛рди рд╣реИред рдпрд╣рд╛рдБ рдХреБрдЫ рдХреЛрдб рд╕реНрдирд┐рдкреЗрдЯ рдордзреНрдпрд╡рд░реНрддреА рдЖрдИрдкреА рдХрд░реНрдиреЗрд▓ рдХреЗ рд▓рд┐рдП рд╣реИрдВ:

 module GenCnt ( тАж. assign HandsHake = m_axis_din_tready & m_axis_dout_tvalid; always @(posedge Clk) begin if (Rst) begin smCnt <= sIDLE; end else begin case (smCnt) sIDLE: begin smCnt <= sDATA; end sDATA: begin if (Cnt == cTopCnt - 1) begin smCnt <= sLAST; end end ... endmodule 

рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ FPGA рдбрд┐рдЬрд╛рдЗрдирд░ рдХрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рд╣реИред

рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк "рдЬрд╛рдирд╡рд░" рдпрд╣рд╛рдВ рдПрдЪрдПрд▓рдПрд╕ рд╣реИред Vivado HLS (рд╣рд╛рдИ рд▓реЗрд╡рд▓ рд╕рд┐рдВрдереЗрд╕рд┐рд╕) OpenCL, C рдпрд╛ C ++ рдЬреИрд╕реА рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдирдпрд╛ Xilinx CAD рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рд╣реИред

рд╕реА / рд╕реА ++ рдПрдХ рдПрдореНрдмреЗрдбреЗрдб рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд▓рд┐рдП рдореБрдЦреНрдп рднрд╛рд╖рд╛рдПрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рднрд╡рд┐рд╖реНрдп рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдФрд░ рддреБрд▓рдирд╛рддреНрдордХ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЗрди рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рдпрд╣рд╛рдВ рдПрдЪрдПрд▓рдПрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреЛ рдЫреЛрдЯреЗ рдЙрджрд╛рд╣рд░рдг рджрд┐рдП рдЧрдП рд╣реИрдВред рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг AXI_DMA рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯрд░ рд╣реИ, рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг s_axilite рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рднрд╛рдЧ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдмрд▓ рд▓реЙрдЬрд┐рдХ рдХреЗ рдмреАрдЪ рдбреЗрдЯрд╛ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рд╣реИред

S_axilite рдЗрдВрдЯрд░рдлрд╝реЗрд╕ (рджреВрд╕рд░рд╛ рдЙрджрд╛рд╣рд░рдг) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдЗрд╕рд▓рд┐рдП рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рд╕рдордп рдЦрд░реАрдж рдореЗрдВ рдпрд╣ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХреЗ рдХрд┐ рдХреМрди рд╕рд╛ рдмрд┐рдЯрд╕реНрдЯреНрд░реАрдо рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕рд▓рд┐рдП рдХрд┐ рдпрд╣ SoC рдХреЗ PL рднрд╛рдЧ рдХреЗ рд▓рд┐рдП рд╕рдВрд╕реНрдХрд░рдг рджреНрд╡рд╛рд░рд╛ рдХрд╛рдо рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдерд╛ред рдпрд╣рд╛рдВ s_axilite рдХреЗ рд╕рд╛рде рдПрдХ рдмрд╣реБрдд рд╣реА рджрд┐рд▓рдЪрд╕реНрдк рдмрд┐рдВрджреБ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ: рд╡рд┐рд╡рд╛рдбреЛ HLS рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдбреНрд░рд╛рдЗрд╡рд░ рдмрдирд╛рддрд╛ рд╣реИ (рдбреНрд░рд╛рдЗрд╡рд░, рдмрджрд▓реЗ рдореЗрдВ, рд╣рдордиреЗ рд▓реЗрдЦрди рдХреА рдЖрдиреБрд╡рдВрд╢рд┐рдХрддрд╛ рдХреЛ рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реВрдлрд╝ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рд╣реИ)ред рд▓рд┐рдирдХреНрд╕ рдХреЗ рд▓рд┐рдП рдЙрддреНрдкрдиреНрди рдХреЛрдб рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдиреАрдЪреЗ рд╣реИ (рд╕реНрд░реЛрдд рд╕рдорд╛рдзрд╛рди 1 / рдкреНрд░рддреНрдпрд╛рд░реЛрдкрдг / рдЖрдИрдкреА / рдбреНрд░рд╛рдЗрд╡рд░ / name_xxx / src /) рдХреЗ рд▓рд┐рдП рдкрдеред


рдПрдЪрдПрд▓рдПрд╕ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдФрд░ рдЖрд░рдЯреАрдПрд▓ рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рдЪрд░рдг

AXI_DMA рдХреЗ рд╕рд╛рде рдСрдкрд░реЗрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП HLS рдбреЗрдЯрд╛ рдЬрдирд░реЗрдЯрд░:

 #include <ap_axi_sdata.h> #include <hls_stream.h> #define SIZE_STREAM 1024 struct axis { int tdata; bool tlast; }; void data_generation(axis outStream[SIZE_STREAM]) { #pragma HLS INTERFACE axis port=outStream int i = 0; do{ outStream[i].tdata = i; outStream[i].tlast = (i == (SIZE_STREAM - 1)) ? 1 : 0; i++; }while( i < SIZE_STREAM); } 

рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмреЛрд░реНрдб рдХреЗ рдкреНрд░рдХрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

 #include <stdio.h> void info( int &aVersion, int &bSubVersion, int &cTypeBoard, int version, int subVersion, int typeBoard ){ #pragma HLS INTERFACE s_axilite port=aVersion #pragma HLS INTERFACE s_axilite port=bSubVersion #pragma HLS INTERFACE s_axilite port=cTypeBoard #pragma HLS INTERFACE ap_ctrl_none port=return aVersion = version; bSubVersion = subVersion; cTypeBoard = typeBoard; } 

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛, hls рдкрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рд╛рдЧрдорд╛рдУрдВ (HLS pragma) рдХреЗ рдХрд╛рд░реНрдп рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реАрдзреЗ pragmas рд╕реЗ рдЬреБрдбрд╝реА рд╣реЛрддреА рд╣реИред

S_axilite рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрдорд┐рдд рдбреНрд░рд╛рдЗрд╡рд░:

 // ============================================================== // File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC // Version: 2016.4 // Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. // // ============================================================== #ifdef __linux__ /***************************** Include Files *********************************/ #include "xinfo.h" /***************** Macros (Inline Functions) Definitions *********************/ #define MAX_UIO_PATH_SIZE 256 #define MAX_UIO_NAME_SIZE 64 #define MAX_UIO_MAPS 5 #define UIO_INVALID_ADDR 0 /**************************** Type Definitions ******************************/ typedef struct { u32 addr; u32 size; } XInfo_uio_map; typedef struct { int uio_fd; int uio_num; char name[ MAX_UIO_NAME_SIZE ]; char version[ MAX_UIO_NAME_SIZE ]; XInfo_uio_map maps[ MAX_UIO_MAPS ]; } XInfo_uio_info; /***************** Variable Definitions **************************************/ static XInfo_uio_info uio_info; /************************** Function Implementation *************************/ static int line_from_file(char* filename, char* linebuf) { char* s; int i; FILE* fp = fopen(filename, "r"); if (!fp) return -1; s = fgets(linebuf, MAX_UIO_NAME_SIZE, fp); fclose(fp); if (!s) return -2; for (i=0; (*s)&&(i<MAX_UIO_NAME_SIZE); i++) { if (*s == '\n') *s = 0; s++; } return 0; } static int uio_info_read_name(XInfo_uio_info* info) { char file[ MAX_UIO_PATH_SIZE ]; sprintf(file, "/sys/class/uio/uio%d/name", info->uio_num); return line_from_file(file, info->name); } static int uio_info_read_version(XInfo_uio_info* info) { char file[ MAX_UIO_PATH_SIZE ]; sprintf(file, "/sys/class/uio/uio%d/version", info->uio_num); return line_from_file(file, info->version); } static int uio_info_read_map_addr(XInfo_uio_info* info, int n) { int ret; char file[ MAX_UIO_PATH_SIZE ]; info->maps[n].addr = UIO_INVALID_ADDR; sprintf(file, "/sys/class/uio/uio%d/maps/map%d/addr", info->uio_num, n); FILE* fp = fopen(file, "r"); if (!fp) return -1; ret = fscanf(fp, "0x%x", &info->maps[n].addr); fclose(fp); if (ret < 0) return -2; return 0; } static int uio_info_read_map_size(XInfo_uio_info* info, int n) { int ret; char file[ MAX_UIO_PATH_SIZE ]; sprintf(file, "/sys/class/uio/uio%d/maps/map%d/size", info->uio_num, n); FILE* fp = fopen(file, "r"); if (!fp) return -1; ret = fscanf(fp, "0x%x", &info->maps[n].size); fclose(fp); if (ret < 0) return -2; return 0; } int XInfo_Initialize(XInfo *InstancePtr, const char* InstanceName) { XInfo_uio_info *InfoPtr = &uio_info; struct dirent **namelist; int i, n; char* s; char file[ MAX_UIO_PATH_SIZE ]; char name[ MAX_UIO_NAME_SIZE ]; int flag = 0; assert(InstancePtr != NULL); n = scandir("/sys/class/uio", &namelist, 0, alphasort); if (n < 0) return XST_DEVICE_NOT_FOUND; for (i = 0; i < n; i++) { strcpy(file, "/sys/class/uio/"); strcat(file, namelist[i]->d_name); strcat(file, "/name"); if ((line_from_file(file, name) == 0) && (strcmp(name, InstanceName) == 0)) { flag = 1; s = namelist[i]->d_name; s += 3; // "uio" InfoPtr->uio_num = atoi(s); break; } } if (flag == 0) return XST_DEVICE_NOT_FOUND; uio_info_read_name(InfoPtr); uio_info_read_version(InfoPtr); for (n = 0; n < MAX_UIO_MAPS; ++n) { uio_info_read_map_addr(InfoPtr, n); uio_info_read_map_size(InfoPtr, n); } sprintf(file, "/dev/uio%d", InfoPtr->uio_num); if ((InfoPtr->uio_fd = open(file, O_RDWR)) < 0) { return XST_OPEN_DEVICE_FAILED; } // NOTE: slave interface 'Axilites' should be mapped to uioX/map0 InstancePtr->Axilites_BaseAddress = (u32)mmap(NULL, InfoPtr->maps[0].size, PROT_READ|PROT_WRITE, MAP_SHARED, InfoPtr->uio_fd, 0 * getpagesize()); assert(InstancePtr->Axilites_BaseAddress); InstancePtr->IsReady = XIL_COMPONENT_IS_READY; return XST_SUCCESS; } int XInfo_Release(XInfo *InstancePtr) { XInfo_uio_info *InfoPtr = &uio_info; assert(InstancePtr != NULL); assert(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); munmap((void*)InstancePtr->Axilites_BaseAddress, InfoPtr->maps[0].size); close(InfoPtr->uio_fd); return XST_SUCCESS; } #endif 

рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдЬреЛ рдЖрдкрдХреЛ рдкрддрд╛ рд╕реНрдерд╛рди рдореЗрдВ рдЪрд░ (рд░рдЬрд┐рд╕реНрдЯрд░) рдХрд╛ рд╕реНрдерд╛рди рдмрддрд╛рддреА рд╣реИ, рдлрд╝рд╛рдЗрд▓ x # your_name # _hw.h рд╣реИред рдЖрдк рд╣рдореЗрд╢рд╛ devmem рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦрд┐рдд IP-рдХрд░реНрдиреЗрд▓ рдХреА рд╢реБрджреНрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рд╛рдордЧреНрд░реА:

 // ============================================================== // File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC // Version: 2016.4 // Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. // // ============================================================== // AXILiteS // 0x00 : reserved // 0x04 : reserved // 0x08 : reserved // 0x0c : reserved // 0x10 : Data signal of aVersion // bit 31~0 - aVersion[31:0] (Read) // 0x14 : Control signal of aVersion // bit 0 - aVersion_ap_vld (Read/COR) // others - reserved // 0x18 : Data signal of bSubVersion // bit 31~0 - bSubVersion[31:0] (Read) // 0x1c : Control signal of bSubVersion // bit 0 - bSubVersion_ap_vld (Read/COR) // others - reserved // 0x20 : Data signal of cTypeBoard // bit 31~0 - cTypeBoard[31:0] (Read) // 0x24 : Control signal of cTypeBoard // bit 0 - cTypeBoard_ap_vld (Read/COR) // others - reserved // (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake) #define XINFO_AXILITES_ADDR_AVERSION_DATA 0x10 #define XINFO_AXILITES_BITS_AVERSION_DATA 32 #define XINFO_AXILITES_ADDR_AVERSION_CTRL 0x14 #define XINFO_AXILITES_ADDR_BSUBVERSION_DATA 0x18 #define XINFO_AXILITES_BITS_BSUBVERSION_DATA 32 #define XINFO_AXILITES_ADDR_BSUBVERSION_CTRL 0x1c #define XINFO_AXILITES_ADDR_CTYPEBOARD_DATA 0x20 #define XINFO_AXILITES_BITS_CTYPEBOARD_DATA 32 #define XINFO_AXILITES_ADDR_CTYPEBOARD_CTRL 0x24 

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рдкрддреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИ, рд░рдЬрд┐рд╕реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддрд░реНрдХреЛрдВ рдХреЗ рд╕реНрдерд╛рди рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИред рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рдж, рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрдирд╛рдИ рдЧрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЪрдХреНрд░реЛрдВ рдореЗрдВ рдХреИрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмреАрдЯ рдЙрджрд╛рд╣рд░рдг

рд╣рд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЙрдкрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрд╣ рдХрдВрдкреНрдпреВрдЯрд░ рджреГрд╖реНрдЯрд┐ рдХреА рдЧрдгрд┐рддреАрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рд╕рд╛рдмрд┐рдд рдХрд░ рдЪреБрдХрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╕реА ++ рдпрд╛ рд╕реА рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдФрд░ рд╡рд┐рдирд┐рдордп рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреЗ рдЖрдИрдкреА-рдХрд░реНрдиреЗрд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреАред рдорд╛рдирдХ FPGA рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдЬрд╛рдирдХрд╛рд░реАред

рдЙрд╕реА рд╕рдордп, рдПрдЪрдПрд▓рдПрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ I2S рдерд╛, рдФрд░ рдЙрддреНрдкрдиреНрди рдЖрд░рдЯреАрдПрд▓ рдХреЛрдб рдПрдлрдкреАрдЬреАрдП рдкрд░ рдорд╛рдирдХ рдПрдЪрдбреАрдПрд▓ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИред

рдЪрд╛рд▓рдХ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЕрдВрддрд┐рдо рдЪрд░рдг I2S рдЯреНрд░реИрдлрд┐рдХ рдЬрдирд░реЗрдЯрд░ рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╣реИред рдпрд╣ рдЖрдИрдкреА-рдХреЛрд░ рдкрд┐рдЫрд▓реЗ рдЖрдИрдкреА-рдХрд░реНрдиреЗрд▓ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдпрд╣ рд╡реГрджреНрдзрд┐рд╢реАрд▓ рдбреЗрдЯрд╛ (рдЯреНрд░реИрдлрд╝рд┐рдХ) рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ TDM рдореЛрдб рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ I2S рдбреЗрдЯрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред


рднрд╡рд┐рд╖реНрдп рдХреЗ рдХрд╕реНрдЯрдо I2S рдХреЛрд░ рдкрд░реАрдХреНрд╖рдг рдФрд░ I2S рдпрд╛рддрд╛рдпрд╛рдд рдЬрдирд░реЗрдЯрд░ рдХреЗ рд▓рд┐рдП рдмреНрд▓реЙрдХ рдбрд┐рдЬрд╛рдЗрди

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдореЗрдВ hls, axi dma рдФрд░ s_axilite рдХреЗ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓реЗ, рд╣рдорд╛рд░реЗ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рдбреНрд░рд╛рдЗрд╡рд░реЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреА рдЬрд╛рдБрдЪ рдХреАред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдордиреЗ рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХрд╛рд░реНрдб рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдмреА рд╣рд╛рд╕рд┐рд▓ рдХреА, рд╕рд╛рде рд╣реА рд╕рд╛рде tdm, pri, bri рдХреЗ рд▓рд┐рдП ip-kernelsред рд╣рдордиреЗ рдРрд╕реЗ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдХрд╛рдлреА рд╕реБрдзрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡реНрдпрд╛рдкрдХ рд╕рдорд╛рдзрд╛рди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдПрд╕реНрдЯрд░рд┐рдХ , рдкреИрдЯреНрдЯрди рдФрд░ рдЕрдиреНрдп рд╕реЗ рд╕рдорд╛рди рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдмреЛрд░реНрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдкрд░реНрдзрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдкреАрд╕реА рдФрд░ рдкреАрд╕реАрдЖрдИ рдХреЗ рдмреАрдЪ рдПрдХ рдордзреНрдпрд╡рд░реНрддреА рд▓рд┐рдВрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд╡рд╣ рд╕реАрдзреЗ рдИрдерд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ред

Source: https://habr.com/ru/post/hi415435/


All Articles