рдкрд╛рдпрдерди рдореЗрдВ рдПрдлрдкреАрдЬреАрдП рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛

FPGA (FPGA) рддрдХрдиреАрдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрд╣реБрдд рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рд╣рд╛рд╕рд┐рд▓ рдХрд░ рд░рд╣реА рд╣реИред рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрдврд╝ рд░рд╣реА рд╣реИ: рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмреНрд▓реЙрдХрдЪреИрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ, рд╡реАрдбрд┐рдпреЛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ IoT рдореЗрдВ рдорд╢реАрди рд╕реАрдЦрдиреЗ рдореЗрдВ рддреЗрдЬреА рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП FPGAs рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдЕрдЬрдЧрд░ рд╕рдВрд╕реНрдХрд░рдг 3.6 рдЦреБрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ (рдЗрд╕рдХреЗ рдмрд╛рдж, рд╕рднреА рдСрдкрд░реЗрд╢рди рдЙрдмрдВрдЯреВ 18.04 рдУрдПрд╕ рдкрд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред

Myhdl рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:

pip3 install myhdl 

"рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" рд╣рдо рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреНрд░реЛрдЧреНрд░рд╛рдо рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рдПрдХ рдмрдЯрди рджрдмрд╛рдиреЗ рдкрд░ рдПрд▓ рдИ рдбреА рдХреЛ рд╣рд▓реНрдХрд╛ рдмрдирд╛рддрд╛ рд╣реИред рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░реЛрдВ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ "рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб!" рдпрд╣ рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИ рдЬреЛ рдПрдХ рдПрд▓рдИрдбреА рдХреЗ рд╕рд╛рде рдЪрдордХрддрд╛ рд╣реИ; рдПрдлрдкреАрдЬреАрдП рджреБрдирд┐рдпрд╛ рдореЗрдВ, рд╣реИрд▓реЛ рд╡рд░реНрд▓реНрдб рдПрдХ рд╣рдЬрд╛рд░ рдПрд▓рдИрдбреА рдХрд╛ рдЪрдордХрддрд╛ рд╣реИред рдмреЛрд░реНрдб рдкрд░ рдХреЗрд╡рд▓ рдЪрд╛рд░ рдПрд▓рдИрдбреА рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдХреЗрд╡рд▓ рдмрдЯрди рдлреНрд▓реИрд╢ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЙрдиреНрд╣реЗрдВ рдлреНрд▓реИрд╢ рдХрд░реЗрдВрдЧреЗред рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд╡рд┐рдкрд░реАрдд, FPGA рдореЗрдВ рд╕рднреА рдХреЛрдб рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рд╕рднреА рдбрд╛рдпреЛрдб рдкреНрд░рдХрд╛рд╢ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╛рд╣рд░ рдЬрд╛рддреЗ рд╣реИрдВред рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд╣реАрдВред рдкрд░реАрдХреНрд╖рдг рдмреЛрд░реНрдб рдкрд░ Altera Max II EPM1270T144C5 рдмреЛрд░реНрдб рдХреЗ рд╕рд╛рде WaveShare OpenEPM1270 рдмреЛрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред



рдПрдХ рдирдИ рдЕрдЬрдЧрд░ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ:

 from myhdl import * from random import randrange def led_blinker(input1, led1, led2, led3, led4): @always_comb def on_off_led(): if input1 == 1: led1.next = 1 led2.next = 1 led3.next = 0 led4.next = 0 else: led1.next = 0 led2.next = 0 led3.next = 1 led4.next = 1 return on_off_led 

рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдорд╛рд░рд╛ рдХреЛрдб рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдПрдХ рд╕рддреНрдпрд╛рдкрди рдЙрдкрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, FPGA рдХреЗ рд▓рд┐рдП рдХреЛрдИ рднреА рдХрд╛рд░реНрдпрдХреНрд░рдо рдПрдХ рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд┐рдЧреНрдирд▓ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ рдХрд┐ рдЪрд┐рдк рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред рдпрд╣ рд╕рд┐рдореБрд▓реЗрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рдЬреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдЗрд╕ рд╕рдордп рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдореБрдлреНрдд GTKWave рд╣реИред рдЗрд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рд╕реЗ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ:

 sudo apt-get install gtkwave 

рдЕрдЧрд▓рд╛, рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓ рдореЗрдВ, рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рднреА рдПрдХ рдЕрдЬрдЧрд░ рд╕рдорд╛рд░реЛрд╣ рд╣реИ:

 def test(): input1, led1, led2, led3, led4 = [Signal(bool(0)) for i in range(5)] test = led_blinker(input1, led1, led2, led3, led4) @always(delay(10)) def gen(): input1.next = randrange(2) return test, gen 

рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рд╢реВрдиреНрдп рдФрд░ рд▓реЛрдЧреЛрдВ рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ (рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред

 def simulate(timesteps): tb = traceSignals(test) sim = Simulation(tb) sim.run(timesteps) 

рдФрд░ рд╣рдо рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдВ test_inverter рдкрд░реНрдпрд╛рд╡рд░рдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд░реВрд╕реА рдЧреБрдбрд╝рд┐рдпрд╛ рдЗрдиреНрд╡рд░реНрдЯрд░ тЖТ test_inverter тЖТ рдЕрдиреБрдХрд░рдг (рдордирдорд╛рдиреА рдЗрдХрд╛рдЗрдпреЛрдВ рдореЗрдВ рд╕рдордп) рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рдХрд╛рдордХрд╛рдЬреА рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, .vcd рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ gtkwave рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЪрд▓рд╛рдПрдБ: gtkwave test_invereter.vcdред



рдирддреАрдЬрддрди, рдЗрдирдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ рдЗрдирдкреБрдЯ 1 рдХрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдиреБрдХреНрд░рдо рдЙрддреНрдкрдиреНрди рд╣реБрдЖ рдерд╛, рдФрд░ led_blinker рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдЗрди рд╕рдВрдХреЗрддреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ред

рдЬрдм рд╣рдордиреЗ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд▓рд┐рдпрд╛ рдХрд┐ рддрд░реНрдХ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рд╕рдорд╛рд░реЛрд╣ рдХреЛ FPGA рдореЗрдВ рдлреЗрдВрдХ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдЗрдВрдЯреЗрд▓ (рдкреВрд░реНрд╡ рдореЗрдВ рдПрд▓реНрдЯрд░) рд╕реЗ рдЪрд┐рдкреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдпрд╣ рдХреНрд░рдо рд╕реАрдПрдбреА рд╕рд┐рд╕реНрдЯрдо рд╡рд╛рд▓реЗ рдЕрдиреНрдп рдирд┐рд░реНрдорд╛рддрд╛рдУрдВ рдХреЗ рдЪрд┐рдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИред FPGA рдЪрд┐рдк рдкрд░ рдПрдХ рдмрд╛рдЗрдирд░реА рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдЪрд┐рдк рдирд┐рд░реНрдорд╛рддрд╛ рдХреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ, Intel рдХреЗ рд▓рд┐рдП рдпрд╣ Xartx Vivado рдХреЗ рд▓рд┐рдП Quartus рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗрд╡рд▓ VHDL / Verilog рдореЗрдВ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдкрд╛рдпрдерди рдХреЛрдб рдХреЛ рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП (рдпрд╣ рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ)ред

 def convert(): input1, led1, led2, led3, led4 = [Signal(bool(0)) for i in range(5)] toVerilog(led_blinker, input1, led1, led2, led3, led4) convert() 

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд╡реЗрд░рд┐рд▓реЛрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдкрд░рд┐рдгрд╛рдо led_blinker.v рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИ, рдФрд░ Quartus рдХреЛ FPGA рдлрд░реНрдорд╡реЗрдпрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рджреЗрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:

 module led_blinker ( input1, led1, led2, led3, led4 ); input input1; output led1; reg led1; output led2; reg led2; output led3; reg led3; output led4; reg led4; always @(input1) begin: LED_BLINKER_ON_OFF_LED if ((input1 == 1)) begin led1 = 1; led2 = 1; led3 = 0; led4 = 0; end else begin led1 = 0; led2 = 0; led3 = 1; led4 = 1; end end endmodule 

FPGA рдлрд░реНрдорд╡реЗрдпрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рдЖрдк рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдмрд╕ рдЗрд╕реЗ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдореЗрдВ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдЖрдк fpgasoftware.intel.com рд╕реЗ рдХреНрд╡рд╛рд░реНрдЯрд╕ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рд▓рд╛рдЗрдЯ рдХреЗ рдПрдХ рдирд┐: рд╢реБрд▓реНрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╣ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред 9 рдЬреАрдмреА рдХрд╛ рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдЖрдХрд╛рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред

рдХреНрд╡рд╛рд░реНрдЯреНрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд╕рдд рд▓рд┐рдирдХреНрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдХреБрдЫ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЖрдк FPGA рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрдордХрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ - рдкреНрд░реЛрдЧреНрд░рд╛рдорд░:

1. рдПрдХ udv рдирд┐рдпрдо рдмрдирд╛рдПрдБред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдлрд╝рд╛рдЗрд▓ /etc/udev/rules.d/51-altera-usb-blaster.rules рдмрдирд╛рдПрдВ:

 # USB-Blaster SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6002", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6003", MODE="0666" # USB-Blaster II SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6010", MODE="0666" SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", ATTR{idProduct}=="6810", MODE="0666" 

Udvadm рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд░рд┐рдмреВрдЯ udev:

 sudo udevadm control --reload 

2. рдпреВрдПрд╕рдмреА-рдмреНрд▓рд╛рд╕реНрдЯрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдЧреИрд░-рд░реВрдЯ рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ /etc/udev/rules.d/altera-usb-blaster.rules рдмрдирд╛рдПрдВ:

 ATTR{idVendor}=="09fb", ATTR{idProduct}=="6001", MODE="666" 

рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ rw-rw-rw- рдПрдХреНрд╕реЗрд╕ рджреЗрддрд╛ рд╣реИред

3. Jtagd рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВред рдХреНрд╡рд╛рд░реНрдЯрд╕ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jtagd рдбреЗрдореЙрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рдХреНрд╡рд╛рд░реНрдЯрд╕ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд╡рд┐рд╡рд░рдг рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдПрдБ:

 sudo mkdir /etc/jtagd sudo cp <Quartus install path>/quartus/linux64/pgm_parts.txt /etc/jtagd/jtagd.pgm_parts 

рдХреНрд╡рд╛рд░реНрдЯрд╕ рдЪрд▓рд╛рдПрдВ рдФрд░ рдПрдХ рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ "рдлрд╛рдЗрд▓" - "рдирдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╡рд┐рдЬрд╝рд╛рд░реНрдб", рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд╛ рдирд╛рдо рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдЗрд╕рдХреЗ рдмрд╛рдж Next рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдФрд░ Add Files рдореЗрдиреВ рдореЗрдВ, рд╣рдо рдЬреЗрдирд░реЗрдЯ рдХреА рдЧрдИ рд╡рд╛рдЗрд▓реЙрдЧ рдлрд╛рдЗрд▓ рдХреЛ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрджрд┐ рд╡реЗрд░рд┐рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкрд╛рдпрдерди рдлрд╝рд╛рдЗрд▓ рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдХреНрд╡рд╛рд░реНрдЯрд╕ рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдЪрдпрди рдореЗрдиреВ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ MAX II EMP1270T144C5 рдФрд░ рдЕрдЧрд▓реЗ рдХреБрдЫ рд╕рдордп рд╣реИред рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛ рд╣реИред

рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдиреЗрд╡рд┐рдЧреЗрдЯрд░ рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ рдореЗрдиреВ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╣рдорд╛рд░реА рд╡реЗрд░рд┐рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ "рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ" рдкрд░ рд░рд╛рдЗрдЯ-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рд╣рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдм, "рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ-рдкрд┐рди рдкреНрд▓рд╛рдирд░" рдореЗрдиреВ рдореЗрдВ, рдЪрд┐рдк рдкрд░ рдкрд┐рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ:



рдлрд┐рд░ рд╕реЗ рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВред рдЕрдм рд╕рдм рдХреБрдЫ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИ: рдЯреВрд▓-рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ред рд╣рдо рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдФрд░ рдкрд╛рд╡рд░ рдХреЛ рдмреЛрд░реНрдб рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рд╕реЗрдЯрдЕрдк рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдпреВрдПрд╕рдмреА-рдмреНрд▓рд╛рд╕реНрдЯрд░ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реЗрдЯ рдХрд░реЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЪрд┐рддреНрд░ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред



рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреА рд╕реВрдЪрдирд╛ рджреЗрдиреЗ рдХреЗ рдмрд╛рджред рдЖрдк рдмреЛрд░реНрдб рдкрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:



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


рдЗрд╕ рдкрд╛рда рдореЗрдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдкрд╛рдпрдерди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рдо рдХрд╛ рдорд╛рд╣реМрд▓ рдФрд░ рдкрд╣рд▓рд╛ рд╕рд░рд▓ рдПрдлрдкреАрдЬреАрдП рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред

рдорд╛рдирд╛:

  • рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ:
    • myHDL;
    • GTKWave;
    • Quartus;
  • рдЙрдмрдВрдЯреВ рдореЗрдВ рдпреВрдПрд╕рдмреА рдмреНрд▓рд╛рд╕реНрдЯрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛;
  • FPGA FPGA рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╡рд┐рдХрд╕рд┐рдд;
  • рдкрд░реАрдХреНрд╖рдг рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рд╕рддреНрдпрд╛рдкрди;
  • FPGA рдХреЗ рд▓рд┐рдП рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдВрдХрд▓рд┐рдд;
  • рдкреНрд░реЛрдЬреЗрдХреНрдЯ FPGA рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ред

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


All Articles