-1

我已经在 verilog 中实现了有效/就绪的握手信号。我只是想知道我的方法是对还是错。我很高兴知道任何改进。一个简单的计数器用作 fifo 的输入。因此,当 fifo 的使用字为 8 时声明的 fifo 几乎已满(16 个中使用了 8 个 fifo 堆栈),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

我是否以正确的方式完成了它,或者我需要纠正什么?这是波形结果。 在此处输入图像描述

4

1 回答 1

0

对于那些认为我没有在研究中付出足够努力的人。有限状态机是实现就绪/有效握手协议的好方法。有几点需要牢记

有效信号不依赖于就绪信号。换句话说,如果您将逻辑电路从有效信号跟踪到就绪信号,则不应该存在组合循环。

可以为有效/就绪协议定义三种基本状态。第一个偶像状态,即使从设备准备好接受数据,也没有有效数据。然后,就绪和有效信号都为高电平的传输状态。第三种状态是等待状态,有效信号为高电平但就绪信号为低电平。

在等待状态下必须使用缓冲区(fifo 或简单寄存器)来缓冲有效数据,以防从机未准备好。因此,只要从设备再次准备好,数据就不会丢失并且仍然在数据线上。

而已....

这是我试图从社区寻求的帮助,但从最近几天开始,每当我发布某些内容时,有人故意将我的问题标记为 -1。希望下次不要再体验了。。。

于 2019-03-06T08:45:07.800 回答