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

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

前言

最近一直在做方案,挺长时间没有专注的写过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


相关文章
|
28天前
|
前端开发 JavaScript 安全
高级前端开发需要知道的 25 个 JavaScript 单行代码
1. 不使用临时变量来交换变量的值 2. 对象解构,让数据访问更便捷 3. 浅克隆对象 4. 合并对象 5. 清理数组 6. 将 NodeList 转换为数组 7. 检查数组是否满足指定条件 8. 将文本复制到剪贴板 9. 删除数组重复项 10. 取两个数组的交集 11. 求数组元素的总和 12. 根据指定条件判断,是否给对象的属性赋值 13. 使用变量作为对象的键 14. 离线状态检查器 15. 离开页面弹出确认对话框 16. 对象数组,根据对象的某个key求对应值的总和 17. 将 url 问号后面的查询字符串转为对象 18. 将秒数转换为时间格式的字符串 19.
34 3
高级前端开发需要知道的 25 个 JavaScript 单行代码
|
15天前
|
前端开发 JavaScript Serverless
前端新手建议收藏的JavaScript 代码技巧
前端新手建议收藏的JavaScript 代码技巧
|
22天前
|
设计模式 前端开发 JavaScript
关于写好前端JS代码的一些建议
关于写好前端JS代码的一些建议
22 2
|
10天前
|
前端开发 应用服务中间件 nginx
安装Windows版nginx以及部署前端代码并就解决刷新出现404
安装Windows版nginx以及部署前端代码并就解决刷新出现404
20 0
|
12天前
|
前端开发 API
支付系统27-------梳理一下支付按钮,前端的代码
支付系统27-------梳理一下支付按钮,前端的代码
|
15天前
|
前端开发 JavaScript Java
高效前端开发技巧:如何优化JavaScript代码执行效率
在当今互联网应用日益复杂的背景下,前端开发者面临着更高的性能要求。本文探讨了一些提升JavaScript代码执行效率的实用技巧,包括优化循环结构、减少内存占用以及利用现代浏览器的优化能力。通过这些方法,开发者可以在保持代码清晰易读的前提下,显著提升应用程序的响应速度和用户体验。
|
25天前
|
JavaScript 前端开发
杨校老师课堂之Web前端JS类库_JQuery案例[效果图与代码齐全]
杨校老师课堂之Web前端JS类库_JQuery案例[效果图与代码齐全]
17 0
|
18天前
|
前端开发 JavaScript 数据库
如何实现前后端分离-----前端笔记
如何实现前后端分离-----前端笔记
|
18天前
|
前端开发 安全 NoSQL
技术笔记:Security前端页面配置
技术笔记:Security前端页面配置
|
1月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
34 2