You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
1.7 KiB
Verilog

module test_lm(
input wire sys_clk, // U18
input wire sys_rst, //J15
output wire o1, o2, o3, o4, o5, o6, o7, o8, o16,o15,o14,o13,o12,o11,o10,o9
);
reg [2:0]Y_IDX = 3'b000; // 逐行显示, 当前第几行了, 一共8行
reg [25:0] CNT;
always @(posedge sys_clk or negedge sys_rst) begin
if (sys_rst == 1'b0) begin
CNT <= 25'd0;
end
else if (CNT < (25'd25000000 - 25'd1)) begin
CNT <= CNT + 25'd1;
end
else begin
CNT <= 25'b0;
end
end
parameter show_data = 64'b10000000_01000000_00100000_00010000_00001000_00000100_00000010_00000001;
reg [7:0]x = 8'b1010_1100;
always @(posedge sys_clk or negedge sys_rst) begin
if (sys_rst == 1'b0) begin
x <= 8'b0000_0000; //不通电了
end
else if (CNT == (25'd25000000 - 25'd1)) begin
// 推进状态, 选择一行x
x <= show_data[(Y_IDX * 8)+:8];
end
else begin
end
end
reg [7:0]y = 8'b1111_1111;
always @(posedge sys_clk or negedge sys_rst) begin
if (sys_rst == 1'b0) begin
y <= 8'b1111_1111; // x已经变成0了, 这里防止二极管接反, 就继续片选即可 内部低电平
Y_IDX <= 3'b000;
end
else if (CNT == (25'd25000000 - 25'd1)) begin
// 推进状态
case (&y)
1'b1: y <= 8'b0000_0001;
default y <= {y[6:0], y[7]};
endcase
Y_IDX <= Y_IDX + 3'b1;
end
else begin
end
end
lm u_lm(
.x (x),
.y (y),
.o1 (o1),
.o2 (o2),
.o3 (o3),
.o4 (o4),
.o5 (o5),
.o6 (o6),
.o7 (o7),
.o8 (o8),
.o9 (o9),
.o10 (o10),
.o11 (o11),
.o12 (o12),
.o13 (o13),
.o14 (o14),
.o15 (o15),
.o16 (o16)
);
endmodule