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.