在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: bjh552125624

[求助] 请教一个关于srio gen2的问题

[复制链接]
 楼主| 发表于 2017-7-18 10:08:10 | 显示全部楼层
回复 19# pumpkin
是不是说这些地址是在执行读操作时候可以指定要读的存储器地址。那么在写操作时,这个地址的是指定写的地址吗?看程序中给人的感觉是数据直接到了收端啊,按照正常的操作,我在后面接一个FIFO把数据缓存下来不就OK了。不太明白在写操作时帧头的地址起到了一个什么样的作用
 楼主| 发表于 2017-7-19 14:34:28 | 显示全部楼层
别沉啊
求助各路大神
发表于 2017-7-19 15:20:34 | 显示全部楼层
非常感谢,楼主的
发表于 2017-7-19 15:21:10 | 显示全部楼层
7777777777777777777
发表于 2017-7-19 15:41:32 | 显示全部楼层
NWRITE 和SWRITE的区别。还真是把人问倒了。
NWRITE: 普通写操作。可以直接往对端内存写数。一个包最大为256bytes,不要求接收端响应。
SWRITE:流写(Stream Write),数据长度必须是8字节的整数倍,不要求接收端响应。
我这里就感觉只有数据量大小的问题。
另外我有问题向你们请教:假设发送数据好了,用hello format,nwrite的方式,首先给s_axis_ireq_tdata引线一个64位的包头,然后开始发送64位的数据,在NWRITE的模式下,我认为,这个64位的数据可以被屏蔽掉一部分,但是要是swrite的话就不能屏蔽。我知道这样理解对不对。
还有所说的地址问题,包头中包含着写地址,接收端就按照地址,后面的接收端我感觉不太清楚。还有就是源地址,和目标地址怎么体现,完整具体的流程谁给讲一讲。
发表于 2017-7-19 18:42:20 | 显示全部楼层
回复 20# bjh552125624


   FPGA向DSP发起NRead和NWrite,这个地址是指的DSP的地址。DSP收到NWrite报文,会把数据写入自己的存储器对应地址的地方。NRead类似。

如果一个FPGA作为EP,收到NWrite后,怎么解释这个地址,随便。
 楼主| 发表于 2017-7-19 19:52:01 | 显示全部楼层
回复 26# pumpkin

好的
万分感谢!!
我自己写个简单的发送程序去上板试试
发表于 2017-7-19 20:21:10 | 显示全部楼层
回复 26# pumpkin


   

楼主。关于链路的链接应该怎样理解。还有就是NWRITE还有SWRITE的区别,只用一个ip核能否做自环测试。
发表于 2017-7-21 09:53:41 | 显示全部楼层
回复 27# bjh552125624


    楼主,你的实验成功了吗?我想参考一下您的FPGA端使用srio发送数据的代码。我自己尝试写过,但是仿真不出来。邮箱:shijiefei2012@163.com
