张槎网站建设制作,企业模板免费下载,郑州厉害的seo顾问公司,wordpress说明文档交接数据累加输出
题目描述 实现串行输入数据累加输出#xff0c;输入端输入8bit数据#xff0c;每当模块接收到4个输入数据后#xff0c;输出端输出4个接收到数据的累加结果。输入端和输出端与上下游的交互采用valid-ready双向握手机制。要求上下游均能满速传输时#xff0c;…数据累加输出
题目描述 实现串行输入数据累加输出输入端输入8bit数据每当模块接收到4个输入数据后输出端输出4个接收到数据的累加结果。输入端和输出端与上下游的交互采用valid-ready双向握手机制。要求上下游均能满速传输时数据传输无气泡不能由于本模块的设计原因产生额外的性能损失。
电路的接口如下图所示。valid_a用来指示数据输入data_in的有效性valid_b用来指示数据输出data_out的有效性ready_a用来指示本模块是否准备好接收上游数据ready_b表示下游是否准备好接收本模块的输出数据clk是时钟信号rst_n是异步复位信号。
timescale 1ns/1nsmodule valid_ready(input clk , input rst_n ,input [7:0] data_in ,input valid_a ,input ready_b ,output ready_a ,output reg valid_b ,output reg [9:0] data_out
);reg [1:0] cnt;always(posedge clk or negedge rst_n)beginif(!rst_n)cnt 1b0;else if(valid_a 1b1 ready_a 1b1)cnt cnt 1b1;elsecnt 1b0; endalways(posedge clk or negedge rst_n)beginif(!rst_n)valid_b 1b0;else if(cnt 2d3 valid_a 1b1 ready_a 1b1)valid_b 1b1;else if(cnt 2d0 valid_a 1b1 ready_a 1b1 ready_b 1b1)valid_b 1b0;end//同时为高或同时为低时考虑组合逻辑assign ready_a !valid_b | ready_b;always(posedge clk or negedge rst_n)beginif(!rst_n)data_out 10b0;else if(cnt 2d0 valid_a 1b1 ready_a 1b1 ready_b 1b1)//表示导入第一个数data_out data_in;else if(valid_a 1b1 ready_a)//表示啥时加data_out data_out data_in;endendmodule