рд╡реЗрд░рд┐рд▓реЛрдЧ рдкреНрд░реЛрд╕реЗрд╕рд░ рдбрд┐рдЬрд╛рдЗрди


рднрд╛рдЧ I
рднрд╛рдЧ II
рднрд╛рдЧ III
рднрд╛рдЧ iv
рднрд╛рдЧ v

рд╣рдо рд╡реЗрд░рд┐рд▓реЙрдЧ рдореЗрдВ рд▓рд┐рдЯрд┐рд▓ рдореИрди рдХрдВрдкреНрдпреВрдЯрд░ рдбрд┐рдЬрд╛рдЗрди рдХрд░рддреЗ рд╣реИрдВред

LMC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓реЗрдЦ Habr├й рдкрд░ рдерд╛ред

рдЗрд╕ рдХрдВрдкреНрдпреВрдЯрд░ рдХрд╛ рдСрдирд▓рд╛рдЗрди рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдпрд╣рд╛рдБ рд╣реИ ред

рд╣рдо рдЪрд╛рд░ (N = 2) рдЪрд╛рд░-рдмрд┐рдЯ (M = 4) рд╢рдмреНрджреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ RAM / RAM рдореЙрдбреНрдпреВрд▓ рд▓рд┐рдЦрддреЗ рд╣реИрдВред рдЬрдм рдЖрдк рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдбреЗрдЯрд╛ data_in рд╕реЗ adr рдкрд░ RAM рдореЗрдВ рд▓реЛрдб рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
module R0 #(parameter N = 2, M = 4) ( input RAM_button, // input [N-1:0] adr, // input [M-1:0] data_in, //   output [M-1:0] RAM_out //   ); reg [M-1:0] mem [2**N-1:0]; //  mem always @(posedge RAM_button) //    mem [adr] <= data_in; //     data_in assign RAM_out = mem[adr]; // RAM_out    endmodule 

рдмрд╛рд╣рд░реА рдЬрдирд░реЗрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ 555 рд╕реАрдПрдордУрдПрд╕ рдЯрд╛рдЗрдорд░ (3.3V рд╕реЗ рд╕рдВрдЪрд╛рд▓рди) рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
рд╣рдо рдХрд╛рдЙрдВрдЯрд░ рд╕реЗ 555 рдЯрд╛рдЗрдорд░ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рд░реИрдо рдХреЗ рдПрдбреНрд░реЗрд╕ рдЗрдирдкреБрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ:
 module R1 #(parameter N = 2, M = 4) ( input timer555, RAM_button, //input [N-1:0] adr, input [M-1:0] data_in, output [M-1:0] RAM_out ); reg [1:0]counter; //  always @(posedge timer555) //    counter <= counter + 1; //    1 wire [N-1:0] adr; assign adr = counter; //       reg [M-1:0] mem [2**N-1:0]; always @(posedge RAM_button) mem [adr] <= data_in; assign RAM_out = mem[adr]; endmodule 

рдпрд╣рд╛рдВ, рдХрд╛рдЙрдВрдЯрд░ рдХрд╛рдЙрдВрдЯрд░ рдФрд░ рдореЗрдо рдореЗрдореЛрд░реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╕рдордп, рдЧреИрд░-рдЕрд╡рд░реБрджреНрдз рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ <= рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдпрд╣рд╛рдВ marsohod.org рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рд╡рд┐рд╡рд░рдг рдпрд╣рд╛рдБ marsohod.org рдкрд░ рд╣реИ

рдХрд╛рдЙрдВрдЯрд░ рдкрд░ рдбрд╛рдЙрдирд▓реЛрдб рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝реЗрдВред
рдХрд╛рдЙрдВрдЯрд░_рд▓реЛрдб рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдбрд╛рдЙрдирд▓реЛрдбрд┐рдВрдЧ рдХреА рдЬрд╛рддреА рд╣реИ :
 //input Counter_load; wire [3:0] branch_adr; //   assign branch_adr = data_in; always @(posedge timer555) begin if(Counter_load) //  "Counter_load"    "branch_adr" counter <= branch_adr; else counter <= counter + 1; end 


