首先这是产生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. 关于vue监听dom与传值问题

    1. 代码初始化一次执行部分属性为空的情况 原因: 异步加载 + 立马 传值时 直接渲染 dom里面  能实时更新 (无影响) 不能直接dom中渲染(有影响)     解决方法:需要通过监听的方式来处 ...

  2. 20165237 2017-2018-2 《Java程序设计》第3周学习总结

    20165237 2017-2018-2 <Java程序设计>第3周学习总结 教材学习内容总结 1.面向机器语言:类如汇编语言. 2.面向过程语言:类如C语言(但是相当于说话缺少主语). ...

  3. 集合-HashSet

    参考博客:https://www.cnblogs.com/runwulingsheng/p/5208762.html https://www.cnblogs.com/ysocean/p/6555373 ...

  4. LeetCode one Two Sum

    LeetCode one Two Sum (JAVA) 简介:给定一个数组和目标值,寻找数组中符合求和条件的两个数. 问题详解: 给定一个数据类型为int的数组,一个数据类型为int的目标值targe ...

  5. Docker学习笔记1

    来源:第一本Docker书 基础命令 安装: apt-get install docker 启动: service docker start 创建并运行第一个容器: docker run -i -t ...

  6. CF1100B Build a Contest

    题目地址:CF1100B Build a Contest 水题,比赛时没想就敲了个 \(O(n^2)\) 的暴力上去,结果过了Pretest,然后被Hack了 两个数组: \(c_i\) 表示 \(i ...

  7. Python-简单打印进度条

    import sys,time ): sys.stdout.write("#") sys.stdout.flush() time.sleep(0.1) #sys.stdout.wr ...

  8. axios请求接口的踩坑之路

    1.跨域问题除了前端安装插件还需要后端php设置,设置如下 Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, ...

  9. DHCP Server (推荐使用Windows)

    一些小的服务 windows做的比linux好 DHCP服务概述: 名称:DHCP (Dynamic Host Configuration Protocol --动态主机配置协议) 功能:是一个局域网 ...

  10. dynamic详解

    一.简介 在通过 dynamic 类型实现的操作中,该类型的作用是绕过编译时类型检查, 改为在运行时解析这些操作. dynamic 类型简化了对 COM API(例如 Office Automatio ...