设计有效/现成的握手的方法



我已经在Verilog中实现了有效/就绪的握手信号。我只是想知道我的方法是正确的还是有问题的。我将很高兴知道任何进步。简单的计数器用作FIFO的输入。因此,当FIFO几乎完整时,当使用FIFO的单词为8(16中使用了8个FIFO的堆栈)时,该单词被声明为零。

这是代码。

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

我是否以正确的方式完成了此操作,或者我需要纠正某些事情吗?这是波形结果。在此处输入图像描述

对于那些认为我在研究中没有足够精力的人来说。有限状态机是实施现成/有效握手协议的好方法。几点必须牢记

有效信号不取决于准备就绪信号。换句话说,如果将逻辑电路从有效的信号跟踪,则不应有组合循环。

可以为有效/就绪协议定义三个基本状态。第一个偶像状态,即使从属可以接受数据,也没有有效数据。然后,即准备和有效信号都高的转移状态。第三个状态是等待状态,我们的有效信号很高,但就绪信号很低。

在等待状态中,必须使用缓冲区(FIFO或简单寄存器)来缓冲有效数据,以防从设备准备就绪。因此,每当从属准备就绪时,数据不会丢失,并且仍在数据线上。

就是这样。

这是我试图向社区提出的帮助,但是从最近几天开始,每当我发布某人故意标记我的问题为-1时。我希望下次不要体验...

相关内容

  • 没有找到相关文章

最新更新