首页 > 其他分享 >【Verilog-CBB】开发与验证(6)——RS打拍器

【Verilog-CBB】开发与验证(6)——RS打拍器

时间:2024-08-17 23:27:21浏览次数:11  
标签:CBB RS slv mst 拍器 valid ready data



引言

前面两篇文章分别给出了RS前向/后向打拍器的设计,分别可以优化valid和ready信号的时序。那么如果想要同时优化valid/ready时序则可以同时例化前向/后向打拍器。那么例化时谁在前谁在后呢?xilinx官网给出RS双向打拍器的结构框图,也该是后向打拍器在前,前向打拍器级联在后向打拍器之后。

本文在前两篇文章的基础上,对RS打拍器做整体的封装集成。包括如下几种工作模式:

"BYPASS":直通模式。

"FORWARD":前向模式,仅优化valid时序。

"BACKWARD":后向模式,仅优化ready时序。

"FULL":全向模式。同时优化valid ready时序。

CBB设计源码

// ==================-------------------------------------------------------=====================
//                                        在路上-正出发
//                                    Common Building Block
// ==================-------------------------------------------------------=====================

//                 ________          ________          ________                                                               
//                |\   ____\        |\   __  \        |\   __  \                                                              
//                \ \  \___|        \ \  \|\ /_       \ \  \|\ /_                                                             
//                 \ \  \            \ \   __  \       \ \   __  \                                                            
//                  \ \  \____        \ \  \|\  \       \ \  \|\  \                                                           
//                   \ \_______\       \ \_______\       \ \_______\                                                          
//                    \|_______|        \|_______|        \|_______|  

// ==================-------------------------------------------------------=====================
//                                        在路上-正出发
//                                    Common Building Block
// ==================-------------------------------------------------------=====================                                                                                                              
                                                                                                                                                                                                                                                                                                         
// CBB Module Name    :CBB_RS
// CBB Created Date   :2024-08-17
// CBB Module Function:Register Slice mode:WRAP
// Usage Limitation   :
// Author             :在路上-正出发
// -----------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------

