根据Aurora发送时序,造Aurora 发送数据包

news2024/11/8 11:40:22

首先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_tvalid
  assign 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;
      else
          r_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_bc1f
   else
       r_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;
      else
          r_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;

在这里插入图片描述
生成转换后的m_tvalid信号
由于64bit转256,所以比率是4:1
那么生成4计数器,从而指示转换成的256bit数据有效

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

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

  //生成m_tlast  
    always @(posedge USER_CLK)
    begin
        if( s_tlast & s_tvalid) 
            m_tlast           <= 1'b1 ;  
        else
            m_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 @(*)
    begin
        case(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     ;              
        endcase
    end
    //s_tlast位置对应的tkeep
   always @(posedge USER_CLK)
    begin
        if(s_tlast & s_tvalid)
            m_tkeep            <= r_tkeep_TEMP ;
        else
            m_tkeep            <= 32'hffff_ffff;
    end  

由于我们发的第一个数据包中有11个64bit数据,因此最后一拍256bit数据中仅包含3个64bit数据,所以24个字节有效,因此m_tkeep的高两位为0,剩下为f。
在这里插入图片描述
简单记录一下该方法,后面还要用到,还需要在好好理解一下,由于是转换前后tready信号,还是不大懂。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ERP集成WMS仓储管理系统提升仓储效率

随着企业业务规模的不断扩张&#xff0c;仓储管理逐渐凸显其重要性。传统的仓储管理方式&#xff0c;随着业务量的增长&#xff0c;可能带来种种问题&#xff0c;如数据不准确、效率低下、成本增高等。在这样的背景下&#xff0c;ERP集成WMS仓储管理系统的出现成为企业的及时雨…

麒麟KYLINIOS软件仓库搭建01-新创建软件仓库服务器

原文链接&#xff1a;麒麟KYLINIOS软件仓库搭建01-新创建软件仓库服务器 hello&#xff0c;大家好啊&#xff0c;今天给大家带来麒麟桌面操作系统软件仓库搭建的文章01-新创建软件仓库服务器&#xff0c;本篇文章主要给大家介绍了如何在麒麟桌面操作系统2203-x86版本上搭建内网…

Redis高可用解决方案之Redis集群,和Spring Cloud集成实战

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

Java网站如何集成支付宝当面付,企业个人都能使用的支付(比较简单)

创建应用 这个得先去登录 - 支付宝创建应用 相关配置设置 maven配置 <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.38.10.ALL</version></dependency> 支付服务代码 …

Linux:Docker-yum安装(2)

yum在线安装 我这里使用的是centos7默认仓库 如果没有了&#xff0c;可以去下面这个链接下载回来 KALItarro/default-yum: centos7-默认yum仓库 (github.com)https://github.com/KALItarro/default-yum wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.…

【Git企业开发】第三节.Git的合并冲突

作者简介&#xff1a;大家好&#xff0c;我是未央&#xff1b; 博客首页&#xff1a;未央.303 系列专栏&#xff1a;Git企业级开发 每日一句&#xff1a;人的一生&#xff0c;可以有所作为的时机只有一次&#xff0c;那就是现在&#xff01;&#xff01;&#xff01;&#xff0…

海外问卷调查现在还可以做吗?

可以做&#xff0c;海外问卷调查是一个稳定长期的互联网创业项目。 大家好&#xff0c;我是橙河&#xff0c;这篇文章讲一讲海外问卷调查现在还可以做吗&#xff1f; 海外问卷调查&#xff0c;简单来说&#xff0c;就是外国的商业公司对外发放的付费调查问卷&#xff0c;按照…

1,2,3,4,5 专家正上路

早在20世纪70年代&#xff0c;德雷福斯兄弟(Hubert Dreyfus和Stuart Dreyfus)就开始研究人类如何获取和掌握技能&#xff0c;他们考察了日常生活中常见的各项技能活动&#xff0c;如开车、下棋、体育运动等&#xff0c;提出了德雷福斯模型。它是种构建理论&#xff0c;概括了从…

第十六章 隐马尔科夫模型

文章目录 简介概念随机变量与随机过程马尔可夫链隐含马尔可夫模型两个基本假设三个基本问题 算法观测序列生成算法概率计算算法前向概率与后向概率前向算法后向算法小结 概率与期望 学习问题监督学习方法Baum-Welch算法 预测算法近似算法(MAP)维特比算法(Viterbi) 简介 动态贝叶…

java--this关键字

1.this是什么 this就是一个变量&#xff0c;可以用在方法中&#xff0c;来拿到当前对象(这个this就相当于你的车钥匙&#xff0c;当你在把车停到了车库&#xff0c;然后你发现找不到你的车的时候&#xff0c;就会按一下车钥匙&#xff0c;让你的车叫一下&#xff0c;你就会晓得…

《现代C++语言核心特性解析》笔记(一)

一、新基础类型&#xff08;C11&#xff5e;C20&#xff09; C基础类型回顾一览表 1. 整数类型 long long 我们知道long通常表示一个32位整型&#xff0c;而long long则是用来表示一个64位的整型。不得不说&#xff0c;这种命名方式简单粗暴。不仅写法冗余&#xff0c;而且表…

若依笔记(四):代码生成器

已知使用MyBatisPlus代码生成器可以自动生成Entity、Mapper、Service、Controller代码&#xff0c;前提是数据库中有数据表&#xff0c;生成pojo类以及对于该数据表的增删改查命令的代码&#xff0c;若依更进一步能选择表后生成代码、预览、下载&#xff0c;同时可以生产前端代…

构建强大的Web应用之Django详解

引言&#xff1a; Django是一个功能强大且灵活的Python Web框架&#xff0c;它提供了一套完整的工具和功能&#xff0c;帮助开发者快速构建高效的Web应用。本篇文章将带您逐步了解Django的基本概念和使用方法&#xff0c;并通过实际的代码案例&#xff0c;帮助您从零开始构建自…

【docker】安装xxl-job-admin调配中心

1.安装数据库&#xff08;注意版本号&#xff0c;这里选择版本2.3.1&#xff09; 1.1下载代码&#xff0c;并切换到2.3.1分支 1.2 打开并运行xxl-job/doc/db/tables_xxl_job.sql 2.编写docker-compose.yaml&#xff0c;并运行 1. docker-compose.yaml 2.将yaml放入Linux系…

滑模控制问题总结

设计切换函数/滑模面S&#xff08;x&#xff09; 线性&#xff1a; 滑模面参数确定方法&#xff1a;Hurwitz 保证多项式为Hurwitz&#xff0c;即特征值在左半平面。 主要适用于速度和精度要求都不高的非线性系统 非线性 《滑模变结构控制理论研究综述》 终端滑模控制&#xff1…

Redis事务管道

文章目录 Redis事务1.简介&#xff08;1&#xff09;什么是事务&#xff08;2&#xff09;Redis事务的特点 2.实操案例&#xff08;0&#xff09;事务命令&#xff08;1&#xff09;正常执行&#xff08;2&#xff09;放弃事务&#xff08;3&#xff09;全体连坐&#xff08;4&…

tiki靶机攻略

tiki靶机攻略 扫描 渗透 访问robots.txt 发现目录&#xff0c;访问一下 再次扫描/tiki/目录&#xff0c;然后发现changelog下又tiki的版本信息 kali漏洞搜索&#xff0c;找到一个符合版本的 python3 48927.py 10.4.7.159执行过后&#xff0c;显示不需要密码即可登录 随后bp登…

gd32f470zgt6最小系统 上哪找到

gd32f470zgt6最小系统 上哪找到

Docker 学习路线 2:底层技术

了解驱动Docker的核心技术将让您更深入地了解Docker的工作原理&#xff0c;并有助于您更有效地使用该平台。 Linux容器&#xff08;LXC&#xff09; Linux容器&#xff08;LXC&#xff09;是Docker的基础。 LXC是一种轻量级的虚拟化解决方案&#xff0c;允许多个隔离的Linux系…

VS Code 开发Java之代码导航和代码编辑

快速导航 VS Code提供了一些功能可以在Java开发时快速导航。 代码导航 大纲视图&#xff08;Outline view&#xff09;&#xff1a; 方便地导航当前文件中的成员项目视图&#xff08;Projects view&#xff09;&#xff1a; 项目的详细概述Java编辑器&#xff1a; 支持调用层…