精华内容
下载资源
问答
  • 同步验证
    千次阅读
    2021-05-09 06:35:02

    本文介绍在Linux操作系统中验证NTP设置同步是否正常工作的方法,可使用ntpq、ntpstat、timedatectl命令。配置NTP的方法请参考在Linux中安装配置NTP服务器和NTP客户端、在RHEL 8系统上使用Chrony配置NTP服务器。

    验证NTP设置是否正常工作的方法

    Linux中有三个命令可用于验证NTP同步,在本文中,我们将告诉你如何使用所有这些命令验证NTP同步:

    1、ntpq:ntpq是标准的NTP查询程序。

    2、ntpstat:显示网络时间同步状态。

    3、timedatectl:它控制systemd系统中的系统时间和日期。

    方法一、使用ntpq命令检查NTP状态

    ntpq实用程序用于监视NTP守护程序ntpd操作并确定性能,该程序可以以交互模式运行,也可以使用命令行参数进行控制,它打印通过向服务器发送多个查询来连接的对等项列表。

    如果NTP正常工作,将获得类似于下面的输出:

    # ntpq -p

    b149f9a5a29e12b491ca49431e7588f5.png

    说明:

    -p:打印服务器已知的对等项列表以及其状态摘要。

    方法二、使用ntpstat命令检查NTP状态

    ntpstat将报告在本地计算机上运行的NTP守护程序(ntpd)的同步状态,如果发现本地系统与参考时间源同步,则ntpstat将报告大致的时间精度。

    ntpstat命令根据NTP同步返回三种状态代码,详情如下:

    1、0:如果时钟同步,则返回0。

    2、1:如果时钟不同步,则返回1。

    3、2:如果时钟状态不确定,则返回2,例如,如果ntpd不可联系。

    运行:# ntpstat

    返回信息:

    8eb848f26248d48e72a2f26469d3cc85.png

    说明:

    在第3层同步到NTP服务器(192.168.1.8),时间在508毫秒内纠正,每隔64秒轮询一次服务器。

    方法三、使用timedatectl命令检查NTP状态

    timedatectl命令用于在systmed系统中查询和更改系统时钟及其设置:

    # timedatectl

    或者:

    # timedatectl status

    dbd60674feb2af945d61ea7fe356646e.png

    附:关于NTP客户端的替代品Chrony

    Chrony可以更快地同步系统时钟,提高时间精度,对于一直不在线的系统尤其有用,同时chronyd较小,它使用较少的内存,只在必要时才唤醒CPU,这样可以更好地节省电能,即使网络拥塞较长时间,它也能很好地运行。

    可以使用以下任何命令来检查Chrony状态:

    # chronyc tracking

    5fbb86cc535bae7db652167e6c503ecb.png

    运行sources命令以显示有关当前时间源的信息:

    # chronyc sources

    5ca445623ad866d964d0660695220e23.png

    TAG:

    除非注明,文章均由 Linux系统学习 整理发布,欢迎转载。如有版权争议,请联系删除。

    文章评论

    留言与评论(共有 0 条评论)

    验证码:

    b2afe5d1fe9f478fafeb0d6ac357ee2a.png

    更多相关内容
  • 几乎每个web应用都会用到表单,Angular 为我们提供了几个内置 validators (验证器),但在实际工作中为了满足项目需求,我们经常需要为应用添加一些自定义验证功能。 angular内置验证器 required – 表单控件值非空...
  • mongo复制集同步验证的实例详解 第一步:在主节点上插入一条数据 Sql代码  rs0:PRIMARY> use imooc switched to db imooc rs0:PRIMARY> db.imooc.insert({"name":"imooc"}) WriteResult({ "nInserted" : 1 }) ...
  • 本文实例讲述了ajax同步验证单号是否存在的方法。分享给大家供大家参考,具体如下: //保存前执行的方法,ajax同步调用后台验证包裹单号是否存在 function doBeforeSave(){ var packageCode=document....
  • 支持同步/异步验证和场景。快速示例 var ev = new EValidator ( ) ;// Add a group of default rules// These rules always get executedev . addRules ( { 'name' : [ { validator : 'notEmpty' , message : 'Name...
  • mongo复制集同步验证.pdf
  • Hbase跨集群数据同步验证

    千次阅读 2021-03-07 23:41:43
    (1)当主机群同步验证停止后(disable_peer) 向A集群插入新数据, 查看B集群,无增量数据同步过来 在A集群enable_peer后, 查看B集群数据,数据同步了过来,但时间在10秒左右 (2)当主机群移除同步验证后...

     

    环境信息

    集群

    主机名称

    IP地址

    HDFS

    HBASE

    zookeeper

    kerberos

    A集群

    demo1.xiaoke.com

    192.168.98.37

    namenode
    journalnode
    datanode

    hmster
    regionserver

    zookeeper server

     
    demo2.xiaoke.com

    192.168.98.38

    namenode
    journalnode
    datanode

    hmster
    regionserver

    zookeeper server

     

    demo3.xiaoke.com

    192.168.98.39

    journalnode
    datanode

    regionserver

    zookeeper server

     

    B集群

    test1.xiaoke.com

    192.168.98.48

    namenode
    journalnode
    datanode

    hmster
    regionserver

    zookeeper server

     

    test2.xiaoke.com

    192.168.98.47

    namenode
    journalnode
    datanode

    hmster
    regionserver

    zookeeper server

     

    test3.xiaoke.com

    192.168.98.46

    journalnode
    datanode

    regionserver

    zookeeper server

     

     

    同步配置

    A集群与B集群均开启replication功能

    A集群增加对应的peer

    add_peer '11',' test1.xiaoke.com, test2.xiaoke.com, test3.xiaoke.com:2181:/hbase-unsecure'

    (11表示peer_id,若未加kerberos等安全认证,需要去ambari上查询zookeeper.znode.parent)

    注意:启用了kerberos认证后zk地址一定要使用域名的方式
    ps:
    remove_peer '11'  #
    删除peer(删除后,需要重新add + set)
    add_peer '11','
    test1.xiaoke.com, test2.xiaoke.com, test3.xiaoke.com:2181:/hbase-unsecure'
    set_peer_tableCFs '11','student'
    show_peer_tableCFs
    list_peers

    disable_peer '11'

    enable_peer '11'

     

    A集群与B集群创建一样的表student

    create 'student', 'score', {SPLITS => ['2','3', '4','5','6', '7','8', '9']}

    功能验证

    准备批量插入数据脚本,一共200条记录

     

    put 'student', '1', 'score:number', '1'

    ….

    put 'student', '200', 'score:number', '200'

    hbase跨集群主从同步功能及数据完整性验证

    A集群修改表属性

    disable 'student'

    alter 'student', {NAME => 'score',REPLICATION_SCOPE => '1'}

    enable 'student'

     

    配置表同步

    set_peer_tableCFs '11','student'

    (多张表的话以逗号分隔,如set_peer_tableCFs '11','student,student1')

     

    客户端执行往A集群插入数据

    put 'student', '1', 'score:number', '1'

    ….

    put 'student', '200', 'score:number', '200'

     

    A集群状态

     

    B集群状态

     

    批量插入数据脚本执行完成后,在A集群执行:

    hbase org.apache.hadoop.hbase.mapreduce.replication.VerifyReplication 11 student

    对比数据,如下图

     

     

    结果显示,GOODROWS为200,说明AB集群同步后数据一致。

    (1)当主机群同步验证停止后(disable_peer)
     


    向A集群插入新数据,

     

    查看B集群,无增量数据同步过来

     

    在A集群enable_peer后,

    查看B集群数据,数据同步了过来,但时间在10秒左右

     

    (2)当主机群移除同步验证后(remove_peer)

     

     

    插入数据

     

    B集群无数据同步过来

     

    重新添加同步验证

    重新添加,设置后,一秒后,增量添加到从集群了。

     

     

    (3)删除主机群上的zk里的replication的节点目录
    ps: hbase复制的状态都存储在zookeeper中,默认情况下存储到 /hbase/replication,这个目录有三个子节点: peers znode、rs znode和state。peer 节点管理slave集群在zk上的配置;state节点记录replication运行的状态;rs 节点记录着本集群rs中对应的hlog同步的信息,包括check point信息。(如果人为的删除 /hbase/replication 节点,会造成复制丢失数据)

     

    (3.1)只有全部删除后,才会出现了无法同步
    主库的student表无法添加数据,无法查询,从库的student表可以查询,但无增量数据

     

     

     

    (3.2)zk状态正常

     

     

    (3.3)查看peers状态

    (3.4)修复

    直接删除replication这个目录,再进行hmaster的主从切换,即重启hmaster。

     

    数据恢复,但从集群数据未同步过来。

     

     

    删除peers,重新建peers,增量数据同步成功,但中间的目录损坏时的增量数据,无法恢复,

     

     

     

     

     

     

    展开全文
  • MDM大批量数据同步测试验证

    千次阅读 2022-02-11 13:10:20
    近期进行主数据治理方案的实施落地,由于数据量巨大,需要对MDM主数据管理平台、ESB企业服务总线同步接口及集成流程进行测试。本文主要对测试方法、调优过程及测试结果分析进行主要说明。

    近期在进行主数据治理方案的实施落地,在主数据中存在人员主数据,而人员主数据主要对省内自然人进行记录,涉及数据量上千万条记录数,由于数据量巨大,需要对MDM主数据管理平台、ESB企业服务总线同步接口及集成流程进行测试,验证是否支持大批量数据同步

    本次大批量数据同步主要针对1千条、1万条、10万条、100万条、1000万条数据级别进行测试验证,其中1万条及以下采用批量同步方式,而1万条以上采用循环批量同步录入的方式,本文主要对测试方法、调优过程及测试结果分析进行主要说明。

    1整体说明

    本章主要针对测试的主要内容、测试的ESB应用集成流程具体实现情况以及遇到问题应该如何处理等进行详细说明。

    1.1测试思路

    在测试时主要针对1千条、1万条、10万条、100万条、1000万条数据级别进行测试验证,测试分为两个模块,具体如下:

    1.对环境进行优化,分别优化主数据及ESB的CPU、内存,并对Redis、JVM、CentOS、Nginx等进行优化;

    2.对每个数量级进行进行ESB层面测试,先用代码构造对应的入参,再使用ESB数据适配器中的数据插入组件记录每个数量级的同步时间; 

    3.复制原有集成流程,加入主数据调度接口进行数据的同步,记录同步时间,并与数据库批量插入同步时间进行对比,查看是否是因为同步接口降低同步时效; 

    4.对测试结果进行总结,将相关问题反馈至产品负责人员进行优化,并进行再次测试。 

    1.2测试流程 

    测试流程主要是针对不同数据量级别对ESB数据插入性能等进行测试,主要测试100W条及1000W条数据的写入测试,具体流程如下: 

    1.批量处理具体流程如下: 

    a)初始化操作记录数据起始时间; 

    b)查询出1千/1万条数据,并进行记录; 

    c)数据库直接批量数据插入; 

    d)记录截止时间并进行时间计算。 

    2.循环批量处理流程如下: 

    a)初始化操作记录数据起始时间; 

    b)使用Java转换节点构造1万条数据; 

    c)数据库直接批量数据插入; 

    d)索引自增长并进行循环; 

    e)构造集成日志参数并记录流程执行时间。 

    1.3结果验证 

    对数据执行结果进行分析,与开发人员反馈具体优化点,因为主数据不仅仅是数据的存储,还有数据的展现及分析,需要对人员数据管理进行查看验证,并对涉及人员数据巡检、人员数据分析等功能进行查证,核实是否会因为大数据量导致系统崩溃或者Redis崩溃等情况。 

    2性能调优 

    性能调优主要对CPU、内存、Redis、JVM、CentOS、Nginx等进行优化,具体优化过程如下。 

    2.1内存调优 

    调优方面主要使用UMC对主数据、ESB等进行CPU及内存扩充,调整内存为4G—8G,主数据方面: 

    ESB方面调整同上: 

    2.2系统调优 

    对CentOS进行调优,调整sysctl.conf文件。 

    加入具体的参数及参数说明: 

      

    接下来使配置文件生效。 

    2.3线程池调优 

    调整server.xml文件,调整线程池,参数说明: 

    1.maxThreads:最大线程数,高并发请求时,tomcat能创建来处理请求的最大线程数,超过则放入请求队列中进行排队,默认值为200; 

    2.minSpareThreads:最小空闲线程数,任何情况都会存活的线程数,即便超过了最大空闲时间,也不会被回收,默认值4; 

    2.4Redis调优 

    通过调整Redis配置文件对Redis进行调优。 

    添加、修改配置: 

    需要关闭redis实例节点,重启后生效。 

    验证方法: 

    输入“info”命令查看已经改为5G内存,已启用allkeys-lru模式。 

    2.5Nginx调优 

    Nginx方面调整使用epoll模式、调整最大连接数、超时时间、请求头缓冲区、请求体缓冲区等等。 

    3实现步骤 

    首先创建一个虚拟表用来模拟业务数据,接下来,之后通过数据库读取组件分页获取数据,之后通过循环的方式批量进行数据的插入。 

    3.1模拟数据 

    首先使用Mysql函数往数据库内插入1000万条数据。 

    脚本执行输入插入记录数就可以在上述库内插入对应数据,执行方法如下: 

    在max_num插入数据就可以在数据库内插入定量数据。具体详见附件。 

    3.2ESB验证 

    按照上文测试思路,先对ESB数据写入能力进行验证,数据批量插入流程流程图(以100W数据为例): 

    流程解读开始: 

    1.数据初始化操作:设置变量index索引值,记录流程开始时间; 

    2.设置循环1万天,构造参数; 

      

    3.数据插入组件,每次插入1万条数据; 

    4.Index+1索引自增长,在线上设置循环条件,循环1000次,插入1000万条数据; 

    5.记录数据执行时间,并插入数据库内流程结束。 

    最后直接调用各个流程直接执行即可。 

    3.3接口验证 

    接口验证主要验证主数据同步接口是否支持数据大批量的同步,如果支持,同步效率如何,对主数据批量同步接口进行验证,流程只是把数据构造替换成数据查询组件,把数据插入组件替换成数据接口即可,具体流程如下: 

    流程解读开始: 

    1.数据初始化操作:设置变量index索引值,记录流程开始时间; 

    2.查询数据1W条记录量; 

    3.调用主数据大批量同步接口imp-all-fields; 

    4.Index+1索引自增长,在线上设置循环条件,循环1000次,插入1000万条数据; 

    5.记录数据执行时间,并插入数据库内流程结束。 

    最后直接调用各个流程直接执行即可。 

    3.4结果对比 

    通过测试结果可以看出调用主数据接口会影响数据同步的速度,同时数据库字段的多少同样也会影响数据同步的速度,可以从数据同步接口进行优化提升同步效率。 

    4心得体会 

    通过本次的大批量数据同步测试验证使自身在性能调优等方面有了一定的提升,同时也总结了一些心得,现从做事方法、意识形态以及技术积累层面总结如下。 

    4.1做事方法 

    近期的工作让我认识到:在工作的过程中应该勤与公司领导、同事沟通交互,在遇到困难时应该面对困难,对于问题的解决方法多往前看,积极解决问题,在解决问题的同时,提升自身技术能力。 

    4.2意识形态 

    通过查阅现有Nginx、Redis等调优的记录文档,发现文档中有一些内容需要进行优化,伴随着自身专业知识不断积累,对知识的认知也不断提高。当回过头来看自己之前记录的工作文档,会发现存在很多漏点,这时就需要再次完善工作文档了。在这个完善的过程中又把初学时的理解和当下进行比较,可以了解到当时的自己有哪些不足,思维逻辑有了怎样改善。技术、认知在不断更新,工作文档也在不断更新,在这个不断迭代更新的过程中,使自己的知识点不知不觉连成了线。 

    4.3技术积累 

    本次数据同步验证使自身Linux系统调优方面有了一定的提升,同时也暴露了自己在调配置文件不仔细所产生的问题,不能仅停留于敲代码的层面,在日常的工作过程也是一样,在后续的学习工作过程中要避免此类问题发生。 

    Linux系统作为目前服务器端最常用的系统,学好它的重要性不言而喻,作为一款字符串操作为主流的系统,想要学好Linux其实并不用容易,想要熟练掌握,也需要投入很多的精力,只有不断地学习积累才能使自身知识体系更加完善。 

    展开全文
  • 此版本是Thor1.3.4版本,不会验证设备。在电脑上安装同步助手,手机连接电脑用同步助手安装Thor1.3.4,安装好后返回同步助手“我的设备”界面,点击“正版授权”。如果不行选择强力修复,选择Thor打勾,点修复就可以...
  • 该机制基于前缀拓扑信息同步的方法构建过滤表,解决了路由不对称导致过滤表和实际路由状态不一致的问题,避免了验证过程中的假阳性和假阴性,实现了低开销、低时延的地址域内IP地址前缀级粒度的真实源地址验证
  • 易语言源码易语言网站时间同步源码.rar 易语言源码易语言网站时间同步源码.rar 易语言源码易语言网站时间同步源码.rar 易语言源码易语言网站时间同步源码.rar 易语言源码易语言网站时间同步源码.rar 易语言源码...
  • 01 【Verilog实战】同步FIFO的设计(附源码RTL/TB)

    千次阅读 多人点赞 2022-04-14 08:50:19
    调试后的程序提供下载,【下载地址】 发现了一个Verilog宝藏刷题网站,网站提供在线仿真环境(点击直达),同时新开了一个<刷题记录>专栏,持续打卡中… 路 线: 【verilog实战】同步FIFO设计(附源码RTL/TB) ...

    虚拟机:VMware -14.0.0.24051
    环 境:ubuntu 18.04.1
    脚 本:makefile(点击查看
    应用工具:vcs 和 verdi


    写在前面

    1. 这个专栏的内容记录的是个人学习过程,博文中贴出来的代码是调试前的代码,方便bug重现。
    2. 调试后的程序提供下载,【下载地址
    3. 发现了一个Verilog宝藏刷题网站,网站提供在线仿真环境(点击直达),同时新开了一个<刷题记录>专栏,持续打卡中…

    路 线:



    一、学习内容

    1. 同步FIFO的写时钟和读时钟为同一个时钟,FIFO内部所有逻辑都是同步逻辑,常常用于交互数据缓冲。
    2. 典型同步FIFO有三部分组成: (1) FIFO写控制逻辑; (2)FIFO读控制逻辑;(3)FIFO 存储实体(如Memory、Reg)。
    3. FIFO写控制逻辑主要功能:产生FIFO写地址、写有效信号,同时产生FIFO写满、写错等状态信号;
    4. FIFO读控制逻辑主要功能:产生FIFO读地址、读有效信号,同时产生FIFO读空、读错等状态信号

    二、基本概念

    1. 同步FIFO的“同步”是什么意思?
    2. FIFO是什么,有什么用?
    3. 接口都有什么
      在这里插入图片描述
    • 同步:时钟间有确定的倍数关系或确定的相位关系
    • FIFO:Frist-in-first-out,先进先出,是一种数据缓存器,实现速率匹配。
      在这里插入图片描述
        既然是数据缓冲器,那么缓冲器的大小,存储深度,读写地址和存储器空满状态都需要确定。
        一般FIFO使用循环指针(计数溢出自动归零)。一般可以称写指针为头head,读指针为尾tail。初始化时,读写指针指向同一数据地址。
      在这里插入图片描述

      上图可见,FIFO初始化时,WP和RP指针指向同一数据单元。WP指向下一个将要写入的数据单元,RP指向将要读出的数据单元,两者是一个追赶过程。可以设置一个计数器,只写,来一个数据,写一个,写地址,+1,计数器+1,写满为止;只读,来一个,读出一个数据,读地址+1,计数器-1;同时读写,计数器值不变,读写地址均+1。

    三、Spec

    (1) Function description

      同步FIFO实现了对write/read的控制,其接口解决了接口两端数据速率不匹配的问题。

    (2) Feature list

    • 支持存储宽度、深度可配置
    • 时钟工作频率为1MHz

    (3) Block diagram

    在这里插入图片描述  模块主要分为读/写接口、读/写指针、读写指针的比较逻辑和array存储阵列四部分。

    1. 读/写接口:为模块提供读写数据和读写使能信号;
    2. 读写指针:主要标志读写指针当前array的地址
    3. 比较逻辑:
    • 使用element counter(elem_cnt)记录FIFO RAM 中的数据个数:
      ▷ 等于0时,给出empty信号;等于BUF_LENGTH时,给出full信号
    • elem_cnt:
      ▷ 写而未满时增加1
      ▷ 读而未空时减1
      ▷ 同时发生读写操作时,elem_cnt不变

    (4) Interface description

    在这里插入图片描述

    (5) Timing

    在这里插入图片描述  分为三部分,写操作,读操作,读写操作。


    四、RTL design

    • DUT模块
    module sync_fifo 
    #(
      parameter DATA_WIDTH = 32,
      parameter DATA_DEPTH = 8 ,
      parameter PTR_WIDTH  = 3 
    //parameter PTR_WIDTH  = $clog2(DATA_DEPTH)
    )
    (
      input  wire                    clk_i   ,
      input  wire                    rst_n_i ,
      
      //write interface
      input  wire                    wr_en_i  ,
      input  wire  [DATA_WIDTH-1:0]  wr_data_i,
      
      //read interface
      input  wire                    rd_en_i  ,
      output reg   [DATA_WIDTH-1:0]  rd_data_o,
      
      //Flags_o
      output reg                     full_o   ,
      output reg                     empty_o  
    );
      reg  [DATA_WIDTH-1:0]  regs_array  [DATA_DEPTH-1:0];
      reg  [PTR_WIDTH-1 :0]  wr_ptr                      ;
      reg  [PTR_WIDTH-1 :0]  rd_ptr                      ;
      reg  [PTR_WIDTH   :0]  elem_cnt                    ;
      reg  [PTR_WIDTH   :0]  elem_cnt_nxt                ;
     //Flags
      wire                   full_comb                   ;
      wire                   empty_comb                  ;
    
    /*---------------------------------------------------\
      --------------- write poiter addr ----------------
    \---------------------------------------------------*/
    always @ (posedge clk_i or negedge rst_n_i) begin
      if (!rst_n_i) begin
        wr_ptr <= 3'b0;
      end
      else if (wr_en_i && !full_o) begin
        wr_ptr <= wr_ptr + 3'b1;
      end
    end
    
    /*---------------------------------------------------\
      -------------- read poiter addr ------------------
    \---------------------------------------------------*/
    always @ (posedge clk_i or negedge rst_n_i) begin
      if (!rst_n_i) begin
        rd_ptr <= 3'b0;
      end
      else if (rd_en_i && !empty_o) begin
        rd_ptr <= rd_ptr + 3'b1;
      end
    end
    
    /*---------------------------------------------------\
      --------------- element counter ------------------
    \---------------------------------------------------*/
    
    always @ (posedge clk_i or negedge rst_n_i) begin
      if (!rst_n_i) begin
        elem_cnt <= 4'b0;
      end
      else if (wr_en_i && rd_en_i && !full_o && !empty_o) begin
        elem_cnt <= elem_cnt;
      end
      else if(wr_en_i && !full_o) begin
        elem_cnt <= elem_cnt + 1'b1;
      end
      else if(rd_en_i && !empty_o) begin
        elem_cnt <= elem_cnt - 1'b1;
      end
    end
    
    /*---------------------------------------------------\
      ------------- generate the flags -----------------
    \---------------------------------------------------*/
    always @(*) begin
      if(!rst_n_i) begin
        elem_cnt_nxt = 1'b0;
      end
      else if(elem_cnt != 4'd0 && rd_en_i && !empty_o) begin
        elem_cnt_nxt = elem_cnt - 1'b1; 
      end
      else if(elem_cnt != 4'd8 && wr_en_i && !full_o) begin
        elem_cnt_nxt = elem_cnt + 1'b1; 
      end
      else begin
        elem_cnt_nxt = elem_cnt;
      end
    end
    
    assign full_comb  = (elem_cnt_nxt == 4'd8);
    assign empty_comb = (elem_cnt_nxt == 4'd0);
    
    always @ (posedge clk_i or negedge rst_n_i) begin
      if (!rst_n_i) begin
        full_o <= 1'b0;
      end
      else begin
        full_o <= full_comb;
      end
    end
    
    always @ (posedge clk_i or negedge rst_n_i) begin
      if (!rst_n_i) begin
        empty_o <= 1'b1;
      end
      else begin
        empty_o <= empty_comb;
      end
    end
    
    /*---------------------------------------------------\
      -------------------- read data -------------------
    \---------------------------------------------------*/
    always @ (posedge clk_i or negedge rst_n_i) begin
      if (!rst_n_i) begin
        rd_data_o <= 32'b0;
      end
      else if(rd_en_i && !empty_o) begin
        rd_data_o <= regs_array[rd_ptr];
      end
    end
    
    /*---------------------------------------------------\
      ------------------- write data -------------------
    \---------------------------------------------------*/
    reg [PTR_WIDTH:0] i;
    
    always @ (posedge clk_i or negedge rst_n_i) begin
      if (!rst_n_i) begin
        for(i=0;i<DATA_DEPTH;i=i+1) begin
          regs_array[i] <= 32'b0;
        end
      end
      else if(wr_en_i && !full_o) begin
        regs_array[wr_ptr] <= wr_data_i;
      end
    end
    
    endmodule
    

    • tb
    module tb_sync_fifo;
      reg          clk_i    ;
      reg          rst_n_i  ;
    
      reg          wr_en_i  ;
      reg  [31:0]  wr_data_i;
      
      reg          rd_en_i  ;
      reg  [31:0]  rd_data_o;
    
      wire         full_o   ;
      reg          empty_o  ;
    
    initial begin
      rst_n_i   = 1  ;
      clk_i     = 0  ;
      
      rd_en_i   = 0  ;
    
      wr_en_i   = 0  ;
      wr_data_i = 32'b0;
    
      #2 rst_n_i = 0 ;
      #5 rst_n_i = 1 ;
    end
    
    initial begin
      #10 wr_en_i = 1;
          rd_en_i = 0;
    
      #10 wr_en_i = 0;
          rd_en_i = 1;
    
      #10 wr_en_i = 1;
          rd_en_i = 0;
    
      #3  rd_en_i = 1;
      #10
      repeat(100) begin
        #5 wr_en_i = {$random}%2;
           rd_en_i = {$random}%2;
      end
    end
    
    initial #2000 $finish;
    
    always #0.5 clk_i     = ~clk_i       ;
    always #1   wr_data_i = {$random}%10;
    sync_fifo u_sync_fifo
    (
      .clk_i    (clk_i    ),
      .rst_n_i  (rst_n_i  ),
      .wr_en_i  (wr_en_i  ),
      .wr_data_i(wr_data_i),
      .rd_en_i  (rd_en_i  ),
      .rd_data_o(rd_data_o),
      .full_o   (full_o   ),
      .empty_o  (empty_o  )
    );
    
    initial begin
      $fsdbDumpfile("sync_fifo.fsdb");
      $fsdbDumpvars                  ;
      $fsdbDumpMDA                   ;
    end
    endmodule
    

    五、分析和小结

    (1)分析

    • 写阶段
      在这里插入图片描述

      复位之后,进行写操作,直至写满,产生满标志后,不再写入新数据。


    • 读阶段
      在这里插入图片描述

      进行读操作,直至读空,产生空标志后,不再读出新数据。


    • 同时读写阶段
      在这里插入图片描述

      先进行写操作,写入三个新数据之后,同时进行读写操作,期间写入新数据和读出数据,但是elem_cnt计数器不再变化,动态平衡。

    (2)小结

      设计思路:先分析需求,定义接口,画出具体的实现框图;按照协议和理解,画出相应时序图;看图写程序,验证仿真波形是否与时序图对应。
      同步FIFO设计要点是什么时候产生空满标志位,即怎么衡量array被写满或者被读空。在这里,我使用了4bit的elem_cnt表示,通过elem_cnt的值表示当前array存储阵列的资源使用情况。0表示没有数据,即空状态;8表示写满,因为array的存储深度就是8。在spec中提到实现FIFO可配置,在这里只实现了宽度为32bit,深度为8的同步fifo设计,初步验证仿真波形与时序图相对应。


    ✍✍☛ 题库入口

      经过一段时间的沉淀,发现入行IC行业,自己的底子还是很差,写的文章质量参差不齐,也没能解答大家的疑问。还是要实打实从基础学起,由浅入深。因此决定推倒重来,通过补充/完善基础知识的同时,通过题库刷题不断提高自己的设计水平,题库推荐给大家(点击直达),<题库记录>栏目不定期更新,欢迎前来讨论。2022.08.29 记


    作者:xlinxdu
    版权:本文版权归作者所有
    转载:未经作者允许,禁止转载,转载必须保留此段声明,必须在文章中给出原文连接。

    展开全文
  • 改造基站北斗同步应对GPS干扰的效果验证.pdf
  • 用uvm验证方法学验证异步fifo,文件包括异步FIFOrtl代码和uvm组件
  • Ajax验证表单(同步验证

    千次阅读 2016-06-09 10:12:34
    在进行用户从注册的时候,进场需要校验email或username是否被注册,这时候需要ajax验证,但是ajax验证无法返回回调函数的值到外部的校验方法,如 function CheckForm(){  if($("#username").val() == ''){  $...
  • 基于边界路由动态同步的互联网地址域内真实源地址验证方法.pdf
  • 随着数字系统复杂度的提高,系统芯片中...对于这些CDC 传输路径以及同步设计的检查验证,在整个设计流程 中的作用日渐凸显。目前还没有一套比较成熟、完善的验证手段,能在设计早期 RTL 级就能完成CDC 的验证工作。
  • 行业分类-设备装置-用于永磁同步电机的设计验证平台.zip
  • 同步FIFO的设计和验证

    千次阅读 2021-11-20 20:11:26
    1.FIFO是什么? fifo是一种先进先出的数据缓存器,与普通存储器的区别是没有外部读写地址线,只能顺序读写,不能随机读写。 2.使用场景 (1)数据缓冲:当突然一股...同步fifo:读时钟与写时钟是同一个时钟 异步fi
  • 在下面的示例中,验证器根据输入长度同步更改<input>背景。 < input id =" testInput " onkeyup =" validateInput(event) " > // Aggregator gets combined mapper state (see demo page) and does ...
  • 对于多轴控制系统,研究系统的控制精度和各轴同步性能.结合BechHoff公司ET1100的...最终完成了雕刻机控制系统的从站构建,验证了由ET1100提供的分布式时钟的同步性能.实验表明,系统控制可靠、精度高,同步性能优越.
  • 总装同步工程中的干涉分析验证.docx
  • 2013高中物理 7.9《实验:验证机械能守恒定律》同步规范训练
  • 经过正式验证的序列化程序,适用于Lustre-like并发同步数据流程序
  • 由于我用的$_REQUEST 包括$_GET $_POST $_COOKIES, 所以验签失败 同步用了$_GET后还是失败, 有个notify_id 需要特别处理 $_GET['notify_id'] = urlencode($_GET['notify_id']); urlenco...
  • e4a源码,下载下来就知道不亏,找不到的类库可以联系我。
  • 同步FIFO的空、满、半满、将空、将满标志都有包含,代码通过modelsim验证

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 392,005
精华内容 156,802
关键字:

同步验证