首先这是产生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数据流的更多相关文章

  1. axis 数据流

    产生数据流的代码 模板   重新修改了下 :]axis_data_cnt='d0; :]axis_data_frame_cnt='d0; :]delay_cnt='d0; initial begin ...

  2. Verilog的数据流、行为、结构化与RTL级描述

    Verilog语言可以有多种方式来描述硬件,同时,使用这些描述方式,又可以在多个抽象层次上设计硬件,这是Verilog语言的重要特征. 在Verilog语言中,有以下3种最基本的描述方式: 数据流描述 ...

  3. VHDL:信号、端口以及和Verilog的区别

    1.信号 信号是描述硬件系统的基本数据对象,它的性质类似于连接线.信号可以作为设计实 体中并行语句模块间的信息交流通道.      信号作为一种数值容器,不但可以容纳当前值,也可以保持历史值(这决定于 ...

  4. 硬件描述语言Verilog设计经验总结

    一.硬件描述语言Verilog 粗略地看Verilog与C语言有许多相似之处.分号用于结束每个语句,注释符也是相同的(/* ... */和// 都是熟悉的),运算符"=="也用来测 ...

  5. Verilog HDL程序设计——基本要素

    Verilog基本上熟悉了,继续整理一下Verilog的学习笔记吧.前面记载了Verilog的结构,写Verilog的结构有了,但是该怎么写呢?在写之前就得了解一下Verilog的一些基本要素了,也就 ...

  6. verilog 介绍

    Verilog HDL Verilog HDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由.VHDL和Verilog HDL两者相比,VHDL的书写规则比Verilog HDL烦琐一些,但 ...

  7. 【接口时序】3、UART串口收发的原理与Verilog实现

    一.软件平台与硬件平台 软件平台: 1.操作系统:Windows-8.1 2.开发套件:ISE14.7 3.仿真工具:ModelSim-10.4-SE 硬件平台: 1.FPGA型号:XC6SLX45- ...

  8. FIR滤波原理及verilog设计

    FIR(Finite Impulse Response)Filter:有限冲激响应滤波器,又称为非递归线性滤波器. FIR滤波器的冲击响应是一个值为滤波器抽头系数的采样序列,其脉冲响应由有限个采样值构 ...

  9. 关于Verilog中的几种赋值语句

    1. 连续赋值语句(Continuous Assignments) 连续赋值语句是Verilog数据流建模的基本语句,用于对线网进行赋值,等价于门级描述,是从更高的抽象角度来对电路进行描述.连续赋值语 ...

随机推荐

  1. 嵌入式开发-迅为4418开发板Android4.4.4实现ble功能

    ①.如果是迅为4418开发板:在4418/android/device/nexell/drone2/device.mk中添加: frameworks/native/data/etc/android.h ...

  2. 【JS】正则向前查找和向后查找

    正向查找:就是匹配前面或后面是什么内容的,所以分类是:正向前查找,正向后查找 负向查找:就是匹配前面或后面不是什么内容的,所以分类是:负向前查找,负向后查找   操作符 说明 描述 (?=exp) 正 ...

  3. JavaScript实现框选效果

    <html> <head> <title>region</title> <style> body { margin: 0; padding: ...

  4. require/exports 与 import/export 的区别?

    文章作者:寸志链接:https://www.zhihu.com/question/56820346/answer/150724784来源:知乎 遵循的模块化规范不一样 模块化规范:即为 JavaScr ...

  5. python(四)类变量和实例变量

    转载自[1] 实际这是个实例变量是否指向类变量的问题. python的类变量和实例变量,顾名思义,类变量是指跟类的变量,而实例变量,指跟类的具体实例相关联的变量,具体体现为self.x 等.实际要注意 ...

  6. mysql原理~创建用户的那些事情

    一 简介:mysql是如何创建用户的二 基本语法:  1 grant 权限 on db.table to 'user'@'ip' identified by 'password'     目的 创建用 ...

  7. ASP.NET MVC - NPOI读取Excel

    引入: using System; using System.Data; using System.IO; using NPOI.SS.UserModel; using NPOI.XSSF.UserM ...

  8. 一个是EF内联多表查询,一个是EF中写SQL文。

    public IList<MenuModel> GetAllMenu() { using (IMMEntities context = new IMMEntities()) { var m ...

  9. linux 终端命令行的快捷键列表

    终端有很多快捷键,不太好记,常用的在这里 Ctrl+r 实现快速检索使用过的历史命令.Ctrl+r中r是retrieve中r.Ctrl+a:光标回到命令行首. (a:ahead)Ctrl+e:光标回到 ...

  10. mac 电脑连接linux 服务器

    Mac 电脑下连接Linux服务器 命令: ssh -p 端口号(22) 用户名@ip OK,输入密码,搞定