рдПрдХ рдПрдбреНрд░реЗрд╕ рдПрд▓рдИрдбреА рд╕реНрдЯреНрд░рд┐рдк рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?


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

рдЗрд╕рдХреЗ рдмрд╛рдж, рдореИрдВ WS2812B- рдЖрдзрд╛рд░рд┐рдд рдПрд▓рдИрдбреА рдкрдЯреНрдЯреА рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореИрдВ рд▓рдЧрднрдЧ FPGA рдЪрд┐рдк рдореЗрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА "рдПрд▓рдИрдбреА рд╕реНрдЯреНрд░рд┐рдк рдЪрд┐рдк" рдмрдирд╛рдКрдВрдЧрд╛ред

рдЗрд╕рд▓рд┐рдП, рдЯреЗрдк рдПрдХрд▓ рдбреЗрдЯрд╛ рд╕рд┐рдЧреНрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реАрд░рд┐рдпрд▓ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рдмрд┐рдЯ рд╢реВрдиреНрдп рдХреЛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдзрдирд╛рддреНрдордХ рдЖрд╡реЗрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЖрд╡реЗрдЧ рдЬреЛ рдЖрд╡реЗрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдЧрднрдЧ рджреЛ рдЧреБрдирд╛ рд╡реНрдпрд╛рдкрдХ рд╣реИред рдмрд┐рдЯ рдпреВрдирд┐рдЯ рдХреЛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдкреЙрдЬрд┐рдЯрд┐рд╡ рдкрд▓реНрд╕ рдФрд░ рдПрдХ рд╢реЙрд░реНрдЯ рдкреЙрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдпрджрд┐ 50 рд╕реЗ рдЕрдзрд┐рдХ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХрд╛ рдХреЛрдИ рдкреНрд░рд╕рд╛рд░рдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдЯреЗрдк рдЕрдкрдиреЗ рдореВрд▓ рд░рд╛рдЬреНрдп рдореЗрдВ рд╡рд╛рдкрд╕ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкрд┐рдХреНрд╕рд▓ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред

рдПрдХ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ 24 рдмрд┐рдЯреНрд╕ рддреАрди рдЖрд░рдЬреАрдмреА рд░рдВрдЧреЛрдВ рдХреЗ рд▓рд┐рдП 3 рдмрд╛рдЗрдЯреНрд╕ рд╣реИрдВред рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдиреБрдХреНрд░рдо рдЬреАрдЖрд░рдмреА рд╣реЛрдЧрд╛ред рдЬреА 7 рдХрд╛ рдЙрдЪреНрдЪ рдмрд┐рдЯ рдкрд╣рд▓реЗ рдЖрддрд╛ рд╣реИред

рдкрд╣рд▓реЗ 24 рдмрд┐рдЯреНрд╕ рдХрд╛ рдЕрдиреБрдХреНрд░рдо рдПрдХ рдкрд┐рдХреНрд╕реЗрд▓ рд╣реИ, рдЬреЛ рдЯреЗрдк рдореЗрдВ рдмрд╣реБрдд рдкрд╣рд▓реЗ рдПрд▓рдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдЧрд╛ред рдЬрдм рддрдХ рдкрд╣рд▓реА рдПрд▓рдИрдбреА рд╕рдВрддреГрдкреНрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рддрдм рддрдХ рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдЕрдЧрд▓реА рдПрд▓рдИрдбреА рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдПрд▓рдИрдбреА 24x рдЖрд░рдЬреАрдмреА рдмрд┐рдЯреНрд╕ рдХреЗ рдЕрдкрдиреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреЛ рдЕрдЧрд▓реЗ рдкрд░ рдЦреЛрд▓рддрд╛ рд╣реИред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ, рдПрдХ рдПрд▓ рдИ рдбреА рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдкрд╛рдиреА рд╕реЗ рднрд░реЗ рд╣реБрдП рдЧреБрдбрд╝ рдХреЗ рдПрдХ рдЭрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ:



