Подход к дизайну действительного / готового рукопожатия

Я реализовал действительные / готовые сигналы рукопожатия в Verilog. Я просто хотел знать, правильный ли мой подход или что-то не так. Я буду рад узнать о любом улучшении. Простой счетчик используется в качестве входа для fifo. Таким образом, когда fifo почти заполнен, что объявляется, когда используемое слово fifo равно 8 (8 стеков fifo используются из 16), ready равен нулю.

Вот код

module fifohandshake(
input CLK,
input RST,
input [31:0] INPUT,
output [31:0] OUTDATA,
output [3:0] usedword,
output Writereq,
input RDReq,
output Almost_full,
output EMPty,
output FUlL,
output VALID,
output READY
);

reg valid;
reg ready;
reg WRReq;

assign VALID=valid;
assign READY=ready;
assign Writereq=WRReq;

fifoip u0(
    .clock(CLK),
    .data(INPUT),
    .rdreq(RDReq),
    .sclr(RST),
    .wrreq(WRReq),
    .almost_full(Almost_full),
    .empty(EMPty),
    .full(FUlL),
    .q(OUTDATA),
    .usedw(usedword)
);


always @(posedge CLK)
    begin
            if(INPUT)
                begin
                    valid<=1;
                end
            else
                begin
                    valid<=0;
                end
    end

always @(posedge CLK)
    begin
        if(Almost_full)
            begin
                ready<=0;
            end
        else
            begin
                ready<=1;
            end
    end

always @(posedge CLK)
    begin
        if(ready)
            begin
                WRReq<=1;
            end
        else
            begin
                WRReq<=0;
            end
    end
endmodule

Я сделал это правильно или мне нужно что-то исправить? Вот результаты формы сигнала. введите описание изображения здесь

0 ответов

Для тех, кто считает, что я не приложил достаточных усилий в своем исследовании. Конечный автомат - хороший подход для реализации готового / действующего протокола рукопожатия. Необходимо учитывать несколько моментов.

Действительный сигнал не зависит от сигнала готовности. Другими словами, не должно быть комбинационного цикла, если вы отслеживаете свою логическую схему от действительного до готового сигнала.

Три основных состояния могут быть определены для действительного / готового протокола. Первое состояние идола, в котором нет действительных данных, даже если ведомое устройство готово принять данные. Затем, состояние передачи, где и готовые и действительные сигналы высоки. И третье состояние - это состояние ожидания, когда у нас есть действительный сигнал высокого уровня, а сигнал готовности низкий.

Буфер (fifo или простой регистр) должен использоваться в состоянии ожидания для буферизации действительных данных в случае, если ведомый не готов. Следовательно, данные не теряются и все еще находятся на линии данных, когда ведомое устройство снова готово.

Это оно....

Это была помощь, которую я пытался попросить у сообщества, но последние пару дней, когда я публикую что-то, кто-то намеренно помечает мой вопрос как -1. Я надеюсь не испытать это в следующий раз...

Другие вопросы по тегам