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 毫秒内不更改地址组合,它会关闭整个面板。这就是面板不能使用常量地址值的原因。 第二个问题是我没有正确理解数据和地址同步。这就是为什么我对列有疑问。 最后,我只是没有尝试所有地址组合,尽管我认为我做到了:) 希望我的经验可以帮助到一些人。