verilog 关于read握手打拍

针对1bit信号进行打拍,直接使用寄存器打拍;针对带ready握手的信号打拍,我们通常采用同步FIFO处理,故针对ready握手打1拍其实就是使用FIFO为1的逻辑实现,为了优化资源,我们可以删除FIFO中的指针处理,寄存器存储以及寄存器等资源,优化打拍资源。

verilog 代码

module ready_handshake(input  wire  				clk,input  wire 				rst_n,input  wire 				push_valid,input  wire [WIDTH -1:0] 	push_data,output wire 				push_ready,output reg				pop_valid,output reg  [WIDTH -1:0] 	pop_data,input  wire 				pop_ready
);reg 					write_en;	//write enable
reg 					read_en;	//read enableassign push_ready 	= ~push_full; 
assign write_en 	= push_valid & push_ready;assign pop_valid    = push_full;
assign read_en      = pop_valid & pop_ready;always @(posedge clk or negedge rst_n) beginif(~rst_n)pop_data <= 'd0;else if(write_en)pop_data <= push_data;
end
always @(posedge clk or negedge rst_n) beginif(~rst_n) push_full <= 1'b0;else if(write_en)push_full <= 1'b1; else if(read_en)push_full <= 1'b0;
endendmodule

由代码可知,由于该逻辑深度为1,故写入数据即满,读出数据即空.


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部