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

b86aadd42ed74a66b80d48b5a5cfb51c.png



引言

我们知道时序路径的建立时间收敛依赖于触发器之间的组合逻辑延迟,以及时钟周期。对于一个确定的设计一般来说,时钟频率不会有太多的让步,因此修时序的时候主要发力点就是减小触发器之间组合逻辑延迟。一方面可以通过组合逻辑优化来降低组合逻辑延迟,另一方面也可以通过插入寄存器来优化时序。register slice 在数字设计中常用来打断前后级的逻辑(握手型总线协议),保证timing收敛,同时实现pipeline的高性能效果。AXI协议是目前广泛采用的总线协议(握手型总线协议)。为了使总线能够跑上更高的频率,获得更好的timing性能,register slice 被广泛采用,用于切断/分割AXI总线的critical timing path。

RS(register slice)前向打拍器则是针对握手型(valid-ready)接口的valid时序优化(建立时间)。握手型信号在打拍时是不能简单的对valid信号打拍的,还需要对数据信号同步打拍。否则valid和data就不能对齐,出现逻辑错误。

RS前向打拍器的逻辑其实比较容易理解,可以理解为深度为1的buffer,从侧ready拉高的逻辑为主侧ready拉高或者当前valid buffer的输出为低电平(表示valid 的buffer空)。从侧的valid和ready握手成功时,数据由从侧寄存一拍输出到主侧。

可以结合时序图理解一下:

b64e8c622d5b4f8da39700cc8f09197e.png

CBB设计源码

// ==================-------------------------------------------------------=====================
//                                        在路上-正出发
//                                    Common Building Block
// ==================-------------------------------------------------------=====================//                 ________          ________          ________                                                               
//                |\   ____\        |\   __  \        |\   __  \                                                              
//                \ \  \___|        \ \  \|\ /_       \ \  \|\ /_                                                             
//                 \ \  \            \ \   __  \       \ \   __  \                                                            
//                  \ \  \____        \ \  \|\  \       \ \  \|\  \                                                           
//                   \ \_______\       \ \_______\       \ \_______\                                                          
//                    \|_______|        \|_______|        \|_______|  // ==================-------------------------------------------------------=====================
//                                        在路上-正出发
//                                    Common Building Block
// ==================-------------------------------------------------------=====================                                                                                                              // CBB Module Name    :CBB_RS_FORWARD
// CBB Created Date   :2024-08-04
// CBB Module Function:Register Slice mode:forward
// Usage Limitation   :
// Author             :在路上-正出发
// -----------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------`timescale 1ns/1psmodule  CBB_RS_FORWARD #(
// ---- parameter define
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
);reg 						r_mst_o_valid;
reg [P_DATA_WIDTH-1:0] 		r_mst_o_data;assign slv_o_ready = mst_i_ready || (~r_mst_o_valid);always @(posedge i_clk or negedge i_rstn) begin : proc_validif(~i_rstn) beginr_mst_o_valid <= 1'b0;end else if (slv_o_ready)beginr_mst_o_valid <= slv_i_valid;end
endalways @(posedge i_clk)begin:proc_dataif(slv_i_valid & slv_o_ready) beginr_mst_o_data <= slv_i_data;end
endassign mst_o_valid = r_mst_o_valid;
assign mst_o_data  = r_mst_o_data;
endmodule

CBB验证

从侧 valid信号拉高的时间间隔随机,且拉高的时机与ready无关,主侧ready信号拉高的持续时间随机,相邻两个高电平之间的间隔随机。包括各种反压case。

验证源码

// ==================-------------------------------------------------------=====================
//                                        在路上-正出发
//                                    Common Building Block
// ==================-------------------------------------------------------=====================//                 ________          ________          ________                                                               
//                |\   ____\        |\   __  \        |\   __  \                                                              
//                \ \  \___|        \ \  \|\ /_       \ \  \|\ /_                                                             
//                 \ \  \            \ \   __  \       \ \   __  \                                                            
//                  \ \  \____        \ \  \|\  \       \ \  \|\  \                                                           
//                   \ \_______\       \ \_______\       \ \_______\                                                          
//                    \|_______|        \|_______|        \|_______|  // ==================-------------------------------------------------------=====================
//                                        在路上-正出发
//                                    Common Building Block
// ==================-------------------------------------------------------=====================                                                                                                              // CBB Module Name    :TB_RS_FORWARD
// CBB Created Date   :2024-08-04
// CBB Module Function:
// Usage Limitation   :
// Author             :在路上-正出发
// -----------------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------------`timescale 1ns/1psmodule  TB_RS_FORWARD();
// ---- parameter define
parameter P_DATA_WIDTH 		= 32;// ---- port define 
reg 						i_clk;
reg 						i_rstn;reg 						slv_i_valid;
reg [P_DATA_WIDTH-1:0] 		slv_i_data;
wire 						slv_o_ready;wire 						mst_o_valid;
wire [P_DATA_WIDTH-1:0] 	mst_o_data;
reg 						mst_i_ready;initial i_clk = 1'b0;
always #5 i_clk = ~i_clk;integer time_dly1,time_dly2;initial
begini_rstn = 1'b0;mst_i_ready = 1'b0;#20;i_rstn = 1'b1;#20;repeat(20)begintime_dly1 = $urandom_range(1,10);repeat(time_dly1)begin@(posedge i_clk);end@(posedge i_clk)mst_i_ready <= 1'b1;time_dly1 = $urandom_range(1,10);repeat(time_dly1)begin@(posedge i_clk);end@(posedge i_clk)mst_i_ready <= 1'b0;end
endinitial
beginslv_i_valid = 1'b0;slv_i_data  = 0;@(posedge i_rstn);#20;repeat(20)begin@(posedge i_clk)slv_i_valid <= 1'b1;slv_i_data  <= $random();while(~slv_o_ready) @(posedge i_clk);@(posedge i_clk)slv_i_valid <= 1'b0;slv_i_data  <= 0;time_dly2 = $urandom_range(1,10);repeat(time_dly2) @(posedge i_clk);end#100;$finish;
endCBB_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));endmodule

波形

528f4724c6064c7cac140751eaccfc70.png

CBB综合

3f31222a3be94115ba150f0450371ab3.png

 

综合结果,可以明确看出,前向RS打拍器对输入数据以及valid信号做了打拍处理,完全切断了从侧与主侧valid 以及data的timing path,有助于这两个信号的建立时间收敛。但是ready信号则是通过组合逻辑由主侧传递到从侧,并没有切断从侧与主侧的timing path,因此前向打拍器不能够优化ready信号的时序。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/391707.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Chapter 22 数据可视化——折线图

欢迎大家订阅【Python从入门到精通】专栏&#xff0c;一起探索Python的无限可能&#xff01; 文章目录 前言一、Pyecharts介绍二、安装Pyecharts三、全局配置项四、绘制折线图 前言 在大数据时代&#xff0c;数据可视化成为了分析和展示数据的重要手段。Pyecharts 是一个基于 …

python open cv(图像处理的基本操作)

概要图 1读取图像 cv2.imread() 函数是OpenCV库中用于读取图像文件的函数。它有两个参数&#xff1a; 文件名&#xff1a;这是第一个也是必需的参数&#xff0c;它指定了要读取的图像文件的路径和文件名。这个路径可以是相对路径&#xff0c;也可以是绝对路径。 标志&#xf…

【practise】只出现一次的数字

现在给你一个数组&#xff0c;里面放了一些数字&#xff0c;里面都是两两成对&#xff0c;只有一个数字是单独的&#xff0c;要求找出其中只出现一次的数字。相必这道题是非常简单了&#xff0c;有很多解法比如说用暴力求解&#xff1f;比如说用位运算&#xff1f;甚至说用哈希…

【C++标准模版库】list的介绍及使用

list 一.list的介绍二.list的使用1.list 构造函数2.list 空间大小3.list 增删查改4.list 迭代器的使用1.正向迭代器2.反向迭代器 5.list 其他成员函数 三.vector与list关于sort性能的比较 一.list的介绍 C中的list标准模板库&#xff08;STL&#xff09;是C标准库中的一个重要组…

PCL1.11.0下载安装(Windows)

PCL1.11.0下载安装&#xff08;Windows&#xff09; PCL安装需要的几个模块如下图所示&#xff1a; 一、PCL1.11.0下载 PCL以1.11.0版本为例&#xff0c;打开下载连接&#xff08;PCL下载&#xff09; 下载PCL-1.11.0-AllInOne-msvc2019-win64.exe和pcl-1.11.0-pdb-msvc2019-…

Vue3 列表自动滚动播放(表头固定、列表内容自动滚动播放)+ vue3-seamless-scroll - 附完整示例

vue3-seamless-scroll&#xff1a;Vue3.0 无缝滚动组件&#xff0c;支持Vite2.0&#xff0c;支持服务端打包 目前组件支持上下左右无缝滚动&#xff0c;单步滚动&#xff0c;并且支持复杂图标的无缝滚动&#xff0c;目前组件支持平台与Vue3.0支持平台一致。 目录 效果 一、介绍…

腾讯云AI代码助手评测:如何智能高效完成Go语言Web项目开发

腾讯云AI代码助手评测&#xff1a;如何智能高效完成Go语言Web项目开发 &#x1f680; 文章目录 腾讯云AI代码助手评测&#xff1a;如何智能高效完成Go语言Web项目开发 &#x1f680;背景引言开发环境介绍腾讯云AI代码助手使用实例1. 代码补全2. 技术对话3. 代码优化4. 规范代码…

(计算机网络)物理层

目录 一.基本概念 二.基本术语 三.码元 四.多路复用技术 一.基本概念 1. 2. 3. 4. 5. 6. 7. 8. 9. 二.基本术语 1. 2. 3.早期--公用的电话网传输数据&#xff0c;网络上传的是模拟信号&#xff0c;调制解调器--将数字信号转化成模拟信号&#xff0c;最后&#xff0c;调制解…

NSSCTF-GDOUCTF 2023新生赛

[GDOUCTF 2023]hate eat snake 考察&#xff1a;js代码审计 打开题目&#xff0c;发现需要坚持60秒&#xff0c;那么简单的一个思路就是修改得分的变量>60即可 办法1&#xff1a;修改变量 右键查看源代码&#xff0c;之后发现有一个snake.js的文件&#xff0c;ctrlf搜索i…

程序设计基础(c语言)_补充_1

1、编程应用双层循环输出九九乘法表 #include <stdio.h> #include <stdlib.h> int main() {int i,j;for(i1;i<9;i){for(j1;j<i;j)if(ji)printf("%d*%d%d",j,i,j*i);elseprintf("%d*%d%-2d ",j,i,j*i);printf("\n");}return 0…

DS18B20数字温度传感器操作解析

文章目录 引言特点工作原理引脚说明配置寄存器温度寄存器时序初始化时序写时序读时序 引言 DS18B20 是一种广泛使用的数字温度传感器&#xff0c;具有高精度和易用性。是Dallas Semiconductor公司&#xff08;现为Maxim Integrated公司&#xff09;生产的单总线数字温度传感器…

关爱提示器-不要久坐

关爱提示器-不要久坐 最近身体不适腰疼脖子疼的&#xff0c;去医院检查&#xff0c;大夫提示注意身体不要久坐多运动等等之类的&#xff0c;哎&#xff0c;生活所迫&#xff0c;披星戴月兢兢业业的&#xff0c;到头来还要被批判躺平不努力。哎&#xff0c;先关爱自己吧&#xf…

Java | Leetcode Java题解之第322题零钱兑换

题目&#xff1a; 题解&#xff1a; public class Solution {public int coinChange(int[] coins, int amount) {int max amount 1;int[] dp new int[amount 1];Arrays.fill(dp, max);dp[0] 0;for (int i 1; i < amount; i) {for (int j 0; j < coins.length; j)…

Dynamo修改共享参数绑定的分组——群问题整理005

Hello大家好!我是九哥~ 今天继续给大家分享一些短平快的小教程,是来自群里面的问题。 问题005:Dynamo修改共享参数绑定的分组 今天看到群里询问如何修改参数所在的分组,查了下API,项目参数是不行的,不过共享参数是允许ReInsert()的,那么就好办了。 然后在Document下…

JavaEE 第4节 线程安全问题

小贴士&#xff1a; 本节题目所述的主题其实非常的庞大&#xff0c;如果要细讲起来&#xff0c;一篇博客远远不够&#xff0c;本篇博客只会每个方面的内容做一个简要描述&#xff0c;详细的内容在后续同专栏博客中都会涉及到的&#xff0c;如果有需要可以一步到本专栏的其他博客…

python运行js之execjs基本使用

python运行js之execjs基本使用 现在大部分网站都使用JS加密和JS加载的情况&#xff0c;数据并不能直接被抓取出来&#xff0c;这时候就需要使用第三方类库来执行JS语句。 官网&#xff1a;https://pypi.org/project/PyExecJS/ 使用前提&#xff1a;电脑需要安装 Node.js 一、安…

最新口型同步技术EchoMimic部署

EchoMimic是由蚂蚁集团推出的一个 AI 驱动的口型同步技术项目&#xff0c;能够通过人像面部特征和音频来帮助人物“对口型”&#xff0c;生成逼真的动态肖像视频。 EchoMimic的技术亮点在于其创新的动画生成方法&#xff0c;它不仅能够通过音频和面部关键点单独驱动图像动画&a…

【星闪开发连载】WS63E 星闪开发板和hi3861开发板的对比

此次星闪开发者体验官活动使用的开发板都是NearLink_DK_WS63E开发板&#xff0c;它和NearLink_DK_WS63开发板的区别在于具有雷达感知功能。从开发板的照片也可以看到WS63E有一个雷达天线接口。 我们把WS63E开发板和hi3861开发板的功能做了简单的对比&#xff0c;见下表。 参数…

用户看广告获取密码访问网页内容流量主模式源码

简介&#xff1a; 全开源付费进群流量主模式&#xff0c;用户看广告获取密码访问网页内容&#xff0c;网站生成内容&#xff0c;用户需要浏览内容跳转至小程序&#xff0c;观看广告后获取密码&#xff0c;输入密码查看网页内容。 与之前得9.9付费进群区别就是内容体现在了网页…

iPhone苹果手机Safari浏览器怎么收藏网页?

iPhone苹果手机Safari浏览器怎么收藏网页? 1、iPhone苹果手机上找到并打开Safari浏览器&#xff0c;并访问要收藏的网页&#xff1b; 2、打开网页后&#xff0c;点击导航上的更多功能&#xff1b; 3、在更多里&#xff0c;找到并点击添加到个人收藏&#xff0c;完成储存即可添…