如果您觉得技术敏感,我希望您给讲一讲思路,用fpga发送数据的思路,需要注意的地方。
期待您的回复。
发表于 2017-7-21 11:42:05 | 显示全部楼层
我写的fpga端的发送程序:
捕获.PNG
程序如下:很简单,共3个文件,包含了激励文件。我的打算就是用单个ip核,自己发送自己接收,仿真正在进行,非常慢,一会了,还没出现显示波形的界面,希望大家看看,我的思路是否有错,哪里有错大家批评指正,没有人交流太痛苦。
第一个模块:NWRITE数据产生模块
`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////

module srio_nwrite_gen(
    input             log_clk,
    input             log_rst,
    input             val_ireq_tready,
    input             link_initialized,
    output reg        val_ireq_tvalid,
    output reg        val_ireq_tlast,
    output reg [7:0]  val_ireq_tkeep,
    output reg [63:0] val_ireq_tdata,
    output     [31:0] val_ireq_tuser
    );
localparam [7:0] src_id=8'hff;
localparam [7:0] dest_id=8'hff;
localparam [3:0] NWRITE=4'd5;
localparam [3:0] TNWR  =4'd4;        
localparam [64*5-1:0] nwrite_instruction = {
      // NWRITEs
      {8'h66, NWRITE, TNWR,1'b0,2'b00,1'b0,8'h17,2'b00,   34'h300000000},
      {64'h0000000000000000},
      {64'h0000000000000001},
      {64'h0000000000000002},
      {64'h0000000000000003}};
wire [63:0] instruction[0:4];     
genvar ii;
generate
  for (ii = 0; ii <5; ii = ii + 1) begin : instruction_gen
    assign instruction[ii] = nwrite_instruction[(ii+1)*64-1:ii*64];      
    end
    endgenerate
reg [4:0] i;
//reg val_ireq_tlast;
always @(posedge log_clk or posedge log_rst)
  if(log_rst)
    begin
    val_ireq_tvalid<=1'b0;
    val_ireq_tdata<=64'd0;
    val_ireq_tlast<=1'b0;
    i<=4'd0;
    end
  else
    begin
    if(val_ireq_tready&&link_initialized)
      begin
      case(i)
        0:
          begin  
           val_ireq_tvalid<=1'b1;
           val_ireq_tdata<=instruction[0];
           val_ireq_tlast<=1'b0;
           val_ireq_tkeep<=8'hff;
           
           i<=i+1'b1;
          end
        1,2,3:
          begin
          val_ireq_tvalid<=1'b1;
          val_ireq_tdata<=instruction;;      
          val_ireq_tlast<=1'b0;
          i<=i+1'b1;
          end
        4:
          begin
          val_ireq_tvalid<=1'b1;
          val_ireq_tdata<=instruction;
          val_ireq_tkeep<=8'hff;        
          val_ireq_tlast<=1'b1;
          i<=i+1'b1;        
          end
        5:
          begin
           val_ireq_tlast<=1'b0;
           i<=i+1'b1;         
          end
        default:
          begin
          val_ireq_tvalid<=1'b0;
          val_ireq_tdata<=64'd0;
          val_ireq_tlast<=1'b0;
          end
      endcase
      end
      else
        begin
       val_ireq_tvalid<=1'b0;
       val_ireq_tdata<=64'd0;
       val_ireq_tlast<=1'b0;
       end
      end


assign    val_ireq_tuser  = {8'h0,src_id,8'h0, dest_id};

endmodule
第二个:第一个模块和ip核的连线
module top(
  input sys_rst,
  input sys_clkn,
  input sys_clkp,
  input phy_link_reset,
  output link_initialized,
  output port_initialized,
  output log_rst,
  output srio_txn0,
  output srio_txp0

    );
//wire log_rst;
wire [7:0] val_ireq_tkeep;
wire [31:0] val_ireq_tuser;
wire [63:0] val_ireq_tdata;
wire val_ireq_tvalid;
wire log_clk_out;
wire val_ireq_tready;
wire val_ireq_tlast;
srio_nwrite_gen U1(
  .log_clk(log_clk_out),
  .log_rst(log_rst),
  .link_initialized(link_initialized),
  .val_ireq_tlast(val_ireq_tlast),
  .val_ireq_tvalid(val_ireq_tvalid),
  .val_ireq_tkeep(val_ireq_tkeep),
  .val_ireq_tuser(val_ireq_tuser),
  .val_ireq_tready(val_ireq_tready),
  .val_ireq_tdata(val_ireq_tdata)
);   

//wire srio_txn0;
//wire srio_txp0;
rio ip_rio(
  .log_clk_out(log_clk_out),
  .log_rst_out(log_rst),
  .s_axis_ireq_tdata(val_ireq_tdata),
  .s_axis_ireq_tkeep(val_ireq_tkeep),
  .s_axis_ireq_tvalid(val_ireq_tvalid),
  .s_axis_ireq_tuser(val_ireq_tuser),
  .s_axis_ireq_tready(val_ireq_tready),
  .s_axis_ireq_tlast(val_ireq_tlast),
  .link_initialized(link_initialized),
  .port_initialized(port_initialized),
  .phy_link_reset(phy_link_reset),
  .srio_txn0(srio_txn0),
  .srio_txp0(srio_txp0),
  .srio_rxn0(srio_txn0),
  .srio_rxp0(srio_txp0),
  .sys_clkn(sys_clkn),
  .sys_clkp(sys_clkp),
  .sys_rst(sys_rst)
);

//rio ip_rio_rx(
//  .log_clk_out(log_clk_out),
////  .s_axis_ireq_tdata(val_ireq_tdata),
////  .s_axis_ireq_tkeep(val_ireq_tkeep),
////  .s_axis_ireq_tvalid(val_ireq_tvalid),
////  .s_axis_ireq_tuser(val_ireq_tuser),
////  .s_axis_ireq_tready(val_ireq_tready),
////  .s_axis_ireq_tlast(val_ireq_tlast),
//  .link_initialized(link_initialized),
//  .port_initialized(port_initialized),
//  .phy_link_reset(phy_link_reset),
////  .srio_txn0(srio_txn0),
////  .srio_txp0(srio_txp0),
//  .srio_rxn0(srio_txn0),
//  .srio_rxp0(srio_txp0),
//  .sys_clkn(sys_clkn),
//  .sys_clkp(sys_clkp),
//  .sys_rst(sys_rst)
//);
endmodule
第三:激励文件
module sim(
  input log_rst,
  input sys_rst,
  input phy_link_reset,
  input sys_clkn,
  input sys_clkp,
  output link_initialized,
  output port_initialized,
  output srio_txn0,
  output srio_txp0
    );
top sim_top(
//  .log_rst(log_rst),
  .sys_rst(sys_rst),
  .phy_link_reset(phy_link_reset),
  .sys_clkn(sys_clkn),
  .sys_clkp(sys_clkp),
  .port_initialized(port_initialized),
  .link_initialized(link_initialized),
  .srio_txn0(srio_txn0),
  .srio_txp0(srio_txp0)
);

reg sys_clkp_reg;
initial begin
    sys_clkp_reg = 1'b0;
    forever #40 sys_clkp_reg = ~sys_clkp_reg;
  end
  assign sys_clkn = ~sys_clkp_reg;
  assign sys_clkp=sys_clkp_reg;

//initial begin
//    system_rst_reg=1;b1;
//    #2000
//    system_rst_reg=1'b0;
//end

  // reset generator
  reg phy_link_reset_reg;
//  reg log_rst_reg;
//  initial begin
//    log_rst_reg = 1'b1;
//////    phy_link_reset_reg=1'b1;
//    #1000
//    log_rst_reg = 1'b0;
//////    phy_link_reset_reg=1'b0;
//  end
  
   initial begin
//     log_rst_reg = 1'b1;
     phy_link_reset_reg=1'b1;
     #1000
//     log_rst_reg = 1'b0;
     phy_link_reset_reg=1'b0;
   end
   reg sys_rst_reg;
   initial begin
     sys_rst_reg=1'b1;
     #2000
     sys_rst_reg=1'b0;
   end
//  assign log_rst=log_rst_reg;
  assign phy_link_reset=phy_link_reset_reg;
  assign sys_rst=sys_rst_reg;

endmodule
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /3 下一条

×

小黑屋| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-4-23 15:51 , Processed in 0.029739 second(s), 7 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表