zzZ 去年11月提问 时序分析
0
req具体啥时候取反


是不是要等tx_ready为高的下一个时钟上升沿,当tx_valid为高的时候req才取反?如果是的话图里代码只有"tx_valid==1"这一个条件,是不是还缺了"上个时钟沿tx_ready==1"这一个条件

被浏览 :  437
收起
( 0 ) 评论
王莎 去年11月回复
0

always @*
case (req_cs)
IDLE: if(tx_valid) begin
req_ns = VALID;
end
else begin
req_ns = IDLE;
end
VALID: req_ns = HOLD;
HOLD: if (tx_ready) begin
req_ns = DONE;
end
else begin
req_ns = HOLD;
end
DONE: if (tx_valid) begin
req_ns = VALID;
end
else begin
req_ns = IDLE;
end

default: req_ns = IDLE;
endcase

always @(posedge tx_clk or negedge tx_rstn) begin
if (~tx_rstn) begin
req <= 1'b0;
end
else if (req_ns == VALID) begin
req <= ~req;
end

end
always @(posedge tx_clk or negedge tx_rstn) begin
if (~tx_rstn) begin
req_sync3 <= 1'b0;
end
else begin
ack_sync3 <= ack_sync2;
end

end

assign ack_pulse = ack_sync2 ^ ack_sync3;
assign tx_ready = ack_pulse;

贴出了一部分handshak代码:
    tx_ready assert的条件是:检测到ack_sync2 的跳变沿
    req 翻转条件可以通过状态机来控制,状态机状态跳转会参考到tx_valid 以及 tx_ready 是否assert

希望可以帮到你~

添加评论
我的答案
提交答案