vezerlo_logika vezerlo(
.CLK(clk),
.CY(cy_tizesek),
.btn_reset(BTN[5:5]),
.btn_pausego(btn4_ref),
.btn_start(BTN[3:3]),
.szamlal(status),
.EN(coun_en)
);
--------------------------------------------------------------------------------------------
module vezerlo_logika(CLK, CY, btn_reset, btn_pausego, btn_start, szamlal, EN, led1, led8);
input CLK;
input CY; //carry a számláló leállásáról
input btn_reset;
input btn_pausego;
input btn_start;
output reg [1:0] szamlal; //értéke 0 alapállapotban, 1, ha folyamatban van a számlálás, 2, ha pause-t kapott
//és 3, ha befejeződött.
//LED8 világít, ha az érték 0; LED1 világít, ha az érték 1 vagy 2. ha az érték 3, egyik sem világít.
output reg EN; //vezérli az egyes helyiértékű számlálót.
output reg led1;
output reg led8;
always @ (posedge CLK)
begin
if (btn_reset == 1'b1) begin //reset. a specifikáció szerint alapállapotba viszi, márpedig alapállapotban nem számol.
szamlal <= 2'd0;
EN <= 0;
end //s0
if (btn_pausego == 1'b1 && szamlal == 2'd1) begin //pause.
szamlal <= 2'd2;
EN <= 0;
end //s2
if (btn_pausego == 1'b1 && szamlal == 2'd2) begin //continue.
szamlal <= 2'd1;
EN <= 1;
end //s2-ből s1-be vissza
if (btn_start == 1'b1 && szamlal == 2'd0) begin //start. ha már nem alapállapotban van, nem csinál semmit.
szamlal <= 2'd1;
EN <= 1;
end //s1
if (CY == 1'b1) begin //a számlálás befejeződött
szamlal <= 2'd3;
EN <= 0;
end //s3
end
//állapotgép. s0 -> START button -> s1, -> pause button -> s2, -> pause button -> s1, lefut -> s3, reset button -> s0
endmodule
--------------------------------------------------------------------------------------
assign LD1 = ( status[1] ^ status[0] );
assign LD8 = ( !(status[1] && status[0]) );
//mindkettő wire típus.