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