Led 面板不适用于固定地址和颜色值
Led panel doesn't work with constant address and color values
我尝试让我的 LED 面板(20x40 LED,1/5 扫描模式)在 Spartan-6 上工作。我编写了简单的代码,其中我将 SCLK 分配给内部时钟信号 clk 1MHz,LCLK 分配给 ~clk,地址 ABC 和颜色 RGB 引脚分配给一些常数值。
module main(
output reg A,B,C,R1,G1,B1,R2,G2,B2,CS,
output wire S,L,OE,
input clk
);
initial
begin
CS<=1;
{A,B,C}<=3'b001;
{R1,G1,B1}<=3'b001;
{R2,G2
end
assign OE=0;
assign S=clk;
assign L=~clk;
endmodule
然后我得到了黑色面板。但是如果我加载这段代码
module main(
output reg A,B,C,R1,G1,B1,R2,G2,B2,CS,
output wire S,L,OE,
input clk
);
reg [3:0] state;
initial
begin
state<=0;
CS<=1;
end
assign OE=0;
always @(posedge clk)
begin
case (state)
00: begin
{A,B,C}<=3'b000;
{R1,G1,B1}<=3'b001;
{R2,G2,B2}<=3'b010;
state<=state+1;
end
01: begin
{A,B,C}<=3'b001;
{R1,G1,B1}<=3'b101;
{R2,G2,B2}<=3'b110;
state<=state=1;
end
02: begin
{A,B,C}<=3'b010;
{R1,G1,B1}<=3'b100;
{R2,G2,B2}<=3'b011;
state<=state+1;
end
03: begin
{A,B,C}<=3'b100;
{R1,G1,B1}<=3'b011;
{R2,G2,B2}<=3'b010;
state<=state+1;
end
04: begin
{A,B,C}<=3'b101;
{R1,G1,B1}<=3'b111;
{R2,G2,B2}<=3'b010;
state<=0;
end
endcase
end
assign S=clk;
assign L=~clk;
endmodule
尽管此代码有效,但所有 5 个 LED 列的颜色都相同,并且对应于状态 0
中的值。
我不明白为什么会这样,请帮忙。
此外,我猜不到一行的地址。 000,001,010,100
地址上的行亮起,但其余地址不起作用。 (我正在状态 04 中更改它们)。我只有 3 个地址引脚。
首先,您好像不太清楚FPGA是如何工作的。
第一个代码片段不好,initial begin <> end
只具体说明了整个过程的启动。初始后,它什么都不做。
第二个代码片段使用机器状态样式,此处定义得很好。不过有个小错误
01: begin
{A,B,C}<=3'b001;
{R1,G1,B1}<=3'b101;
{R2,G2,B2}<=3'b110;
state<=state=1;
end
您可以看到 state<=state=1
行,很明显问题出在这行代码
主要问题是面板有嵌入式计时器,如果我在 50 毫秒内不更改地址组合,它会关闭整个面板。这就是面板不能使用常量地址值的原因。
第二个问题是我没有正确理解数据和地址同步。这就是为什么我对列有疑问。
最后,我只是没有尝试所有地址组合,尽管我认为我做到了:)
希望我的经验可以帮助到一些人。
我尝试让我的 LED 面板(20x40 LED,1/5 扫描模式)在 Spartan-6 上工作。我编写了简单的代码,其中我将 SCLK 分配给内部时钟信号 clk 1MHz,LCLK 分配给 ~clk,地址 ABC 和颜色 RGB 引脚分配给一些常数值。
module main(
output reg A,B,C,R1,G1,B1,R2,G2,B2,CS,
output wire S,L,OE,
input clk
);
initial
begin
CS<=1;
{A,B,C}<=3'b001;
{R1,G1,B1}<=3'b001;
{R2,G2
end
assign OE=0;
assign S=clk;
assign L=~clk;
endmodule
然后我得到了黑色面板。但是如果我加载这段代码
module main(
output reg A,B,C,R1,G1,B1,R2,G2,B2,CS,
output wire S,L,OE,
input clk
);
reg [3:0] state;
initial
begin
state<=0;
CS<=1;
end
assign OE=0;
always @(posedge clk)
begin
case (state)
00: begin
{A,B,C}<=3'b000;
{R1,G1,B1}<=3'b001;
{R2,G2,B2}<=3'b010;
state<=state+1;
end
01: begin
{A,B,C}<=3'b001;
{R1,G1,B1}<=3'b101;
{R2,G2,B2}<=3'b110;
state<=state=1;
end
02: begin
{A,B,C}<=3'b010;
{R1,G1,B1}<=3'b100;
{R2,G2,B2}<=3'b011;
state<=state+1;
end
03: begin
{A,B,C}<=3'b100;
{R1,G1,B1}<=3'b011;
{R2,G2,B2}<=3'b010;
state<=state+1;
end
04: begin
{A,B,C}<=3'b101;
{R1,G1,B1}<=3'b111;
{R2,G2,B2}<=3'b010;
state<=0;
end
endcase
end
assign S=clk;
assign L=~clk;
endmodule
尽管此代码有效,但所有 5 个 LED 列的颜色都相同,并且对应于状态 0
中的值。
我不明白为什么会这样,请帮忙。
此外,我猜不到一行的地址。 000,001,010,100
地址上的行亮起,但其余地址不起作用。 (我正在状态 04 中更改它们)。我只有 3 个地址引脚。
首先,您好像不太清楚FPGA是如何工作的。
第一个代码片段不好,initial begin <> end
只具体说明了整个过程的启动。初始后,它什么都不做。
第二个代码片段使用机器状态样式,此处定义得很好。不过有个小错误
01: begin
{A,B,C}<=3'b001;
{R1,G1,B1}<=3'b101;
{R2,G2,B2}<=3'b110;
state<=state=1;
end
您可以看到 state<=state=1
行,很明显问题出在这行代码
主要问题是面板有嵌入式计时器,如果我在 50 毫秒内不更改地址组合,它会关闭整个面板。这就是面板不能使用常量地址值的原因。 第二个问题是我没有正确理解数据和地址同步。这就是为什么我对列有疑问。 最后,我只是没有尝试所有地址组合,尽管我认为我做到了:) 希望我的经验可以帮助到一些人。