Подход к дизайну действительного / готового рукопожатия - PullRequest
0 голосов
/ 01 марта 2019

Я реализовал действительные / готовые сигналы рукопожатия в 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

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

1 Ответ

0 голосов
/ 06 марта 2019

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

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

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

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

Вот и все ...

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

...