verilog-产生axis数据流
首先这是产生aixs数据流的代码
`timescale 1ps/1ps `default_nettype none module
axis_switch_0_example_master #(
parameter integer C_MASTER_ID =
)
(
/**************** Stream Signals ****************/
output reg m_axis_tvalid = ,
input wire m_axis_tready,
output wire [-:] m_axis_tdata,
output wire [/-:] m_axis_tkeep,
output reg m_axis_tlast = ,
output wire [-:] m_axis_tuser,
/**************** System Signals ****************/
input wire aclk,
input wire aresetn,
/**************** Done Signal ****************/
output reg done =
); /**************** Local Parameters ****************/
localparam integer P_M_TDATA_BYTES = / ;
localparam integer P_M_TUSER_BYTES = ;
localparam [-:] P_M_PACKET_SIZE = ( - );
localparam [-:] P_M_PACKET_NUM = ;
localparam [-:] P_M_SINGLES_NUM = ;
localparam [-:] P_M_DONE_NUM = ;
localparam integer P_M_NUM_MI_SLOTS = ;
localparam integer P_M_NUM_SI_SLOTS = ;
localparam [P_M_NUM_MI_SLOTS*P_M_NUM_SI_SLOTS-:] P_M_CONNECTIVITY_ARRAY = 'b11;
localparam [*P_M_NUM_SI_SLOTS-:] P_M_NUM_CONNECTED_MI_ARRAY = {'d2};
localparam integer P_M_NUM_CONNECTED_MI = P_M_NUM_CONNECTED_MI_ARRAY[C_MASTER_ID*+:]; /**************** Internal Wires/Regs ****************/
genvar i;
generate
for(i=; i<P_M_TDATA_BYTES; i=i+) begin: tdata_g
reg [-:] tdata_i = 'h00;
end
endgenerate
generate
for(i=; (i<P_M_TUSER_BYTES-); i=i+) begin: tuser_g
reg [-:] tuser_i = 'h00;
end
endgenerate
reg [( - (*(P_M_TUSER_BYTES-)) - ):] tuser_i;
reg [-:] pcnt_i = 'h0000;
reg [-:] tcnt_i = 'h0000;
wire done_i;
wire transfer_i;
wire areset = ~aresetn;
reg [-:] areset_i = 'b00; /**************** Assign Signals ****************/
assign m_axis_tkeep = {P_M_TDATA_BYTES{'b1}};
generate
for(i=; i<P_M_TDATA_BYTES; i=i+) begin: tdata_assign_g
assign m_axis_tdata[*i +: ] = tdata_g[i].tdata_i[:];
end
endgenerate
generate
for(i=; i<P_M_TUSER_BYTES; i=i+) begin: tuser_assign_g
if(i == (P_M_TUSER_BYTES - )) begin: tuser_assign_upper_g
assign m_axis_tuser[- : *i] = tuser_i;
end
else begin: tuser_assign_lower_g
assign m_axis_tuser[*i +: ] = tuser_g[i].tuser_i[:];
end
end
endgenerate
assign transfer_i = m_axis_tready && m_axis_tvalid; generate
if(!P_M_NUM_CONNECTED_MI) begin: unconnected_master_g
assign done_i = 'b1;
end
else begin: connected_master_g
assign done_i = (transfer_i && (pcnt_i == P_M_DONE_NUM - 'b1) && (tcnt_i == P_M_PACKET_SIZE));
end
endgenerate // Register Reset
always @(posedge aclk) begin
areset_i <= {areset_i[], areset};
end //**********************************************
// TDATA
//**********************************************
generate
for(i=; i<P_M_TDATA_BYTES; i=i+) begin: tdata_incr_g
always @(posedge aclk) begin
if(areset) begin
tdata_g[i].tdata_i <= 'h00;
end
else
begin
tdata_g[i].tdata_i <= (transfer_i) ? (tdata_g[i].tdata_i + 'b1) : (tdata_g[i].tdata_i);
end
end
end
endgenerate //**********************************************
// TUSER
//**********************************************
generate
for(i=; (i<P_M_TUSER_BYTES-); i=i+) begin: tuser_incr_g
always @(posedge aclk) begin
if(areset) begin
tuser_g[i].tuser_i <= {( - (*i)){'b1}};
end
else
begin
tuser_g[i].tuser_i <= (transfer_i) ? (tuser_g[i].tuser_i - 'b1) : (tuser_g[i].tuser_i);
end
end
end
endgenerate always @(posedge aclk) begin
if(areset) begin
tuser_i <= {( - (*(P_M_TUSER_BYTES-))){'b1}};
end
else
begin
tuser_i <= (transfer_i) ? (tuser_i - 'b1) : tuser_i;
end
end //**********************************************
// TVALID
//**********************************************
always @(posedge aclk) begin
if(areset) begin
m_axis_tvalid <= 'b0;
end
else
begin
// TVALID
if(done_i) begin
m_axis_tvalid <= 'b0;
end
else if(areset_i == 'b10) begin
m_axis_tvalid <= 'b1;
end
else begin
m_axis_tvalid <= m_axis_tvalid;
end
end
end //**********************************************
// TLAST
//**********************************************
always @(posedge aclk) begin
if(areset) begin
m_axis_tlast <= 'b0;
end
else
begin
// TLAST
if(areset_i == 'b10) begin
m_axis_tlast <= 'b1;
end
else if((pcnt_i >= (P_M_SINGLES_NUM - 'b1)) && transfer_i && m_axis_tlast) begin
m_axis_tlast <= 'b0;
end
else if(tcnt_i == (P_M_PACKET_SIZE - 'b1) && transfer_i) begin
m_axis_tlast <= 'b1;
end
else begin
m_axis_tlast <= m_axis_tlast;
end
end
end //**********************************************
// PCNT, TCNT, DONE
//**********************************************
always @(posedge aclk) begin
if(areset) begin
pcnt_i <= 'h0000;
tcnt_i <= 'h0000;
done <= 'b0;
end
else
begin
// DONE
done <= (done_i) ? 'b1 : done; // Increment counters
tcnt_i <= (transfer_i) ? (m_axis_tlast ? 'h0000 : (tcnt_i + 1'b1)) : tcnt_i;
pcnt_i <= (transfer_i && m_axis_tlast) ? (pcnt_i + 'b1) : pcnt_i;
end
end endmodule `default_nettype wire
这里是仿真的代码
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company:
// Engineer:
//
// Create Date: 2017/08/02 15:17:37
// Design Name:
// Module Name: test_axis_tb
// Project Name:
// Target Devices:
// Tool Versions:
// Description:
//
// Dependencies:
//
// Revision:
// Revision 0.01 - File Created
// Additional Comments:
//
////////////////////////////////////////////////////////////////////////////////// module test_axis_tb( ); reg aclk=;
reg aresetn=;
wire s_axis_tvalid;
wire [-:]s_axis_tdata;
wire [/-:] s_axis_tkeep;
wire s_axis_tlast;
wire [-:]s_axis_tuser;
reg s_axis_tready=;
wire example_master_done;
// Example master #0
axis_switch_0_example_master #(
.C_MASTER_ID ( )
) inst_axis_switch_0_example_master_0 (
.aclk ( aclk ),
.aresetn ( aresetn ),
.m_axis_tvalid ( s_axis_tvalid),
.m_axis_tdata ( s_axis_tdata ),
.m_axis_tkeep ( s_axis_tkeep ),
.m_axis_tlast ( s_axis_tlast ),
.m_axis_tuser ( s_axis_tuser),
.m_axis_tready ( s_axis_tready ),
.done ( example_master_done )
);
always # aclk=~aclk;
initial begin
# s_axis_tready=;
# s_axis_tready=;
end
initial begin # aresetn=;
# aresetn=;
end
endmodule


verilog-产生axis数据流的更多相关文章
- axis 数据流
产生数据流的代码 模板 重新修改了下 :]axis_data_cnt='d0; :]axis_data_frame_cnt='d0; :]delay_cnt='d0; initial begin ...
- Verilog的数据流、行为、结构化与RTL级描述
Verilog语言可以有多种方式来描述硬件,同时,使用这些描述方式,又可以在多个抽象层次上设计硬件,这是Verilog语言的重要特征. 在Verilog语言中,有以下3种最基本的描述方式: 数据流描述 ...
- VHDL:信号、端口以及和Verilog的区别
1.信号 信号是描述硬件系统的基本数据对象,它的性质类似于连接线.信号可以作为设计实 体中并行语句模块间的信息交流通道. 信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于 ...
- 硬件描述语言Verilog设计经验总结
一.硬件描述语言Verilog 粗略地看Verilog与C语言有许多相似之处.分号用于结束每个语句,注释符也是相同的(/* ... */和// 都是熟悉的),运算符"=="也用来测 ...
- Verilog HDL程序设计——基本要素
Verilog基本上熟悉了,继续整理一下Verilog的学习笔记吧.前面记载了Verilog的结构,写Verilog的结构有了,但是该怎么写呢?在写之前就得了解一下Verilog的一些基本要素了,也就 ...
- verilog 介绍
Verilog HDL Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由.VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog HDL烦琐一些,但 ...
- 【接口时序】3、UART串口收发的原理与Verilog实现
一.软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45- ...
- FIR滤波原理及verilog设计
FIR(Finite Impulse Response)Filter:有限冲激响应滤波器,又称为非递归线性滤波器. FIR滤波器的冲击响应是一个值为滤波器抽头系数的采样序列,其脉冲响应由有限个采样值构 ...
- 关于Verilog中的几种赋值语句
1. 连续赋值语句(Continuous Assignments) 连续赋值语句是Verilog数据流建模的基本语句,用于对线网进行赋值,等价于门级描述,是从更高的抽象角度来对电路进行描述.连续赋值语 ...
随机推荐
- IE9浏览器打开开发者工具代码正常执行,反之报错
1.can i use console IE9开发者工具打开时支持console对象,否则报错. 2.由于出现错误 80020101 而导致此项操作无法完成 测试代码 <!DOCTYPE ht ...
- linux 不允许多线程共享sqlite句柄
参考链接: http://blog.csdn.net/liangzhao_jay/article/details/45642085 sqlite3采用文件锁,效率过低. sqlite3采用的3种线程模 ...
- 使用AOP思想无侵入式申请权限,解决组件化中权限问题(一)
首先介绍AspectJx使用 https://github.com/HujiangTechnology/gradle_plugin_android_aspectjx 在根项目的build.gradle ...
- 🍓 react16.2新特性 🍓
react16.2新特性:组件中可以一次性return 多个子元素(子组件)了,也就是说,想return多个子元素,不用在外面包一个父盒子了. 方法一:把要return的元素放在一个空的jsx里面 方 ...
- Java-Servlet--《12-WEB应用中的普通Java程序如何读取资源文件.mp4》 有疑问
\第五天-servlet开发和ServletConfig与ServletContext对象\12-WEB应用中的普通Java程序如何读取资源文件.mp4; 多层时,DAO为了得到资源文件中的配置参数: ...
- Django学习手册 - 前端input数据获取
view获取数据方法归纳: #请求meta数据 request.mata(...) request.method(POST,GET,PUT) #从meta里面获取数据 request.path_inf ...
- python-----短信、电话告警
Twilio 1.访问http://twilio.com/并注册.注册了新账户后,你需要验证一个手机号码,短信将发给该号码. 2.Twilio 提供的试用账户包括一个电话号码,它将作为短信的发送者.你 ...
- vim设置行号
vim打开文件后在底行模式下输入:set nu可以在文件每行开头显示对应的行数: 若想vim打开文件默认显示行数,执行:vim /etc/vimrc,在打开的文件末尾添上:set nu,保存退出即可!
- CF1091F New Year and the Mallard Expedition
题目地址:CF1091F New Year and the Mallard Expedition 题意比较复杂,整理一下: \(n\) 段,每段有两个属性:长度,地形(G,W,L) 有三种运动方式: ...
- nginx+supervisor+gunicorn+flask
一. 更新系统 #yum -y install epel-release #yum clean all && yum makecache #yum -y update 二.安装pyth ...