`timescale 1ns/1ps

module  CBB_RS#(
// ---- parameter define
parameter P_RS_TYPE         = "FULL",//"BYPASS" "FORWARD" "BACKWARD" "FULL"(by default)
parameter P_DATA_WIDTH 		= 64

)(
// ---- port define 
input 						i_clk,
input 						i_rstn,

input 						slv_i_valid,
input [P_DATA_WIDTH-1:0] 	slv_i_data,
output 						slv_o_ready,

output 						mst_o_valid,
output [P_DATA_WIDTH-1:0] 	mst_o_data,
input 						mst_i_ready
);

wire 						w_valid;
wire [P_DATA_WIDTH-1:0] 	w_data;
wire						w_ready;

generate
	if(P_RS_TYPE == "BYPASS")
	begin
		assign mst_o_valid = slv_i_valid;
		assign mst_o_data  = slv_i_data;
		assign slv_o_ready = mst_i_ready;
	end
	else if(P_RS_TYPE == "FORWARD")
	begin
		CBB_RS_FORWARD #(
			.P_DATA_WIDTH(P_DATA_WIDTH)
		) U_CBB_RS_FORWARD (
			.i_clk       (i_clk),
			.i_rstn      (i_rstn),
			.slv_i_valid (slv_i_valid),
			.slv_i_data  (slv_i_data),
			.slv_o_ready (slv_o_ready),
			.mst_o_valid (mst_o_valid),
			.mst_o_data  (mst_o_data),
			.mst_i_ready (mst_i_ready)
		);
	end
	else if(P_RS_TYPE == "BACKWARD")
	begin
		CBB_RS_BACKWARD #(
			.P_DATA_WIDTH(P_DATA_WIDTH)
		) U_CBB_RS_BACKWARD (
			.i_clk       (i_clk),
			.i_rstn      (i_rstn),
			.slv_i_valid (slv_i_valid),
			.slv_i_data  (slv_i_data),
			.slv_o_ready (slv_o_ready),
			.mst_o_valid (mst_o_valid),
			.mst_o_data  (mst_o_data),
			.mst_i_ready (mst_i_ready)
		);
	end
	else
	begin
		CBB_RS_BACKWARD #(
			.P_DATA_WIDTH(P_DATA_WIDTH)
		) U_CBB_RS_BACKWARD (
			.i_clk       (i_clk),
			.i_rstn      (i_rstn),
			.slv_i_valid (slv_i_valid),
			.slv_i_data  (slv_i_data),
			.slv_o_ready (slv_o_ready),
			.mst_o_valid (w_valid),
			.mst_o_data  (w_data),
			.mst_i_ready (w_ready)
		);
		CBB_RS_FORWARD #(
			.P_DATA_WIDTH(P_DATA_WIDTH)
		) U_CBB_RS_FORWARD (
			.i_clk       (i_clk),
			.i_rstn      (i_rstn),
			.slv_i_valid (w_valid),
			.slv_i_data  (w_data),
			.slv_o_ready (w_ready),
			.mst_o_valid (mst_o_valid),
			.mst_o_data  (mst_o_data),
			.mst_i_ready (mst_i_ready)
		);
	end	
endgenerate
endmodule

CBB验证

验证源码

参考前两篇。

波形

略。

数据比对

perl脚本

参考上一篇。

CBB综合

FULL

标签:CBB,RS,slv,mst,拍器,valid,ready,data
From: https://blog.csdn.net/qq_43045275/article/details/141288302

相关文章

  • Problems in Mathematical Analysis (American First Edition)
    https://www.amazon.com/Problems-Mathematical-Analysis-Boris-Demidovich/dp/B0007BNL1W/ ProblemsinMathematicalAnalysis(AmericanFirstEdition) Reviews:https://www.amazon.com/gp/customer-reviews/R225A0UUURIG9B/ref=cm_cr_dp_d_rvw_ttl?ie=UTF8&ASI......
  • rsync备份【基于客户端与服务端】
    一、需求1、客户端客户端提前准备存放到的备份目录,目录规则如下:/backup/nfs_IP+年/月/日客户端在本地打包备份(将etc目录中所有的普通文件打包)拷贝到目标目录/backup/nfs_IP+年/月/日客户端最后将备份的数据进行推送到备份服务器中客户端每天凌晨1点定时执行该脚本客户端服......
  • ncnn operators
    operatorshttps://github.com/Tencent/ncnn/blob/master/docs/developer-guide/operators.mdAbsValArgMaxBatchNormBiasBinaryOpBNLLCastCELUClipConcatConvolutionConvolution1DConvolution3DConvolutionDepthWiseConvolutionDepthWise1DConvolutionDepth......
  • Kolmogorov-Smirnov 检验 + k 样本 Anderson-Darling 检验 + 贝叶斯估计 + 期望方差
    KS检验是基于Kolmogorovdistribution,指的是\[K=\sup_{t\in[0,1]}\left\lvertB(t)\right\rvert\]式中\(B(t)\)是布朗桥。\(K\)的累积分布函数是\[\Pr(K\lex)=1-2\sum_{k=1}^\infty(-1)^{k-1}\mathrme^{-2k^2x^2}=\frac{\sqrt{2\pi}}x\sum_{k=1}^\infty\mathrme^......
  • powershell命令 域管理: 加入域:将计算机加入指定的 Active Directory 域。 重新加入域
    PowerShell命令示例:域管理加入域:powershellCopyCodeAdd-Computer-DomainName"yourdomain.com"-Credential"yourdomain\username"-Restart重新加入域:powershellCopyCodeRemove-Computer-UnjoinDomainCredential"yourdomain\username"......
  • 【漫谈C语言和嵌入式004】深入理解RS232、RS422和RS485:嵌入式系统中的串行通信协议
            在嵌入式系统设计中,串行通信协议是设备间数据传输的重要方式。其中,RS232、RS422和RS485是三种常用的标准。这些协议不仅在工业控制、仪器仪表、网络通信等领域得到广泛应用,也在许多嵌入式系统项目中扮演着重要角色。在本文中,我们将深入探讨这三种串行通信标准......
  • netdom 和 PowerShell 的 Add-Computer 命令可以将计算机加入特定的组织单位(OU)。如果
    netdom和PowerShell的Add-Computer命令可以将计算机加入特定的组织单位(OU)。使用 netdom:netdom是一个用于管理Windows域的命令行工具。要将计算机加入到特定的OU,使用以下命令:bashCopyCodenetdomjoin<ComputerName>/domain:<DomainName>/ou:<OUPath>/userd:<Use......
  • puppeteersharp爬取网页数据
    官网https://github.com/hardkoded/puppeteer-sharp安装创建控制台项目,安装PuppeteerSharp18.1.0编写代码安装chromeasyncstaticTaskMain(string[]args){//如果Chromium不存在则先下载varbrowserFetcher=newBrowserFetcher();//获取安装的浏览......
  • 同源策略与CORS
    基础概念同源策略(Same-OriginPolicy)是一个重要的浏览器安全机制。它用于限制一个源(origin)的脚本无法读取另一个源的资源。源是什么源(origin)由以下三个部分组成:协议(scheme)域名(host)端口(port)限制的策略允许跨源的操作加载资源:加载CSS、JavaScript、图片......
  • CORS配置错误漏洞
    基础概念在部署SOP的情况下,为了实现跨域通信,开发人员必须使用不同的技术来绕过SOP,以便传递敏感信息。这种“绕过”发生了太多次,本身已经成为一个安全问题。因此,为了在不影响应用程序安全状态的前提下实现信息共享,HTML5中引入了跨域资源共享(CORS)这种机制,但这并没有解决所有问题。......