рдПрдХ рдЕрд▓рдЧ рдореЙрдбреНрдпреВрд▓ рдореЗрдВ, рдПрдХ 4bit рд░рдЬрд┐рд╕реНрдЯрд░ (рдмреИрдЯрд░реА) рдмрдирд╛рдПрдБ:
 module register4 ( input [3:0] reg_data, input reg_button, output reg [3:0] q ); always @(posedge reg_button) q <= reg_data; endmodule 

Acc рд╕рдВрдЪрд╛рдпрдХ, MUX2 рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдпреЛрдЧ рдпреЛрдЬрдХ рдЬреЛрдбрд╝реЗрдВред
рдпреЛрдЬрдХ рдореЗрдореЛрд░реА рд╕реЗ рдмреИрдЯрд░реА Acc рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдХреЗ рд╕рд┐рдЧреНрдирд▓ рдЗрдирдкреБрдЯ рдХреЛ рдирдВрдмрд░ data_in рдФрд░ sum рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, MUX2 рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рд╕реЗ рд╕рдВрдЦреНрдпрд╛ рдХреЛ Acc рдмреИрдЯрд░реА рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 module R2 #(parameter ADDR_WIDTH = 2, DATA_WIDTH = 4) ( input timer555, Counter_load, RAM_button, input MUX_switch, input Acc_button, input [3:0] data_in, output [3:0] Acc, output [DATA_WIDTH-1:0] RAM, output reg [1:0] counter ); wire [1:0] branch_adr; assign branch_adr = data_in[1:0]; //Counter always @(posedge timer555) begin if(Counter_load) counter <= branch_adr; else counter <= counter + 1; end wire [ADDR_WIDTH-1:0] adr; assign adr = counter; //RAM reg [DATA_WIDTH-1:0] mem [2**ADDR_WIDTH-1:0]; always @(posedge RAM_button) mem [adr] <= Acc; assign RAM = mem[adr]; //sum wire [3:0] sum; assign sum = Acc + RAM; //MUX reg [3:0] MUX2; always @* // Always @* тАФ  ┬л┬╗ MUX2 = MUX_switch ? sum : data_in; //Accumulator register4 Acc_reg( .reg_data(MUX2), .reg_button(Acc_button), .q(Acc) ); endmodule 

рд╣рдореЗрд╢рд╛ @ * рдХрд╛ рдЕрд░реНрде рд╣реИ "рд╣рдореЗрд╢рд╛ред" рдХреБрдЫ рд╕рд┐рдВрдереЗрд╕рд╛рдЗрдЬрд╝рд░ рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддреЗ рд╣реИрдВред рдПрдХ рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕рд░ рд╣рдореЗрд╢рд╛ рдСрд╡рд░ @ * рдХреЗ рдмрд┐рдирд╛ рднреА рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдпрд╣рд╛рдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред


рдШрдЯрд╛рд╡


рдШрдЯрд╛рд╡ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЛрдб рдореЗрдВ рдПрдХ рдШрдЯрд╛рдпрд╛ рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЖрдк рдкрд╛рдареНрдпрдкреБрд╕реНрддрдХ "рдбрд┐рдЬрд┐рдЯрд▓ рд╕рд░реНрдХрд┐рдЯрд░реА рдФрд░ рдХрдВрдкреНрдпреВрдЯрд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░" рдореЗрдВ рдмрд╛рдЗрдирд░реА рдирдВрдмрд░ рдХреЗ рдЬреЛрдбрд╝ рдФрд░ рдШрдЯрд╛рд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдбреЗрд╡рд┐рдб рдПрдоред рд╣реИрд░рд┐рд╕ рдФрд░ рд╕рд╛рд░рд╛ рдПрд▓ред рд╣реИрд░рд┐рд╕) рдЕрдзреНрдпрд╛рдп 1.4.6 рдореЗрдВ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд

рдореБрдЦреНрдп рдореЙрдбреНрдпреВрд▓ рдореЗрдВ рдПрдХ рддрддреНрд╡ рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдмреИрдЯрд░реА рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдШрдЯрд╛рддрд╛ рд╣реИ:
 wire [3:0] subtract; assign subract = Acc - RAM ; 