рдкрд╣рд▓рд╛, рдлрд┐рд░ рджреВрд╕рд░рд╛, рдлрд┐рд░ рддреАрд╕рд░рд╛, рдФрд░ рдЗрд╕реА рддрд░рд╣ , рдмрд╛рд░реА-рдмрд╛рд░реА рд╕реЗ рднрд░рд╛ рдЬрд╛рдПрдЧрд╛ ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЛ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ "рд╕реНрдорд╛рд░реНрдЯ рдПрд▓рдИрдбреА" рдХреЛ рд╕реНрд╡рдпрдВ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдмреЗрд╢рдХ, рдпрд╣ рдереЛрдбрд╝рд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЕрд░реНрде рд░рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрддреНрдо-рд╢рд┐рдХреНрд╖рд╛ рдФрд░ рдХрд┐рд╕реА рдХреЗ рдХреНрд╖рд┐рддрд┐рдЬ рдХреЛ рд╡реНрдпрд╛рдкрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдХрд╛рдо рд╣реИред рдЖрдЗрдП рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рд╡реЗрд░рд┐рд▓реЙрдЧ рдПрдЪрдбреАрдПрд▓ рдореЗрдВ рдЪрд┐рдк рдХреЗ рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдмреЗрд╢рдХ, рдпрд╣ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЪрд┐рдк рдбрд┐рдЬрд╛рдЗрди рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд╕реАрдорд╛рдПрдВ рд╣реЛрдВрдЧреАред рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реАрдорд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ - рдореБрдЭреЗ рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛрдХрд┐рд░рд╕реАрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╛рд╣рд░реА рдШрдбрд╝реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдПрдХ рдЕрд╕рд▓реА рд╕реНрдорд╛рд░реНрдЯ рдПрд▓рдИрдбреА рдореЗрдВ, рдРрд╕рд╛ рдЬрдирд░реЗрдЯрд░ рднреА рдореМрдЬреВрдж рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЪрд┐рдк рдореЗрдВ рдПрдХреАрдХреГрдд рд╣реИред

рдЗрд╕ рддрд░рд╣ Verilog рдореЙрдбреНрдпреВрд▓ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

module WS2812B(
	input wire clk,
	input wire in,
	output wire out,
	output reg r,
	output reg g,
	output reg b
);

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕реНрдкрд╖реНрдЯ рд╣реИ: рдХреНрд▓реЙрдХ рдХреА рдХреНрд▓реЙрдХ рдлрд╝реНрд░реАрдХреНрд╡реЗрдВрд╕реА, рдЗрди-рдЖрдЙрдЯ рдФрд░ рдЖрдЙрдЯ, рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рдЧреНрдирд▓ r, g, b рдХреА рдЗрдирдкреБрдЯ рдЖрд╡реГрддреНрддрд┐ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рд╕рд┐рдЧреНрдирд▓, рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдореИрдВ рд▓рд╛рд▓, рд╣рд░реЗ рдФрд░ рдиреАрд▓реЗ рд░рдВрдЧ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╛рд╣рд░реА рдПрд▓ рдИ рдбреА рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░реВрдВрдЧрд╛ред

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

reg [1:0]r_in = 0;
always @( posedge clk )
	r_in <= { r_in[0],in };

