129 lines
3.3 KiB
Verilog
129 lines
3.3 KiB
Verilog
/*
|
|
* Copyright (c) 2024 Yannick Reiß
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
`define default_netname none
|
|
|
|
module tt_um_yannickreiss_lights_out (
|
|
input wire [7:0] ui_in, // Dedicated inputs
|
|
output wire [7:0] uo_out, // Dedicated outputs
|
|
input wire [7:0] uio_in, // IOs: Input path
|
|
output wire [7:0] uio_out, // IOs: Output path
|
|
output wire [7:0] uio_oe, // IOs: Enable path (active high: 0=input, 1=output)
|
|
input wire ena, // will go high when the design is enabled
|
|
input wire clk, // clock
|
|
input wire rst_n // reset_n - low to reset
|
|
);
|
|
|
|
// All output pins must be assigned. If not used, assign to 0.
|
|
assign uio_oe = 8'b00000010;
|
|
|
|
// Matrix (input)
|
|
wire [8:0] buttons = ui_in[7:0] & uio_in[0];
|
|
|
|
// Matrix (current field)
|
|
reg field1;
|
|
reg field2;
|
|
reg field3;
|
|
reg field4;
|
|
reg field5;
|
|
reg field6;
|
|
reg field7;
|
|
reg field8;
|
|
reg field9;
|
|
|
|
// Matrix (output)
|
|
assign uo_out[0] = field1;
|
|
assign uo_out[1] = field2;
|
|
assign uo_out[2] = field3;
|
|
assign uo_out[3] = field4;
|
|
assign uo_out[4] = field5;
|
|
assign uo_out[5] = field6;
|
|
assign uo_out[6] = field7;
|
|
assign uo_out[7] = field8;
|
|
assign uio_out[0] = field9;
|
|
|
|
// uio_out map to zero
|
|
assign uio_out[7:1] = 7'b0;
|
|
|
|
always @(posedge clk) begin
|
|
if (ena == 1'b1) begin
|
|
if (rst_n == 1'b1) begin
|
|
|
|
// Do act normal
|
|
case ( buttons )
|
|
9'b000000001: begin
|
|
field1 <= !field1;
|
|
field2 <= !field2;
|
|
field4 <= !field4;
|
|
end
|
|
9'b000000010: begin
|
|
field1 <= !field1;
|
|
field2 <= !field2;
|
|
field3 <= !field3;
|
|
field5 <= !field5;
|
|
end
|
|
9'b000000100: begin
|
|
field2 <= !field2;
|
|
field3 <= !field3;
|
|
field6 <= !field6;
|
|
end
|
|
9'b000001000: begin
|
|
field1 <= !field1;
|
|
field4 <= !field4;
|
|
field5 <= !field5;
|
|
field7 <= !field7;
|
|
end
|
|
9'b000010000: begin
|
|
field2 <= !field2;
|
|
field4 <= !field4;
|
|
field5 <= !field5;
|
|
field6 <= !field6;
|
|
field8 <= !field8;
|
|
end
|
|
9'b000100000: begin
|
|
field3 <= !field3;
|
|
field5 <= !field5;
|
|
field6 <= !field6;
|
|
field9 <= !field9;
|
|
end
|
|
9'b001000000: begin
|
|
field4 <= !field4;
|
|
field7 <= !field7;
|
|
field8 <= !field8;
|
|
end
|
|
9'b010000000: begin
|
|
field5 <= !field5;
|
|
field7 <= !field7;
|
|
field8 <= !field8;
|
|
field9 <= !field9;
|
|
end
|
|
9'b100000000: begin
|
|
field6 <= !field6;
|
|
field8 <= !field8;
|
|
field9 <= !field9;
|
|
end
|
|
default: begin
|
|
|
|
end
|
|
endcase
|
|
end
|
|
else begin
|
|
|
|
// set new matrix in a pseudo random way
|
|
field1 <= 1'b0;
|
|
field2 <= 1'b0;
|
|
field3 <= 1'b0;
|
|
field4 <= 1'b0;
|
|
field5 <= 1'b1;
|
|
field6 <= 1'b0;
|
|
field7 <= 1'b0;
|
|
field8 <= 1'b0;
|
|
field9 <= 1'b0;
|
|
end
|
|
end
|
|
end
|
|
|
|
endmodule
|