【芯片前端】保持代码手感——不重叠序列检测

简介: 【芯片前端】保持代码手感——不重叠序列检测

前言

最近一直在做方案,挺长时间没有专注的写过rtl,感觉手很生需要写点代码找找手感。恰好最近看到了评论(不知道是不是做推广的啊):



想了下反正周末闲着也是闲着,那刷两个题找找写rtl的手感吧。于是乎我信心满满的打开了这个题目,看了下觉得这不是手拿把掐么,结果吧:



就我也没想到这么几十行的代码我能改3次,看来我写bug的能力是一点没减。


题目

请编写一个序列检测模块,检测输入信号(a)是否满足011100序列, 要求以每六个输入为一组,不检测重复序列,例如第一位数据不符合,则不考虑后五位。一直到第七位数据即下一组信号的第一位开始检测。当信号满足该序列,给出指示信号match。当不满足时给出指示信号not_match


解题

我的思路比较简单,把输入的data按位置摆放在6bit寄存器的对应位置,从高到低就这么循环摆放,凑够6个数后用6bit寄存器的值去和对应的值比较,比上了就输出match,比不上就输出not_match。


循环转的msk信号,对应位置1表示这拍的data放置位置,为什么不使用count呢是因为相比于选择逻辑我更喜欢与或逻辑,映射的电路结构更加清晰:

reg[5:0]msk;
always @(posedge clk or negedge rst_n)begin
  if(~rst_n)begin
    msk <= 6'b100000;
  end
  else if (msk == 6'b000001)begin
    msk <= 6'b100000;
  end
  else begin
    msk <= (msk>>1);
  end
end


6bit的seq寄存器,与或逻辑产生seq的D端,seq的复位值我用的匹配序列取反值:

parameter MATCH_SEQ = 6'b011100;
parameter NOT_MATCH_SEQ = ~MATCH_SEQ;
reg[5:0]seq;
wire[5:0]seq_d = (msk & {6{data}}) | (~msk & seq);
always @(posedge clk or negedge rst_n)begin
  if(~rst_n)begin
    seq <= NOT_MATCH_SEQ;
  end
  else begin
    seq <= seq_d;
  end
end


因为示意图时序里,第6个data的下一拍就要出match/not_match,所以用seq的D端来做逻辑:

wire match_d = (seq_d == MATCH_SEQ);
wire not_match_d = (seq_d != MATCH_SEQ);
always @(posedge clk or negedge rst_n)begin
  if(~rst_n)begin
    match        <= 1'b0;
    not_match <= 1'b0;
  end
  else if (msk == 6'b000001)begin
    match <= match_d;
    not_match <= not_match_d;
  end
  else begin
    match <= 1'b0;
    not_match <= 1'b0;
  end
end



结果

结果还是好的o(╥﹏╥)o


目录
打赏
0
0
0
0
2
分享
相关文章
利用代码分割优化前端性能:策略与实践
在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
探索前端性能优化:关键策略与代码实例
本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
前端性能优化实战:从代码到部署的全面策略
前端性能优化实战:从代码到部署的全面策略
56 1
前端性能优化实战:从代码到部署的全面指南
前端性能优化实战:从代码到部署的全面指南
65 1
前端界的革命:掌握这些新技术,让你的代码简洁到让人惊叹!
前端技术的快速发展带来了许多令人惊叹的新特性。ES6及其后续版本引入了箭头函数、模板字符串等简洁语法,极大减少了代码冗余。React通过虚拟DOM和组件化思想,提高了代码的可维护性和效率。Webpack等构建工具通过模块化和代码分割,优化了应用性能和加载速度。这些新技术正引领前端开发的革命,使代码更加简洁、高效、可维护。
53 2
前端工程师的必修课:如何写出优雅、可维护的代码?
前端工程作为数字世界的门面,编写优雅、可维护的代码至关重要。本文从命名规范、模块化设计、注释与文档、遵循最佳实践四个方面,提供了提升代码质量的方法。通过清晰的命名、合理的模块划分、详细的注释和持续的学习,前端工程师可以写出高效且易于维护的代码,为项目的成功打下坚实基础。
56 2
前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
328 14
前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。
108 6

热门文章

最新文章

  • 1
    【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    13
  • 2
    【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    23
  • 3
    详解智能编码在前端研发的创新应用
    16
  • 4
    巧用通义灵码,提升前端研发效率
    14
  • 5
    智能编码在前端研发的创新应用
    12
  • 6
    【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    10
  • 7
    大前端之前端开发接口测试工具postman的使用方法-简单get接口请求测试的使用方法-简单教学一看就会-以实际例子来说明-优雅草卓伊凡
    24
  • 8
    VSCode AI提效工具,通义灵码前端开发体验
    69
  • 9
    【09】flutter首页进行了完善-采用android studio 进行真机调试开发-增加了直播间列表和短视频人物列表-增加了用户中心-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
    10
  • 10
    以项目登录接口为例-大前端之开发postman请求接口带token的请求测试-前端开发必学之一-如果要学会联调接口而不是纯写静态前端页面-这个是必学-本文以优雅草蜻蜓Q系统API为实践来演示我们如何带token请求接口-优雅草卓伊凡
    12
  • AI助理

    你好,我是AI助理

    可以解答问题、推荐解决方案等