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
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 |