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

根据时钟周期来做判断,怎么理清逻辑,计数器的逻辑,握手

一句话说明这个问题:

 

计数器的值,就是第几次的输入的值,就是晚了一个时钟周期。

如下图所示,当输入发生一次握手之后,计数器的值就会加一。此时的1,是真的传输了一个数据包,这个1真的是数据包的数量。

有个问题,怎么保证是第1000个包产生一个int吧报文,因为还有一个归零的逻辑,所以说当counter的值第二次为零的时候,是标识上个时钟周期的时候,第1001个数据包已经输入了。

每1000次握手,产生一个信号的代码模板

// 现在暂定是1000个包,生成一个探测报文
wire [15 : 0 ] how_many_cycles_to_generate_has_int;
assign how_many_cycles_to_generate_has_int = 1000;
reg [15 : 0 ] packet_counter;


// 因为0计数到999是1000,所以计数器只需要循环计数从0到999就可以
always @(posedge clk) begin
    if( rst || ( (packet_counter == how_many_cycles_to_generate_has_int -1 ) && (in_proto_hdr_valid & in_proto_hdr_ready) ) ) begin
        packet_counter <= 0;
    end
    else if ((in_proto_hdr_valid & in_proto_hdr_ready)) begin
        packet_counter <= packet_counter + 1;
    end
    else begin
        packet_counter <= packet_counter;
    end

end

reg has_int_reg;
always @(posedge clk) begin
    if( rst  ) begin
        has_int_reg <= 0;
    end
    // 定的值是1000,那么在计数器到999的时候,就需要设置探测报文的标志位了,然后拉高的int字段会让下一级产生对应的int报文,用always@*,纯线网逻辑
    // 虽然包头和has_int标志位同时到达,但是线网always@*会根据int=1实时改变生成的数据包
    else if (  packet_counter == how_many_cycles_to_generate_has_int - 1   ) begin
        has_int_reg <=  1;
    end
    else begin
        has_int_reg <= 0;
    end

end


http://www.kler.cn/a/428760.html

相关文章:

  • Kotlin语言的数据结构
  • C++ ——— 模拟实现 vector 类
  • AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式
  • Ubuntu 24.04 LTS 服务器折腾集
  • MySQL中日期和时间戳的转换:字符到DATE和TIMESTAMP的相互转换
  • gitignore忽略已经提交过的
  • Docker(一)
  • 【gitLab正常使用记录】
  • 《MySQL 表结构设计基础》
  • 企业数字化转型:从爆品起步,迈向生态平台
  • uniapp h5 vue3 m3u8 和 mp4 外链视频播放
  • LeetCode45:跳跃游戏II
  • 【CSS in Depth 2 精译_067】11.2 颜色的定义(中):CSS 中的色域与色彩空间
  • C# GDI绘制的倒计时控件
  • 数组 - 八皇后 - 困难
  • 模拟IC设计中LDO的学习笔记(一)
  • 【C#】NET 9中LINQ的新特性-CountBy
  • 【Pandas】pandas wide_to_long
  • AWS Kinesis Firehose 权限配置完全指南
  • BERT模型的输出格式探究以及提取出BERT 模型的CLS表示,last_hidden_state[:, 0, :]用于提取每个句子的CLS向量表示
  • DSA 和 ECDSA 签名算法
  • 调用matlab用户自定义的function函数时,有多个输出变量只输出第一个变量
  • 【Linux课程学习】:站在文件系统之上理解:软硬链接,软硬链接的区别
  • 面试中遇到的一些有关进程的问题(有争议版)
  • Linux学习笔记15 何为HDD,SSD?sata?PCIE?分区,MBR,GPT分区的理解
  • STM32标准固件库官网下载方法