【芯片前端】保持代码手感——一对多的握手拆分模块

简介: 【芯片前端】保持代码手感——一对多的握手拆分模块

前言

最近还是在写spec文档,一天不写代码保持手感的大业就不能停止。


这篇是握手拆分的模块,一般来说握手拆分有两种情况,一种是所有下游ready同时拉起了才向上握手,另外一种是下游可以分先后接收数据,每一路都接收完成后向上握手。本篇文章实现的是第二种形式。


欢迎下载测试:verilog_cbb: 个人常用cbb for verilog


接口



接口的形式是比较简单的,上游是一路握手,下游是多路握手。


实现

整体代码的实现思路其实也不难,就是使用一个history寄存器记录对下游握手的情况。当对下游只剩一路没有握手且当拍对应的out_ready置起,那么就可以对上游握手了。

module hand_split #(
  parameter CHANNEL = 2
)(
  input  clk,
  input  rst_n,
  input  in_valid,
  output in_ready,
  output [CHANNEL -1:0]out_valid,
  input  [CHANNEL -1:0]out_ready
);
//in out hand_en
wire         in_hand_en  = in_valid  & in_ready;
wire [CHANNEL -1:0]out_hand_en = out_valid & out_ready;
//history hand record
reg  [CHANNEL -1:0]history_q;
wire [CHANNEL -1:0]history_d;
wire         history_en;
assign history_en = (|out_hand_en) || in_hand_en;
assign history_d  = in_hand_en ? {CHANNEL{1'b0}} : history_q | (out_valid & out_ready);
always @(posedge clk or negedge rst_n)begin
  if(~rst_n)      history_q <= {CHANNEL{1'b0}};
  else if(history_en) history_q <= history_d;
end
//out valid
assign out_valid = {CHANNEL{in_valid}} & (~history_q);
//in_ready
assign in_ready  =  ((history_q | out_ready) == {CHANNEL{1'b1}});
endmodule


波形

通过auto_verification打出波形验证功能:



相关文章
|
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-------梳理一下支付按钮,前端的代码
|
13天前
|
JSON JavaScript 前端开发
前端 JS 经典:node 的模块查找策略
前端 JS 经典:node 的模块查找策略
10 0
|
15天前
|
前端开发 JavaScript Java
高效前端开发技巧:如何优化JavaScript代码执行效率
在当今互联网应用日益复杂的背景下,前端开发者面临着更高的性能要求。本文探讨了一些提升JavaScript代码执行效率的实用技巧,包括优化循环结构、减少内存占用以及利用现代浏览器的优化能力。通过这些方法,开发者可以在保持代码清晰易读的前提下,显著提升应用程序的响应速度和用户体验。
|
18天前
|
前端开发 JavaScript 数据库
如何实现前后端分离-----前端笔记
如何实现前后端分离-----前端笔记
|
18天前
|
前端开发 安全 NoSQL
技术笔记:Security前端页面配置
技术笔记:Security前端页面配置
|
1月前
|
JSON 前端开发 JavaScript
前端Ajax、Axios和Fetch的用法和区别笔记
前端Ajax、Axios和Fetch的用法和区别笔记
34 2
|
2月前
|
存储 前端开发 JavaScript
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
前端笔记_OAuth规则机制下实现个人站点接入qq三方登录
55 1