2-рдЗрдирдкреБрдЯ рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ рдХреЛ 4-рдЗрдирдкреБрдЯ рд╕реЗ рдмрджрд▓реЗрдВ:
 always @* MUX4 = MUX_switch[1] ? (MUX_switch[0] ? RAM : subtract) : (MUX_switch[0] ? sum : data_in); 

рд╣рдо рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЛ рдмреИрдЯрд░реА (4bit'ny рд░рдЬрд┐рд╕реНрдЯрд░) рд╕реЗ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╣рдо рдмреИрдЯрд░реА рдХреЛ 2 рдЭрдВрдбреЗ рднреА рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:

1. рдЭрдВрдбрд╛ "рд╢реВрдиреНрдп" рдПрдХ рд▓реЙрдЧ рд╣реИред рддрддреНрд╡ 4 рдпрд╛ рдирд╣реАрдВред рдпрджрд┐ рдЧрдзрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рд╢реВрдиреНрдп рд╣реИ рддреЛ рдЭрдВрдбрд╛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

2. рдЭрдВрдбрд╛ "рд╢реВрдиреНрдп рдпрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛" рдПрдХ рд▓реЙрдЧ рд╣реИред рддрддреНрд╡ 4-рдмрд┐рдЯ рдмреИрдЯрд░реА рдХреЗ рдЙрдЪреНрдЪ рд╕реНрддрд░ рдкрд░ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЧрдзрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рд╢реВрдиреНрдп рд╕реЗ рдЕрдзрд┐рдХ рдпрд╛ рдЙрд╕рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ рддреЛ рдЭрдВрдбрд╛ рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

 // "" output Z_flag; assign Z_flag = ~(|Acc); // 4-  - // "   " output PZ_flag; assign PZ_flag = ~Acc[3]; 


4 рдпрд╛ рдирд╣реАрдВ
рдпрд╣рд╛рдВ рд╣рдордиреЗ рдПрдХ рдмрд╣реБ-рдЗрдирдкреБрдЯ рд╡рд╛рд▓реНрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рдпрд╛ ~ (! Acc) рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рд╣реИ
рд╡реЗрд░рд┐рд▓реЛрдЧ рдЧреЗрдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреАрд╡рд░реНрдб рддрд░реНрдХ рдЧреЗрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВ: рдФрд░ (рдФрд░ (), рдирдВрдж (рдФрд░ рдирд╣реАрдВ), рдпрд╛ (рдпрд╛), рди рд╣реА (OR-NOT), xor (рд╡рд┐рд╢реЗрд╖ OR), xnor (рд╡рд┐рд╢реЗрд╖ OR-NOT), buf (рдмрдлрд░ рддрддреНрд╡) , рдирд╣реАрдВ (рдирд┐рд╖реЗрдз, рдирд╣реАрдВ)ред

рд╡реЗрд░рд┐рд▓реЙрдЧ рдореЗрдВ, рд╡рд╛рд▓реНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рддрддреНрд╡ рдХреЗ рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд╕рд╛рде рд╣реА (рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ) рд╡рд╛рд▓реНрд╡ рдХрд╛ рдирд╛рдоред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдФрд░ рдФрд░ рд╡рд╛рд▓реНрд╡реЛрдВ рдореЗрдВ рдПрдХ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рджреЛ рдпрд╛ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдЗрдирдкреБрдЯ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рддреЛ, рди рддреЛ рд╡рд╛рд▓реНрд╡ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ
рди рддреЛ рдирд╛рдо list_of_ рддрд░реНрдХ
рди рддреЛ рдордпреВрд░ (рдмрд╛рд╣рд░, in0, in1, in2, in3);




рддреАрди рдЯреАрдореЗрдВ рдЬреЛрдбрд╝реЗрдВ

1. рдбреЗрдЯрд╛_рдЖрдЙрдЯ рдЖрдЙрдЯрдкреБрдЯ рдбрд┐рд╡рд╛рдЗрд╕ рдореЗрдВ рдмреИрдЯрд░реА рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд▓реЛрдб рдХрд░рдирд╛
2. рдкрддрд╛ рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдЕрдЧрд░ рдЭрдВрдбрд╛ тАЬрд╢реВрдиреНрдптАЭ рдмрдврд╝рд╛ рд╣реБрдЖ рд╣реИ ( JMP рдЕрдЧрд░ Acc = 0)
3. рдкрддрд╛ рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рд▓реЛрдб рдХрд░рдирд╛ рдЕрдЧрд░ рдЭрдВрдбрд╛ "рд╢реВрдиреНрдп рдпрд╛ рдПрдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛" рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ( рдЬреЗрдПрдордкреА рдЕрдЧрд░ Acc > = 0)

 module R3 #(parameter ADDR_WIDTH = 2, DATA_WIDTH = 4) ( input timer555, RAM_button, input JMP, Z_JMP, PZ_JMP, input [1:0] MUX_switch, input Acc_button, input Output_button, input [3:0] data_in, output [3:0] Acc, output [3:0] data_out, output [DATA_WIDTH-1:0] RAM, output Z_flag, PZ_flag, output reg [1:0] counter ); wire [1:0] branch_adr; assign branch_adr = data_in[1:0]; wire Z,PZ; assign Z = Z_flag & Z_JMP; assign PZ = PZ_flag & PZ_JMP; //Counter always @(posedge timer555) begin if(JMP|Z|PZ) counter <= branch_adr; else counter <= counter + 1; end wire [ADDR_WIDTH-1:0] adr; assign adr = counter; //RAM reg [DATA_WIDTH-1:0] mem [2**ADDR_WIDTH-1:0]; always @(posedge RAM_button) mem [adr] <= Acc; assign RAM = mem[adr]; //sum wire [3:0] sum; assign sum = Acc + RAM; //subtract wire [3:0] subtract; assign subtract = Acc - RAM; //MUX reg [3:0] MUX4; always @* MUX4 = MUX_switch[1] ? (MUX_switch[0] ? RAM : subtract) : (MUX_switch[0] ? sum : data_in); register4 Acc_reg( .reg_data(MUX4), .reg_clk(Acc_button), .q(Acc) ); register4 Output_reg( .reg_data(Acc), .reg_clk(Output_button), .q(data_out) ); assign Z_flag = ~(|Acc); assign PZ_flag = ~Acc[3]; endmodule 



рд╣рдо рдПрдХ рд░реИрдо / рд░реИрдо рдФрд░ рджреВрд╕рд░реЗ рдореЗрдВ рдХрдорд╛рдВрдб рдФрд░ рдПрдбреНрд░реЗрд╕ рдбрд╛рд▓рддреЗ рд╣реИрдВред



рдпреЛрдЬрдирд╛ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдкрд╣рд▓реЗ рдЖрда рдЕрдВрдХреЛрдВ рдореЗрдВ, рдХрдорд╛рдВрдб рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реЛрддреЗ рд╣реИрдВ, рдЕрдВрддрд┐рдо рдЪрд╛рд░ рдЕрдВрдХреЛрдВ рдореЗрдВ рдкрддрд╛ рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рд▓реЛрдб рд╣реЛрддрд╛ рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдШрдбрд╝реА рдХреА рдХреНрд╖рдп рдХреЗ рдЕрдиреБрд╕рд╛рд░, MUX рдорд▓реНрдЯреАрдкреНрд▓реЗрдХреНрд╕ ( ADD , SUB , LDA рдХрдорд╛рдВрдбреНрд╕ рдХреЗ рд▓рд┐рдП) рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж Ass рдмреИрдЯрд░реА рдореЗрдВ рдПрдХ рдирдВрдмрд░ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдорд╛рд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдореЗрдВ рдирд┐рдореНрди рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдо

48x - рдПрдбреАрдбреА рд░реИрдо рд╕реЗ рдЕрд╕ рддрдХ рдПрдХ рдирдВрдмрд░ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ
50x - рдПрд╕рдпреВрдмреА рдПрд╕рдИ рд╕реЗ рд░реИрдо рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдШрдЯрд╛рддреЗ рд╣реИрдВ
80x - рдПрд╕рдЯреАрдП рдкрддрд╛ рдПрдХреНрд╕ рдкрд░ рдмреИрдЯрд░реА рдЧрдзреЗ рд╕реЗ рд░реИрдо рддрдХ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ
58x - LDA Ass рдореЗрдВ рдкрддрд╛ x рд╕реЗ рдПрдХ рд╕рдВрдЦреНрдпрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
04x - рдкрддрд╛ рдПрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕реЗрд▓ рдореЗрдВ рдмреАрдЖрд░ рдмрд┐рдирд╛ рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг
02x - рдкрддрд╛ x рдХреЗ рд╕рд╛рде рд╕реЗрд▓ рдореЗрдВ BRZ рд╕рдВрдХреНрд░рдордг, рдЕрдЧрд░ Ass = 0 (рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг)
01x - рдкрддрд╛ x рдХреЗ рд╕рд╛рде рд╕реЗрд▓ рдореЗрдВ рдмреАрдЖрд░рдкреА рд╕рдВрдХреНрд░рдордг, рдЕрдЧрд░ рдЧрдзрд╛> = 0 (рд╕рд╢рд░реНрдд рд╕рдВрдХреНрд░рдордг)
40x - INP Ass рдореЗрдВ data_input рд╕реЗ рдПрдХ рдирдВрдмрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ
20x - OUT рд╕рдВрдЦреНрдпрд╛ рдХреЛ Ass рд╕реЗ data_out рдкрд░ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдЪрдПрд▓рдЯреА рдЯреАрдо рдирд╣реАрдВ рд╣реЛрдЧреАред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрдЯ http://peterhigginson.co.uk/LMC/ рд╕реЗ рдЕрдзрд┐рдХрддрдо рджреЛ рдирдВрдмрд░ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд▓реЗрдВред

рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рд╣рдо рдбреЗрдЯрд╛ рдореЗрдореЛрд░реА рдореЗрдВ data_in рд╕реЗ рджреЛ рдирдВрдмрд░ рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВред рджреВрд╕рд░реЗ рдирдВрдмрд░ рд╕реЗ рдкрд╣рд▓реА рдШрдЯрд╛рдПрдБ:

  • рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рдирдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ Ass рдореЗрдВ рдкрд╣рд▓рд╛ рдирдВрдмрд░ рд▓рд┐рдЦреЗрдВ, Ass рд╕реЗ рдирдВрдмрд░ рд▓рд┐рдЦреЗрдВ data_out рдореЗрдВ;
  • рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИ, рддреЛ Ass рдореЗрдВ рджреВрд╕рд░рд╛ рдирдВрдмрд░ рд▓рд┐рдЦреЗрдВ, Ass рд╕реЗ рдирдВрдмрд░ рдХреЛ data_out рдореЗрдВ рд▓рд┐рдЦреЗрдВред

00 INP
01 STA 11
02 INP
03 STA 12
04 SUB 11
05 BRP 08
06 LDA 11
07 BRA 09
08 LDA 12
09 OUT


рд╣рдорд╛рд░реЗ рдХрдорд╛рдВрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдпрд╣ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛

400
80b
400
80c
50b
018
58b
049
58c
200



рдХрд╛рдЙрдВрдЯрд░ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдХрд╛рдЙрдВрдЯрд░ рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдЗрдирдкреБрдЯ рдкрд░ рддрддреНрд╡ рд▓реЙрдЬрд┐рдо рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреА рдРрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ , рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ, рдирд┐рдпрдВрддреНрд░рдг рдЗрдирдкреБрдЯ рдкрд░ рддрддреНрд╡ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореБрдЭреЗ рдРрд╕реЗ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд╣реИ)ред

рдХреНрд╡рд╛рд░реНрдЯрд╕ II рдХреЛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдорд╛рдИ рдкреНрд░рд╛рдЗрдорд░реА рдЬреЙрдм рдлрдВрдХреНрд╢рди рдХреЗ рддрд╣рдд рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп *, рдЫрд╛рддреНрд░ рдЪреБрдиреЗрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ (usb-blaster рдХреЗ рд▓рд┐рдП рдбреНрд░рд╛рдЗрд╡рд░ C: \ altera \ ... \ quartus \ рдбреНрд░рд╛рдЗрд╡рд░ \ usb-blaster) рд╕реЗ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

Logisim рдХреЛ рдпрд╣рд╛рдБ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

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


All Articles