рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ FPGAs рдХреА рдЙрдиреНрдирддрд┐ рдореЗрдВ рдЕрдкрдирд╛ рдпреЛрдЧрджрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рд╕рдордЭрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рд╡реАрдПрдЪрдбреАрдПрд▓ рдореЗрдВ рд╕рд╛рдд рдЦрдВрдбреЛрдВ рд╡рд╛рд▓реЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рд▓реЗрдХрд┐рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдлрдкреАрдЬреАрдП рдореЗрдВ рдХреИрд╕реЗ рдЖрдпрд╛ рдФрд░ рдореИрдВрдиреЗ рд╡реАрдПрдЪрдбреАрдПрд▓ рднрд╛рд╖рд╛ рдХреЛ рдХреНрдпреЛрдВ рдЪреБрдирд╛ред
рд▓рдЧрднрдЧ рдбреЗрдврд╝ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ FPGAs рдХреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЕрдкрдирд╛ рд╣рд╛рде рдЖрдЬрдорд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рдХрднреА рд╕рд░реНрдХрд┐рдЯрд░реА рдХрд╛ рд╕рд╛рдордирд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рдорд╛рдЗрдХреНрд░реЛрдХрдВрдЯреНрд░реЛрд▓рд░реНрд╕ (Atmega328p, STM32) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдмрд╣реБрдд рдХрдо рдЕрдиреБрднрд╡ рдерд╛ред FPGAs рдХреЗ рд╕рд╛рде рд╕рд╣рдЬ рд╣реЛрдиреЗ рдХреЗ рдирд┐рд░реНрдгрдп рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рд╕рд╡рд╛рд▓ рдЙрд╕ рднрд╛рд╖рд╛ рдХреЛ рдЪреБрдирдиреЗ рдХрд╛ рд╣реБрдЖ рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЕрдкрдиреА рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд╡рд┐рдХрд▓реНрдк VHDL рдкрд░ рдЧрд┐рд░ рдЧрдпрд╛ред рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рд╕рдВрд╢реНрд▓реЗрд╖рдг рдЪрд░рдг рдкрд░ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдиреА рд╕рдВрднрд╡ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рдФрд░ рдПрдХ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдХрд░рдг рдкрд░ рдирд╣реАрдВред
рдареАрдХ рд╕рд╛рдд рдЦрдВрдбреЛрдВ рд╡рд╛рд▓рд╛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреНрдпреЛрдВ? рдПрд▓рдИрдбреА рдмреНрд▓рд┐рдВрдХрд┐рдВрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдердХрд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдкрд▓рдХ рдЭрдкрдХрд╛рдиреЗ рдХрд╛ рддрд░реНрдХ рдХреБрдЫ рднреА рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рддрд░реНрдХ рдПрдХ рддрд░рдл рдПрд▓рдИрдбреА рдХреЛ рдмреНрд▓рд┐рдВрдХ рдХрд░рдиреЗ рд╕реЗ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ (рдпрд╛рдиреА рдпрд╣ рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ), рдФрд░ рджреВрд╕рд░реА рдУрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
рдбрд┐рд╡рд╛рдЗрд╕ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдореИрдВрдиреЗ рдХреНрдпрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛:
- FPGA Altera Cyclone II (рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд░реВрдк рд╕реЗ рдкреБрд░рд╛рдирд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЪреАрдиреА рдЗрд╕реЗ рдПрдХ рдорд╡рд╛рдж рдХреЗ рд▓рд┐рдП рдЦрд░реАрдж рд╕рдХрддреЗ рд╣реИрдВ)
- рдХреНрд╡рд╛рд░реНрдЯрд╕ II рд╕рдВрд╕реНрдХрд░рдг 13.0.0 (рдЬрд╣рд╛рдБ рддрдХ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ, рдпрд╣ рдЪрдХреНрд░рд╡рд╛рдд II рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рд╣реИ)
- рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЙрдбрд▓рд╕рд┐рдо
- рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд╕рд╛рде рд╕рд╛рдд рдЦрдВрдбреЛрдВ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди
рдХрд╛рд░реНрдп
рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдПрдВ рдЬреЛ рдПрдХ рдЪрдХреНрд░ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ 0 - 9 рджрд┐рдЦрд╛рдПрдЧрд╛ред рдПрдХ рдмрд╛рд░ рдПрдХ рдмрд╛рд░, рдкреНрд░рджрд░реНрд╢рди рдкрд░ рджрд┐рдЦрд╛рдП рдЧрдП рдореВрд▓реНрдп 1 рд╕реЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рддрд░реНрдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЛ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реВрдВрдЧрд╛, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдЫ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕ рдХреНрд░рд┐рдпрд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЕрдЧрд▓реЗ рдореЙрдбреНрдпреВрд▓ рдХреЛ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдореЙрдбреНрдпреВрд▓
- рдпрд╣ рдЙрдкрдХрд░рдг рд╕рдордп рдЧрд┐рдирдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ "рджреЗрд░реА" рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдпрд╛ред рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ 1 рдЗрдирдХрдорд┐рдВрдЧ рдФрд░ 1 рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ рд╣реИред рдореЙрдбреНрдпреВрд▓ FPGA рдЖрд╡реГрддреНрддрд┐ рд╕рдВрдХреЗрдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рдЧреНрдирд▓ рдХреА рдирд┐рд╢реНрдЪрд┐рдд рдЕрд╡рдзрд┐ рдХреЗ рдмрд╛рдж, рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╡рд┐рдкрд░реАрдд рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред
- рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ 0 рд╕реЗ 9. рддрдХ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреЗ рд▓рд┐рдП bcd_counter рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
- рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдПрдХ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рд▓рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЗ 0 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдмрд┐рдЯ рдХреЛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рд╕реЗрдЧрдореЗрдВрдЯ рдХреЛ рдмрд┐рдЯреНрд╕ рдореЗрдВ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд░рд╛рдЗрдЯ 1 (рдореЗрд░реЗ рдбрд┐рд╕реНрдкреНрд▓реЗ рдореЗрдВ рдЙрд▓реНрдЯреЗ рд▓реЙрдЬрд┐рдХ рд╣реИрдВ)ред Bcd_2_7seg рдбрд┐рдХреЛрдбрд░ рд╡рд╛рдВрдЫрд┐рдд рдмрд┐рдЯреНрд╕ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдФрд░ рд░реАрд╕реЗрдЯ рд╕реЗ рдирд┐рдкрдЯреЗрдЧрд╛ред
- рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдореЙрдбреНрдпреВрд▓ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реЛрдЧрд╛ред
рд╣реЛрд╕реНрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рд╕рдВрдХреЗрддреЛрдВ рдХреЗ рд╕рд╣реА рд╕рдВрдЪрд░рдг рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реЗрдЧрд╛, рд╕рд╛рде рд╣реА рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЖрд░рд╕реАрдПрд▓рдХреЗ рд╕рд┐рдЧреНрдирд▓ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛ред
рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХрд╛ рдПрдХ рдЖрд░реЗрдЦ рджреЗрддрд╛ рд╣реВрдВ рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЖрд░реЗрдЦ рд╕реЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ 1 рдЗрдирдХрдорд┐рдВрдЧ рд╕рд┐рдЧреНрдирд▓ (clk) рдФрд░ 3 рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ (sclk, dio, rclk) рд╣реИрдВред Clk рд╕рд┐рдЧреНрдирд▓ 2 рд╕рд┐рдЧреНрдирд▓ рдбрд┐рд╡рд╛рдЗрдбрд░ (sec_delay рдФрд░ transfer_delay) рдореЗрдВ рдЖрддрд╛ рд╣реИред 1s рдХреА рдЕрд╡рдзрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ sec_delay рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдмрдврд╝рддреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░, рдХрд╛рдЙрдВрдЯрд░ (bcd_counter1) рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдирдВрдмрд░ рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛ рдЙрддреНрдкрдиреНрди рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдбрд┐рдХреЛрдбрд░ (bcd_2_7seg1) рд╕рдВрдЦреНрдпрд╛ рдХреЗ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЛ рдЬрд▓рд╛рдпрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рдЦрдВрдбреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИред рдЬреЛ, рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ (рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ 1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ Transfer_delay рдбрд┐рд╡рд╛рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЗрдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХреЛрдб
рд╡реАрдПрдЪрдбреАрдПрд▓ рдореЗрдВ рдПрдХ рдЙрдкрдХрд░рдг рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрдХрд╛рдИ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рджреЛ рдШрдЯрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрдХрд╛рдИ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреА рд╣реИред рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рджреЗрд░реА рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЗрдХрд╛рдИ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ рдЬреЗрдиреЗрд░рд┐рдХ рдлрд╝реАрд▓реНрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рджреЗрд░реА рдкрд░ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╣рдо рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рдмрд╛рд╣рд░ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рдВрдХреЗрддреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВред
рджреЗрд░реА рдбрд┐рд╡рд╛рдЗрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдЕрдВрджрд░ рдХреЛрдб рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдХреЛрдб рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрд╖реНрдардХ рдореЗрдВ, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж, рд╕рдВрдХреЗрдд рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рдмрджрд▓рдХрд░ рджреА рдЧрдИ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧреА (рд╕рдВрд╡реЗрджрдирд╢реАрд▓рддрд╛ рд╕реВрдЪреА)ред
рдирд┐рд╖реНрдкрд╛рджрди рддрд░реНрдХ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ bcd_counter рдбрд┐рд╡рд╛рдЗрд╕, рд╡рд┐рд▓рдВрдм рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореИрдВ рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред
рдпрд╣рд╛рдВ рдбрд┐рдХреЛрдбрд░ рдХреА рдЗрдХрд╛рдИ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рд╣реИ entity bcd_to_7seg is port(bcd: in std_logic_vector(3 downto 0) := X"0"; disp_out: out std_logic_vector(7 downto 0) := X"00"); end entity bcd_to_7seg; architecture bcd_to_7seg_arch of bcd_to_7seg is signal not_bcd_s: std_logic_vector(3 downto 0) := X"0"; begin not_bcd_s <= not bcd; disp_out(7) <= (bcd(2) and not_bcd_s(1) and not_bcd_s(0)) or (not_bcd_s(3) and not_bcd_s(2) and not_bcd_s(1) and bcd(0)); disp_out(6) <= (bcd(2) and not_bcd_s(1) and bcd(0)) or (bcd(2) and bcd(1) and not_bcd_s(0)); disp_out(5) <= not_bcd_s(2) and bcd(1) and not_bcd_s(0); disp_out(4) <= (not_bcd_s(3) and not_bcd_s(2) and not_bcd_s(1) and bcd(0)) or (bcd(2) and not_bcd_s(1) and not_bcd_s(0)) or (bcd(2) and bcd(1) and bcd(0)); disp_out(3) <= (bcd(2) and not_bcd_s(1)) or bcd(0); disp_out(2) <= (not_bcd_s(3) and not_bcd_s(2) and bcd(0)) or (not_bcd_s(3) and not_bcd_s(2) and bcd(1)) or (bcd(1) and bcd(0)); disp_out(1) <= (not_bcd_s(3) and not_bcd_s(2) and not_bcd_s(1)) or (bcd(2) and bcd(1) and bcd(0)); disp_out(0) <= '1'; end bcd_to_7seg_arch;
рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рд╕рднреА рддрд░реНрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЪреИрдирд▓ рдкрд░ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдореЗрдВ рдЗрд╕ рдЙрдкрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕реВрддреНрд░ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреАред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдпрд╣рд╛рдВ
рд╡реАрдбрд┐рдпреЛ рдХрд╛ рд▓рд┐рдВрдХ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ, рдореИрдВ рд╕реАрд░рд┐рдпрд▓ рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рддрд░реНрдХ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реВрдВ entity transmitter is port(enable: in boolean; clk: in std_logic; digit_pos: in std_logic_vector(7 downto 0) := X"00"; digit: in std_logic_vector(7 downto 0) := X"00"; sclk, dio: out std_logic := '0'; ready: buffer boolean := true); end entity transmitter; architecture transmitter_arch of transmitter is constant max_int: integer := 16; begin sclk <= clk when not ready else '0'; send_proc: process(clk, enable, ready) variable dio_cnt_v: integer range 0 to max_int := 0; variable data_v: std_logic_vector((max_int - 1) downto 0); begin
Sclk рд╕рд┐рдЧреНрдирд▓ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ clk рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдорд╛рди рдХреЛ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрднреА рдЬрдм рдбрд┐рд╡рд╛рдЗрд╕ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░ рд░рд╣рд╛ рд╣реЛ (рд╕рд┐рдЧреНрдирд▓ рд░реЗрдбреА = рдЧрд▓рдд)ред рдЕрдиреНрдпрдерд╛, sclk рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдорд╛рди 0. рд╣реЛрдЧрд╛ред рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ (enable = true рд╕рд┐рдЧреНрдирд▓), рдореИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ 16-рдмрд┐рдЯ рд╡реЗрдХреНрдЯрд░ (data_v) рдореЗрдВ рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рджреЛ 8-рдмрд┐рдЯ рд╡реИрдХреНрдЯрд░ (digit_pos рдФрд░ digit) рд╕реЗ рдбреЗрдЯрд╛ рдХреЛ рдорд┐рд▓рд╛рддрд╛ рд╣реВрдВ рдФрд░ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рдЗрд╕ рд╡реЗрдХреНрдЯрд░ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рддрд┐ рдШрдбрд╝реА рдПрдХ рдмрд┐рдЯ рд╣реИ, рдЬреЛ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ рдбрд┐рдпреЛ рдореЗрдВ рд╕рдВрдЪрд░рд┐рдд рдмрд┐рдЯ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рддреЛрдВ рдореЗрдВ рд╕реЗ, рдореИрдВ рдпрд╣ рдиреЛрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдбрд┐рдпреЛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреНрд▓рд╛рд░реНрдХ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдЯреНрд░реЗрд▓рд┐рдВрдЧ рдПрдЬ рдкрд░ рд╕реЗрдЯ рд╣реИ, рдФрд░ рдкрд┐рди рдбрд┐рдпреЛ рд╕реЗ рдбреЗрдЯрд╛ рд╕реНрдХреЗрд▓реЗ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдкреНрд░рдореБрдЦ рдХрд┐рдирд╛рд░реЗ рдкрд░ рдЖрдиреЗ рдкрд░ рдбрд┐рд╕реНрдкреНрд▓реЗ рдХреЗ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛ред рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдкрд░, рддреИрдпрд╛рд░ <= рд╕рдЪ рд╕рдВрдХреЗрдд рд╕реЗрдЯ рдХрд░рдХреЗ, рдореИрдВ рдЙрди рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реВрдВ рдЬреЛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рди рдбрд┐рд╡рд╛рдЗрд╕ рдХреА рдЗрдХрд╛рдИ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ entity display is port(clk: in std_logic; sclk, rclk, dio: out std_logic := '0'); end entity display; architecture display_arch of display is component delay is generic (delay_cnt: integer); port(clk: in std_logic; out_s: out std_logic := '0'); end component; component bcd_counter is port(clk: in std_logic; bcd: out std_logic_vector(3 downto 0)); end component; component bcd_to_7seg is port(bcd: in std_logic_vector(3 downto 0); disp_out: out std_logic_vector(7 downto 0)); end component; component transmitter is port(enable: in boolean; clk: in std_logic; digit_pos: in std_logic_vector(7 downto 0); digit: in std_logic_vector(7 downto 0); sclk, dio: out std_logic; ready: buffer boolean); end component; signal sec_s: std_logic := '0'; signal bcd_counter_s: std_logic_vector(3 downto 0) := X"0"; signal disp_out_s: std_logic_vector(7 downto 0) := X"00"; signal tr_enable_s: boolean; signal tr_ready_s: boolean; signal tr_data_s: std_logic_vector(7 downto 0) := X"00";
рдпрд╣ рдЙрдкрдХрд░рдг рдЕрдиреНрдп рдЙрдкрдХрд░рдгреЛрдВ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдВ, рд╕рд╣рд╛рдпрдХ рд╕рдВрдХреЗрддреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рдЙрди рдШрдЯрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдореЗрдВ (рд╢реБрд░реБрдЖрддреА рдХреАрд╡рд░реНрдб рдХреЗ рдмрд╛рдж) рдореИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдмрдирд╛рддрд╛ рд╣реВрдВ:
- sec_delay - рд╡рд┐рд▓рдВрдм рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ рдХреЛ sec_s рдкрд░ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- transfer_delay - рд╡рд┐рд▓рдВрдм рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕рд┐рдЧреНрдирд▓ transfer_clk рдкрд░ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред
- bcd_counter1 - bcd_counter рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ bcd_counter_s рдкрд░ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- bcd_to_7seg1 - bcd_to_7seg рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдгред рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ рдХреЛ disp_out_s рдкрд░ рд░реВрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЯреНрд░рд╛рдВрд╕рдорд┐рдЯрд░ 1 рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдШрдЯрдХ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рд╕рд┐рдЧреНрдирд▓ sclk, dio, tr_ready_s рд╕рд┐рдЧреНрдирд▓ рдХреЛ рднреЗрдЬреЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдШрдЯрдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдмрд╛рдж, рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдШреЛрд╖рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддреА рд╣реИ:
рдпрджрд┐ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рд╡реНрдпрд╕реНрдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреА рд╢реБрд░реБрдЖрдд рдХреЛ рдЖрд░рдВрдн рдХрд░рддреА рд╣реИред if(tr_ready_s) then if(not (prev_disp = disp_out_s)) then prev_disp := disp_out_s;
- рдпрджрд┐ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рд╡реНрдпрд╕реНрдд рд╣реИ (tr_ready_s = false), рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд┐рдЧреНрдирд▓ рдХрд╛ рдорд╛рди рд╕реЗрдЯ рдХрд░рддреА рд╣реИ disp_refresh_s <= true (рдпрд╣ рд╕рдВрдХреЗрдд рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдбрд┐рд╕реНрдкреНрд▓реЗ рдкрд░ рдбреЗрдЯрд╛ рдЕрдкрдбреЗрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП)ред рд╕рдВрдХреЗрдд рдорд╛рди tr_enable_s <= false рднреА рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЕрдЧрд░ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛
рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЖрд░рдПрд▓рд╕реА рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд╕реЗрдЯ рдФрд░ рд░реАрд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИ if(rclk_v = '1') then disp_refresh_s <= false; end if; if(tr_ready_s and disp_refresh_s) then rclk_v := '1'; else rclk_v := '0'; end if; rclk <= rclk_v;
рд╕рдордп рдХрд╛ рдЪрд╛рд░реНрдЯ
рдпрд╣рд╛рдВ рдирдВрдмрд░ 1 рдХреЛ рдкреНрд░рджрд░реНрд╢рди рдХреА рдкрд╣рд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖрд░реЗрдЦ рд╣реИ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛ "10011111" рдкреНрд░реЗрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдлрд┐рд░ рдкреНрд░рджрд░реНрд╢рди рдкрд░ рд╕рдВрдЦреНрдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ "00010000" рд╣реИ (рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдкрд░ рд╕реНрдерд┐рд░ X "10" рдХреЗ рд░реВрдк рдореЗрдВ рдЖрддрд╛ рд╣реИ)ред рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕рдмрд╕реЗ рд╕рд╣реА рдмрд┐рдЯ (lsb) рдХреЛ рдкрд╣рд▓реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╕рднреА рдХреЛрдб
github рдкрд░ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓реЗрдВ * _tb.vhd рд╕рдВрдЧрдд рдШрдЯрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░_tb.vhd рдПрдХ рдЯреНрд░рд╛рдВрд╕рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдбреАрдмрдЧ рдлрд╝рд╛рдЗрд▓ рд╣реИ)ред рдмрд╕ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореИрдВ рднреА рдЙрдиреНрд╣реЗрдВ github рдкрд░ рдЕрдкрд▓реЛрдб рдХрд┐рдпрд╛ред рдпрд╣ рдХреЛрдб рдПрдХ рдЕрд╕рд▓реА рдмреЛрд░реНрдб рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ, рдЖрдк
рдпрд╣рд╛рдВ рдХреЛрдб
рдХрд╛ рдЪрд┐рддреНрд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (15:30 рдмрдЬреЗ рд╕реЗ рд╢реБрд░реВ)ред рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред