当前位置: 首页 > news >正文

根据Aurora发送时序,造Aurora 数据包,从而进行AXIS接口数据位宽转换仿真

首先Aurora采用AXIS接口

由于后续需要进行AXIS接口 不同时钟域的数据位宽转换(64bit和256bit之间的转换),因此分两次走。

第一种方法:采用AXIS数据位宽转换IP + AXIS跨时钟域IP
在这里插入图片描述
在这里插入图片描述

第二种方法:逻辑完成

下面记录逻辑实现方法。
为了能正常仿真,首先根据Aurora时序制造数据包。
s_tvlaid、s_tdata 通过计数器来创造,创造不同长度的数据包,其中包含非4的倍数的数据包、刚好4个数据的数据包,仅一个数据的数据包。

  //生成计数器(辅助生成s_tvlaid、s_tdata)always @(posedge USER_CLK)if(SYS_RST)r_cnt50 <= 0;else if(r_cnt50 == 6'd50)r_cnt50 <= 0;else r_cnt50 <= r_cnt50 + 1'b1;//生成s_tvalidassign s_tvalid_en = (((r_cnt50 >= 6'd5) && (r_cnt50 <= 6'd15)) || ((r_cnt50 >= 6'd17)&& (r_cnt50 <= 6'd20)) || (r_cnt50 == 6'd40) ) ? 1 : 0;assign s_tvalid    =  r_tvalid;always @(posedge USER_CLK)if(s_tvalid_en)r_tvalid <= 'b1;elser_tvalid <= 'b0;//生成s_tdata    assign s_tdata    =  r_tdata;  always @(posedge USER_CLK)if(s_tvalid_en)r_tdata  <= r_tdata + 64'h5; //64'hecff_bc1felser_tdata  <= 'b0;//生成s_tlast_en assign s_tlast_en  = ((r_cnt50 == 6'd15) || (r_cnt50 == 6'd20) || (r_cnt50 == 6'd40)) ? 1: 0  ; always @(posedge USER_CLK)if(s_tlast_en)r_tlast <= 'b1;elser_tlast <= 'b0;assign s_tlast  =   r_tlast;   //生成s_tkeep assign s_tkeep  = s_tlast ? 8'hff : 8'b0;

在这里插入图片描述
接下来就是AXIS接口 64bit转256bit

首先设计256bit移位寄存器

第一种方法:

  //设计移位寄存器,先进的放低位always @(posedge USER_CLK)if(s_tvalid)r_s_tdata_SHIFT <= {s_tdata,r_s_tdata_SHIFT[255:64]}; else r_s_tdata_SHIFT <= r_s_tdata_SHIFT;

在这里插入图片描述
第二种方法:

   reg   [63:0]      r1_s_tdata = 'b0;reg   [63:0]      r2_s_tdata = 'b0;reg   [63:0]      r3_s_tdata = 'b0;wire  [255:0]     s_data_256      ;//s_tdata打三拍always @(posedge USER_CLK)beginr1_s_tdata <= s_tdata ; r2_s_tdata <= r1_s_tdata;r3_s_tdata <= r2_s_tdata;endassign s_data_256 =  {s_tdata,r1_s_tdata,r2_s_tdata,r3_s_tdata};

拼接后的波形图如下:
在这里插入图片描述


生成转换后的m_tvalid信号
由于64bit转256,所以比率是4:1
那么生成4计数器,从而指示转换成的256bit数据有效

 //设计  4:1计数器   always @(posedge USER_CLK)beginif(s_tlast & s_tvalid )r_CNT2                   <= 2'd0  ;else if(s_tvalid) r_CNT2                   <= r_CNT2 + 1'b1  ;elser_CNT2                   <= r_CNT2 ;            end//生成 m_tvalidalways @(posedge USER_CLK)beginif(((r_CNT2 == 2'd3) || s_tlast) & s_tvalid) m_tvalid           <= 1'b1 ;  elsem_tvalid           <= 1'b0 ;         end

生成tlast信号,不管数据包是不是4的倍数,总会被移入256bit寄存器,转换后的m_tlast信号相当于是比之前的s_talst晚一拍

  //生成m_tlast  always @(posedge USER_CLK)beginif( s_tlast & s_tvalid) m_tlast           <= 1'b1 ;  elsem_tlast           <= 1'b0 ;         end

在这里插入图片描述

生成m_tkeep ,首先确定最后一个256bit数据,即m_tlast对应的256bit数据的m_tkeep值,这里根据移入寄存器的个数有关。
也就是说,当计数器为0的表示,还没移入数据;当为1移入第一个64bit数据,因此是八个字节有效,所以最后一个数据位置的m_tkeep的低八位为1,即可8‘hff,以此类推。
从而确定最终的m_tkeep值。

  //生成m_tkeep  always @(*)begincase(r_CNT2)2'd0           :     r_tkeep_TEMP    =     {  8'h00 ,   8'h00,     8'h00 ,   s_tkeep     }      ;2'd1           :     r_tkeep_TEMP    =     {  8'h00 ,   8'h00,     s_tkeep ,  8'hff      }      ;2'd2           :     r_tkeep_TEMP    =     {  8'h00 ,   s_tkeep ,  8'hff ,    8'hff      }      ;2'd3           :     r_tkeep_TEMP    =     {  s_tkeep , 8'hff ,    8'hff ,    8'hff      }      ;default        :     r_tkeep_TEMP    =     32'd0     ;              endcaseend//s_tlast位置对应的tkeepalways @(posedge USER_CLK)beginif(s_tlast & s_tvalid)m_tkeep            <= r_tkeep_TEMP ;elsem_tkeep            <= 32'hffff_ffff;end  

由于我们发的第一个数据包中有11个64bit数据,因此最后一拍256bit数据中仅包含3个64bit数据,所以24个字节有效,因此m_tkeep的高两位为0,剩下为f。
在这里插入图片描述
把拼接后的256bit数据取出来。
重点在于,取出的256bit数据要保证在m_tvalid时刻有效,不然是不符合axis接口时序的,后续没办法使用。

    //把拼接数据取出reg     [255:0]        r_s_data_256    = 'b0 ;reg     [255:0]        data_256_1      = 'b0 ;wire    [255:0]        data_256_2            ;reg     [255:0]        r_STDATA        = 'b0 ;reg     [255:0]        r_s_tdata_tmp   = 'b0 ;reg     [255:0]        r_STDATA_1      = 'b0 ;always @(posedge USER_CLK)r_s_data_256 <= s_data_256;always @(posedge USER_CLK)if(m_tvalid)data_256_1 <= r_s_data_256;elsedata_256_1 <= data_256_1;assign  data_256_2 = m_tvalid ? r_s_data_256 :'b0 ;always @(posedge USER_CLK)beginif(((r_CNT2 == 2'd3) || s_tlast) & s_tvalid)r_STDATA   <= s_data_256;elser_STDATA   <= r_STDATA;end //方法二always @(*)begincase(r_CNT2)2'd0           :     r_s_tdata_tmp    =     {  8'h00 ,   8'h00,     8'h00 ,   s_tdata                       }      ;2'd1           :     r_s_tdata_tmp    =     {  8'h00 ,   8'h00,     s_tdata , r_s_tdata_SHIFT[255:192]      }      ;2'd2           :     r_s_tdata_tmp    =     {  8'h00 ,   s_tdata ,  r_s_tdata_SHIFT[255:128]                }      ;2'd3           :     r_s_tdata_tmp    =     {  s_tdata , r_s_tdata_SHIFT[255:64]                            }      ;default        :     r_s_tdata_tmp    =     256'd0     ;              endcaseendalways @(posedge USER_CLK)beginif(((r_CNT2 == 2'd3) || s_tlast) & s_tvalid)r_STDATA_1   <= r_s_tdata_tmp;elser_STDATA_1   <= r_STDATA_1;end  

简单记录一下该方法,后面还要用到,还需要在好好理解一下,尤其是转换前后tready信号,还是不大懂。

相关文章:

根据Aurora发送时序,造Aurora 数据包,从而进行AXIS接口数据位宽转换仿真

首先Aurora采用AXIS接口 由于后续需要进行AXIS接口 不同时钟域的数据位宽转换&#xff08;64bit和256bit之间的转换&#xff09;&#xff0c;因此分两次走。 第一种方法&#xff1a;采用AXIS数据位宽转换IP AXIS跨时钟域IP 第二种方法&#xff1a;逻辑完成 下面记录逻辑…...

java后端响应结果Result

目录 一、Result1-1、响应代码1-2、调用响应1-3、在前端vue页面使用方法 一、Result 1-1、响应代码 package com.aaa.common;import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;Data AllArgsConstructor NoArgsConstructor public cla…...

react_11

MobX 介绍 需求&#xff0c;组件0 改变了数据&#xff0c;其它组件也想获得改变后的数据&#xff0c;如图所示 这种多个组件之间要共享状态数据&#xff0c;useState 就不够用了&#xff0c;useContext 也不好用了 能够和 react 配合使用的状态管理库有 MobX Redux 其中…...

AI:52-基于深度学习的垃圾分类

🚀 本文选自专栏:AI领域专栏 从基础到实践,深入了解算法、案例和最新趋势。无论你是初学者还是经验丰富的数据科学家,通过案例和项目实践,掌握核心概念和实用技能。每篇案例都包含代码实例,详细讲解供大家学习。 📌📌📌本专栏包含以下学习方向: 机器学习、深度学…...

[shell,hive] 在shell脚本中将hiveSQL分离出去

将Hive SQL语句写在单独的.hql文件中&#xff0c; 然后在shell脚本中调用这些文件来执行Hive查询。 这样可以将SQL语句与shell脚本分离&#xff0c;使代码更加清晰和易于维护。 基本用法 以下是一个示例&#xff0c;展示如何在shell脚本中使用.hql文件执行Hive查询&#xf…...

求两个(法)向量之间的rpy夹角

主要使用Eigen库实现: 1. 四元素到欧拉角的转换 #include <array> #include <Eigen/Geometry>template <typename T> inline Eigen::Matrix<typename std::remove_reference<T>::type::Scalar, 3, 1> eulerAnglesZYX(T q_in) {typedef typenam…...

[100天算法】-每个元音包含偶数次的最长子字符串(day 53)

题目描述 给你一个字符串 s &#xff0c;请你返回满足以下条件的最长子字符串的长度&#xff1a;每个元音字母&#xff0c;即 a&#xff0c;e&#xff0c;i&#xff0c;o&#xff0c;u &#xff0c;在子字符串中都恰好出现了偶数次。示例 1&#xff1a;输入&#xff1a;s &qu…...

从科幻走向现实,LLM Agent 做到哪一步了?

LLM 洪流滚滚&#xff0c;AI 浪潮席卷全球&#xff0c;在这不断冲击行业认知的一年中&#xff0c;Agent 以冉冉新星之态引起开发者侧目。OpenAI 科学家 Andrej Karpathy 曾言“OpenAI 在大模型领域快人一步&#xff0c;但在 Agent 领域&#xff0c;却是和大家处在同一起跑线上。…...

[笔记] 数据类型

整形 一字节&#xff08;Byte&#xff0c;也就是平时KB、MB里面的B&#xff09;就是八个二进制位(bit) 整形——int——4B无符号整形——unsigned int——4B短整形——short——2B长整型——long——4B双长整型——long long——8B 浮点型 参考博客&#xff1a;C 语言的浮点类型…...

QT学习之QT概述

1.1 什么是QT&#xff1f; Qt是一个跨平台的C图形用户界面应用程序框架。 QT特点&#xff1a; 跨平台&#xff0c;几乎支持所有的平台接口简单&#xff0c;容易上手&#xff0c;学习QT框架对学习其他框架有参考意义。一定程度上简化了内存回收机制开发效率高&#xff0c;能够…...

编写shell脚本,利用mysqldump实现MySQL数据库分库分表备份

查看数据和数据表 mysql -uroot -p123456 -e show databases mysql -uroot -p123456 -e show tables from cb_d 删除头部Database和数据库自带的表 mysql -uroot -p123456 -e show databases -N | egrep -v "information_schema|mysql|performance_schema|sys"编写…...

本地部署Jellyfin影音服务器并实现远程访问影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…...

【数据结构】希尔排序

文章目录 前言一、希尔排序的演示图例二、希尔排序&#xff1a;插入排序的优化版本☆三、核心算法思路四、算法思路步骤&#xff08;一&#xff09;预排序 gap>1&#xff08;二&#xff09;gap1 插入排序 完成排序收尾 五、码源详解&#xff08;1&#xff09;ShellSort1 ——…...

使用VBA打印PDF文件

使用VBA打印工作表和工作簿文件都很容易实现&#xff0c;但是有时需要使用VBA打印已经保存在本机的其他文件&#xff0c;例如PDF文件格式的账单&#xff0c;如果这个PDF并非由Excel生成的那么就无法使用前述方法实现。 调用Windows的Shell命令可以实现打印PDF文件。 示例代码…...

分布式ID系统设计(2)

接上文 https://editor.csdn.net/md/?articleId=133988963 类snowFlake 方案 应用举例 mongoDB ObjectID 就是一个典型的实现。数据库生成 以MySQL举例 利用给字段设置AUTO-INCREMENT来保证ID自增,每次业务使用SQL拿到MySQL的ID 这种方案的优缺点: 优点 1 简单。利用数据库实…...

http和https的区别,以及https涉及到的加密过程

一.http与https的介绍 http:超文本传输协议&#xff0c;是互联网应用最广泛的一种网络协议。设计的最初目的是为了提供一种发布和接收HTML页面的方法。是以明文的形式来传输的&#xff0c;所以就会存在一定的安全隐患&#xff08;因为攻击者可以截取web服务器和网站相关的报文…...

使用php打印时间精确到毫秒及毫秒转成11位时间戳

在PHP中&#xff0c;可以使用microtime函数来获取当前时间&#xff0c;包括毫秒。以下是示例代码&#xff1a; // 获取当前时间戳&#xff08;秒&#xff09; $time microtime(true); // 将当前时间戳转换为毫秒 $milliseconds round($time * 1000); // 输出当前时间&#…...

uni-app离线打包在android studio创建的.jks证书,签名文件获取MD5问题

获取证书信息 keytool -list -v -keystore test.keystore 获取的信息中没有md5信息 可以使用以下方式获取md5. 先创建签名文件&#xff0c;放到项目目录下 配置build.gradle文件 在android studio 打开终端输入以下命令 ./gradlew signingReport 等待生成签名。 生成的内容…...

333333333333

一、Map 接口 接下来讲的都是基于 jdk8 来开展的。 1.1 特点 1、Map 与 Collection 并列存在。Map 是用于保存具有映射关系的数据&#xff0c;即 key-value。 2、Map 中的 key 和 value 可以是任何引用类型的数据类型。 3、Map 中的 key 不允许重复&#xff0c;原因和 HashSet…...

Python:字符串格式化

文章目录 %用法使用format方法进行格式化 %用法 格式字符说明%s字符串%c单个字符%d十进制整数%o八进制整数%x十六进制整数%e指数(基底写为e)%E指数(基底写为E) x 1235 print(%o % x) print(%d % x) print(%x % x) print(%e % x) print(%s % 65) print(%c % a)使用format方法…...

虹科示波器 | 汽车免拆检修 | 2010款江铃陆风X8车发动机怠速抖动、加速无力

一、故障现象 一辆2010款江铃陆风X8车&#xff0c;搭载4G6GS4N发动机&#xff0c;累计行驶里程约为20万km。该车在其他修理厂进行发动机大修&#xff0c;维修后试车&#xff0c;发动机怠速抖动、加速无力。用故障检测仪检测&#xff0c;发动机控制模块&#xff08;ECM&#xff…...

左和右,激进与保守,都是相对概念,但是都会滑向同一种

...

js中的遍历

1. 最原始的可以使用 for(let i0;i<....) 可以用来遍历数组和对象 2. for ... in 用来遍历对象的index 3. for ... of 用来遍历数组 4. 数组内置的forEach,map也可以遍历数组 forEach和for ..of 类似,但是forEach不支持break,continue等流程控制语句,而且forEach中不支持…...

Python算法——快速排序

快速排序&#xff08;Quick Sort&#xff09;是一种高效的分治排序算法&#xff0c;它选择一个基准元素&#xff0c;将数组分成两个子数组&#xff0c;小于基准的放在左边&#xff0c;大于基准的放在右边&#xff0c;然后递归地排序子数组。快速排序通常比冒泡排序和选择排序更…...

操作系统备考学习 day12 (第五章)

操作系统备考学习 day12 第五章 &#xff08;输入/输出&#xff09;I/O管理5.1 I/O管理概述5.1.1 I/O设备I/O设备的分类 5.1.2 I/O控制器I/O设备的电子部件 5.1.3 I/O控制方式程序直接控制方式中断驱动方式DMA方式DMA控制器通道控制方式 5.1.4 I/O软件层次结构用户层软件设备独…...

Elasticsearch删除映射类型

一 前言 官方解释:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/removal-of-types.html 在elasticsearch6.0.0或更高的版本中创建索引仅能包含单个映射类型。在具有多种映射类型的5.x版本中创建的索引将继续像以前一样在elasticsearch6.x中运行。类型将在e…...

网络工程师进阶课:华为HCIP认证课程介绍

微思网络HCIP VIP试听课程&#xff1a;DHCP协议原理与配置https://www.bilibili.com/video/BV1cy4y1J7yg/?spm_id_from333.999.0.0 【赠送】IT技术视频教程&#xff0c;白拿不谢&#xff01;思科、华为、红帽、数据库、云计算等等 https://xmws-it.blog.csdn.net/article/det…...

单行自动横向滚动——css实现

效果 封装组件 <template><div ref"container" class"scroll-area"><divref"content":class"[isScroll ? scroll : no-scroll]":style"{ color: fontColor }">{{ content }}</div></div> &…...

多线程基础

1. 线程创建的几种方式 2. 锁的类型 在学习JUC之前&#xff0c;加锁、等待、唤醒 分别使用的是 &#xff08;synchronized、lock&#xff09;、wait、notify在学习JUC开始&#xff0c;学会使用lock接口的其他实现类来进行上述操作&#xff0c;比如 ReentrantLock 3. 线程池 …...

贝锐向日葵亮相阿里云“云栖大会”:独创专利算法赋能全新云桌面

2023年10月31日-11月2日&#xff0c;一年一度的云栖大会如期举办&#xff0c;国产远程连接服务创领者贝锐受邀参与。活动现场&#xff0c;贝锐CTO张小峰进行了分享&#xff0c;宣布贝锐旗下国民级远程控制品牌“贝锐向日葵”与无影展开合作&#xff0c;同时全新的“云桌面”将于…...