рд╣рдо рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдореЗрдВ рдЗрдирдкреБрдЯ, рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рдЖрдВрддрд░рд┐рдХ рдореЙрдбреНрдпреВрд▓ рд╣реИрдВ, рдпрд╣ рд╕рдм рдПрдХ рдХреЙрдореНрдмрд┐рдиреЗрд╢рди рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдореЗрдВ рдЬреБрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдБ рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд░рдЬрд┐рд╕реНрдЯрд░ рдирд╣реАрдВ рд╣реИрдВ, рд╡реЗ рдЫрдБрдЯрд╛рдИ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рдЕрдВрджрд░ рд╕рдордЭрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
// module Sorting_Stack ( clk, hold, is_input, data_in, data_out ); // parameter HBIT= 15; // size of number in bits parameter R_SZ= 256; // capacity, max sequence size parameter _R_SZ= (R_SZ+1)/2; // not to modify // - // input clk; ... // - input [HBIT:0] data_in; // load one number per clock output [HBIT:0] data_out; // while is_input==0, max value popping out here // - ... // wire [HBIT:0] in_prev[_R_SZ]; wire [HBIT:0] in_next[_R_SZ]; wire [HBIT:0] out[_R_SZ]; // - // // // storage Cell_Compare
рдЖрдЗрдП рд╣рдо рдПрдХ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
Cell_Compare - рдореЙрдбреНрдпреВрд▓ рдкреНрд░рдХрд╛рд░
# (HBIT) - рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╕реНрдерд╛рдкрдирд╛
рд░рд┐рдмрди - рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдирд╛рдо
[_R_SZ] - рдпрд╣ рдПрдХ рд╕рд░рдгреА рд╣реИ, рд╕рдВрдЦреНрдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ
(clk, hold, is_input, рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рд╕рдВрдХреЗрдд рд╣реИрдВ
in_prev, in_next, out); - рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдВрдХреЗрддред
рдЕрдЧрд▓рд╛
рдЬрдирд░реЗрдЯ рдПрдХ рдЙрдкрдпреЛрдЧреА рдирд┐рд░реНрдорд╛рдг рд╣реИ рдЬреЛ рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
рдЫреЛрд░реЛрдВ рдЖрджрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ рд╕рдВрдпреЛрдЬрди рд╕рд░реНрдХрд┐рдЯ рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВред
// generate genvar i,j; for (i=0; i<_R_SZ-1; i=i+1) begin : block_name01 assign in_prev[i+1]= out[i]; assign in_next[i]= out[i+1]; end assign in_prev[0]= data_in; assign data_out= out[0]; assign in_next[_R_SZ-1]= 0; endgenerate endmodule
рдЕрдм рдЫрдБрдЯрд╛рдИ рд╕реЗрд▓ рдореЙрдбреНрдпреВрд▓ред
module Cell_Compare ( clk, hold, is_input, in_prev, in_next, out ); parameter HBIT= 15; input clk; input hold; input is_input; input [HBIT:0] in_prev; input [HBIT:0] in_next;
рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдБ рдЫрдБрдЯрд╛рдИ рддрд░реНрдХ рдЦреБрдж рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд▓ рджреЛ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ, рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдЫреЛрдЯрд╛ред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд╛рдп (рдпрджрд┐
рдкрдХрдбрд╝ рдирд╣реАрдВ
рд╣реИ ), рд╕реЗрд▓ рдкрдбрд╝реЛрд╕реА рд╕реЗ рдЖрдП рд╕рдВрдЦреНрдпрд╛ рдХреА рддреБрд▓рдирд╛ рдЕрдкрдиреЗ "рдЪреИрдВрдкрд┐рдпрди" рд╕реЗ рдХрд░рддрд╛ рд╣реИред рдЪреИрдВрдкрд┐рдпрди - рд▓рд┐рдЦрддреЗ рд╕рдордп рдЕрдзрд┐рдХрддрдо рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкрдврд╝рддреЗ рд╕рдордп рдиреНрдпреВрдирддрдоред рд╣рд╛рд░рдиреЗ рд╡рд╛рд▓рд╛ рдЕрдЧрд▓реЗ рдЙрдкрд╛рдп рдкрд░ рд╕реЗрд▓ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИред рдирддреАрдЬрддрди, рдбреЗрдЯрд╛ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИ, рдкрд╣рд▓реЗ рдПрдХ рджрд┐рд╢рд╛ рдореЗрдВ, рдлрд┐рд░ рджреВрд╕рд░реЗ рдореЗрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдлрд┐рдЯ рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдВрдЦреНрдпрд╛, рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рджреЛрдЧреБрдиреЗ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
рд╕реНрд░реЛрдд рдХреЛрдб рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ, рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЪрдпрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, (рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд)ред
is_input рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ
рдХрд┐ рд╣рдо рдбреЗрдЯрд╛ рдкрдврд╝рддреЗ рд╣реИрдВ рдпрд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХрд┐рд╕ рджрд┐рд╢рд╛ рдореЗрдВ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рд╕рд╛рде рдЪрд▓рддрд╛ рд╣реИред
output [HBIT:0] out= is_input ? lower : higher; // . , bit [HBIT:0] higher; bit [HBIT:0] lower; // , . // , // higher in_prev (lower ), // lower in_next (higher ) wire [HBIT:0] cand_h= is_input ? higher : lower; wire [HBIT:0] cand_l= is_input ? in_prev : in_next; // . // , , // . always@(posedge clk ) if (~hold) begin // -. higher <= ( cand_h >= cand_l ) ? cand_h : cand_l; lower <= ( cand_h >= cand_l ) ? cand_l : cand_h; end endmodule
рд╡рд╣ рд╕рдм рд╣реИред