Светодиодная панель не работает с постоянными значениями адреса и цвета - PullRequest
0 голосов
/ 16 сентября 2018

Я пытаюсь заставить мою светодиодную панель (светодиоды 20x40 с режимом сканирования 1/5) работать на Spartan-6. Я написал простой код, в котором я назначаю SCLK внутреннему тактовому сигналу clk 1 МГц, 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 светодиодных столбцах и соответствуют значениям в состоянии 0.

Я не понимаю, почему это происходит, пожалуйста, помогите.

Кроме того, я не могу угадать адрес для одной строки. Горит строка на 000,001,010,100 адресах, но остальные адреса не работают. (Я меняю их в состоянии 04). У меня только 3 адресных контакта.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Основная проблема заключалась в том, что в панель встроен таймер, который отключает всю панель, если я не изменяю комбинацию адресов в течение 50 мс. Вот почему панель не работает с постоянными значениями адресов. Вторая проблема была в том, что я не правильно понял синхронизацию данных и адресов. Вот почему у меня есть проблемы со столбцами. И, наконец, я просто не пробовал все комбинации адресов, хотя думал, что сделал это :) Надеюсь, мой опыт кому-нибудь поможет.

0 голосов
/ 01 октября 2018

Прежде всего, вы, кажется, не очень понимаете, как работает 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 ясно, что проблема исходит от этой строки кода

...