wire in_pos_edge; assign in_pos_edge = (r_in==2'b01);

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рдирдпрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХрдВрдЯреНрд░реЛрд▓ рдХрдВрдЯреНрд░реЛрд▓рд░ рдХреЗ рд░реБрдХрдиреЗ рдкрд░ рдЯреЗрдк рд░реАрд╕реЗрдЯ рдХреА рд╕реНрдерд┐рддрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ:

localparam reset_level = 3000;
reg [15:0]reset_counter = 0;
always @( posedge clk )
	if( r_in[0] )
		reset_counter <= 0;
	else
	if( reset_counter<reset_level )
		reset_counter <= reset_counter+1;

wire reset; assign reset = (reset_counter==reset_level);

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдмрдврд╝рдд рд╕реЗ in_pos_edge рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдард╣рд░рд╛рд╡ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рдирдпрд╛ рд╕рдордп рддрдп рдХрд░рдиреЗ рдХреЗ рдХреНрд╖рдг рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ:

localparam fix_level   = 50;
reg [7:0]bit_length_cnt;
always @( posedge clk )
	if( in_pos_edge )
		bit_length_cnt <= 0;
	else
	if( bit_length_cnt<(fix_level+1) && !pass )
		bit_length_cnt <= bit_length_cnt + 1;

wire bit_fix; assign bit_fix = (bit_length_cnt==fix_level);

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

reg pass = 0;
reg [5:0]bits_captured = 0;

always @( posedge clk )
	if( reset )
		bits_captured <= 1'b0;
	else
	if( ~pass && bit_fix )
		bits_captured <= bits_captured+1'b1;

рдпрд╣рд╛рдВ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд╛рд╕ рд╕рд┐рдЧреНрдирд▓ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред 24x рдкрд┐рдХреНрд╕реЗрд▓ рдмрд┐рдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд╛рд╕ рд╕рд┐рдЧреНрдирд▓ рдПрдХ рдкрд░ рд╕реЗрдЯ рд╣реЛрддрд╛ рд╣реИ:

always @( posedge clk )
	if( reset )
		pass <= 1'b0;
	else
	if( bits_captured==23 && bit_fix )
		pass <= 1'b1;
		
reg pass_final;
always @( posedge clk )
	if( reset )
		pass_final <= 1'b0;
	else
	if( r_in!=2'b11 )
		pass_final <= pass;
		
assign out = pass_final ? in : 1'b0;

рдЬрдм рдкрд╛рд╕_рдлрд╛рдЗрдирд▓ рд╕рд┐рдЧреНрдирд▓ рдПрдХ рд╣реЛрддрд╛ рд╣реИ рддреЛ рдЗрдирдкреБрдЯ рдЖрдЙрдЯ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рдореЗрдВ рдПрдХ рд╢рд┐рдлреНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкрд┐рдХреНрд╕реЗрд▓ рдХреЗ 24 рдмрд┐рдЯреНрд╕ рд╕рдВрдЪрд┐рдд рд╣реИрдВ:

reg [23:0]shift_rgb;
always @( posedge clk )
	if( bit_fix )
		shift_rgb <= { in, shift_rgb[23:1] };

reg [23:0]fix_rgb;
always @( posedge clk )
	if( bits_captured==23 && bit_fix )
		fix_rgb <= { in, shift_rgb[23:1] };

рд╕рднреА 24 рдмрд┐рдЯреНрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░, рдЙрдиреНрд╣реЗрдВ рдЕрдВрддрд┐рдо 24 рдмрд┐рдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП рднреА рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЕрдм рдорд╛рдорд▓рд╛ рдЫреЛрдЯрд╛ рд░рд╣ рдЧрдпрд╛ рд╣реИред рдкреНрд░рд╛рдкреНрдд RGB рдмрд╛рдЗрдЯреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╛рд╣рд░реА рдПрд▓ рдИ рдбреА рдореЗрдВ рдЪрдордХ рдХреЛ рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП PWM (рд▓реИрдЯрд┐рдЯреНрдпреВрдбрд┐рдирд▓ рдкрд▓реНрд╕ рдореЙрдбреНрдпреВрд▓реЗрд╢рди) рд╕рд┐рдЧреНрдирд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

wire [7:0]wgreen; assign wgreen = { fix_rgb[0 ], fix_rgb[1 ], fix_rgb[2 ], fix_rgb[3 ], fix_rgb[4 ], fix_rgb[5 ], fix_rgb[6 ], fix_rgb[7 ] };
wire [7:0]wred;   assign wred   = { fix_rgb[8 ], fix_rgb[9 ], fix_rgb[10], fix_rgb[11], fix_rgb[12], fix_rgb[13], fix_rgb[14], fix_rgb[15] };
wire [7:0]wblue;  assign wblue  = { fix_rgb[16], fix_rgb[17], fix_rgb[18], fix_rgb[19], fix_rgb[20], fix_rgb[21], fix_rgb[22], fix_rgb[23] };

reg [7:0]pwm_cnt;

always @( posedge clk )
begin
	pwm_cnt <= pwm_cnt+1;
	r <= pwm_cnt<wred;
	g <= pwm_cnt<wgreen;
	b <= pwm_cnt<wblue;
end

рд╡рд╣ рд╕рдм рдорд╛рд▓реВрдо рд╣реЛрддрд╛ рд╣реИред

рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╡рд┐рд╡рд░рдг рд╣реИ - рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдЕрдиреБрднрд╡ рдХрд┐рдпрд╛ рдЬрд╛рдП?

рдореИрдВрдиреЗ FPGA MAX II (рдпреЗ рдорд╛рд░реНрд╕ рд░реЛрд╡рд░ рд╕реАрд░реАрдЬрд╝ рдХрд╛рд░реНрдб рд╣реИрдВ) рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рд░рд▓ рдорджрд░рдмреЛрд░реНрдб рд▓рд┐рдП рдФрд░ рдЗрд╕ рд╡реЗрд░рд┐рд▓реЙрдЧ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЙрди рд╕рднреА рдХреЛ рдлреНрд▓реИрд╢ рдХрд┐рдпрд╛ред рдмреЛрд░реНрдбреЛрдВ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА 8 рдПрд▓рдИрдбреА рдереЗ, рд▓реЗрдХрд┐рди рд╡реЗ рд╕рднреА рдкреАрд▓реЗ рдереЗред рдкреНрд░рддреНрдпреЗрдХ рдмреЛрд░реНрдб рдкрд░, рдореИрдВрдиреЗ 3 рдПрд▓рдИрдбреА рдХреЛ рдЖрд░, рдЬреА, рдмреА рд╕реЗ рдмрджрд▓ рджрд┐рдпрд╛ред рдореИрдВрдиреЗ рдмреЛрд░реНрдб рдХреЛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдФрд░, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрд▓рдИрдбреА рдкрдЯреНрдЯреА рд╕реЗ рдЬреЛрдбрд╝рд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд╣реЛрдордореЗрдб рдПрд▓ рдИ рдбреА рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЯреЗрдк рдХреЛ рд▓рдВрдмрд╛ рдХрд░ рджрд┐рдпрд╛ред

рдпрд╣ рдХрдиреЗрдХреНрд╢рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдирд┐рдХрд▓рд╛:



рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:



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


рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ FPGA рдореЗрдВ рдореИрдВрдиреЗ рдЬреЛ рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИ! рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдорд╛рд░реНрдЯ рдПрд▓рдИрдбреА рдЪрд┐рдк рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ред

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

All Articles