Я пытаюсь заставить мою светодиодную панель (светодиоды 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 контактных контакта.

1
Eluv 16 Сен 2018 в 22:30

2 ответа

Лучший ответ

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

0
Eluv 13 Дек 2018 в 09:22

Во-первых, вам не очень понятно, как работает FPGA. Первый фрагмент кода не подходит, initial begin <> end указывает только на запуск всего процесса. После инициализации ничего не делает.

Второй фрагмент кода использует стиль Machine Status и довольно хорошо определен здесь. Но есть небольшая ошибка

01: begin
        {A,B,C}<=3'b001;
        {R1,G1,B1}<=3'b101;
        {R2,G2,B2}<=3'b110;
        state<=state=1;
        end

Вы можете видеть строку state<=state=1, ясно, что проблема возникла в этой строке кода

0
Dang Nguyen 1 Окт 2018 в 10:26