Verilog 有效/就绪握手的设计方法

Verilog 有效/就绪握手的设计方法,verilog,fifo,hdl,handshake,handshaking,Verilog,Fifo,Hdl,Handshake,Handshaking,我已经在verilog中实现了有效/准备好的握手信号。我只是想知道我的方法是对的还是错的。我很高兴知道有什么改进。 一个简单的计数器用作fifo的输入。所以,当fifo几乎满时,即当fifo的已用字为8时(16个fifo中使用了8个fifo堆栈),ready为零 这是代码 module fifohandshake( input CLK, input RST, input [31:0] INPUT, output [31:0] OUTDATA, output [3:0] usedword, out

我已经在verilog中实现了有效/准备好的握手信号。我只是想知道我的方法是对的还是错的。我很高兴知道有什么改进。 一个简单的计数器用作fifo的输入。所以,当fifo几乎满时,即当fifo的已用字为8时(16个fifo中使用了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
模块fifohandshake(
输入时钟,
输入RST,
输入[31:0]输入,
输出[31:0]输出数据,
输出[3:0]用词,
输出Writereq,
输入RDReq,
产量几乎满了,
输出为空,
输出满,
输出有效,
输出就绪
);
注册有效;
reg就绪;
reg WRReq;
分配有效=有效;
分配就绪=就绪;
分配Writereq=WRReq;
fifoip u0(
.时钟(时钟),
.数据(输入),
.rdreq(rdreq),
.sclr(RST),
.wrreq(wrreq),
.快满了(快满了),
.空(空),
.满(满),
.q(输出数据),
.usedw(usedword)
);
始终@(posedge CLK)
开始
如果(输入)
开始

对于那些认为我没有在研究中投入足够努力的人来说,这是有效的。有限状态机是实现就绪/有效握手协议的好方法。必须记住几点

有效信号不取决于就绪信号。换句话说,若你们从有效信号到就绪信号跟踪你们的逻辑电路,就不应该有一个组合回路

valid/ready协议可以定义三种基本状态。第一个idol状态,即使从机准备接受数据,也没有有效数据。然后,一种传输状态,其中就绪信号和有效信号均为高电平。第三种状态是等待状态,有效信号为高,准备信号为低

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

就这样

这是我试图从社区寻求的帮助,但在过去几天,每当我发布一些东西时,有人故意将我的问题标记为-1。我希望下次不要再经历了