DUT(device under test)


这个路由器有16个输入和16个输出端口,每个输入输出端口包括3个信号,即连续的数据,帧,和有效信号。这些信号统一采用位向量形式展现。如果要驱动一个独立的端口,比如说驱动端口3,那么对应的信号则是din[3],fram_n[3],和valid_n[3]。同理,如果我们要采样一个输出端口7,那么我们采样的相对应信号则是dout[7],frame_n[7]和valido_n[7].如下面这幅图所示:


对于这个路由器的描述:

  • 单一上升沿时钟
  • 输入和输出数据都是连续的,即每个时钟周期出一位数据
  • 数据包的长度以可变长度发送
  • 数据包可以从任何输入端口路由到任何到输出端口
  • 无内部缓冲或者广播

输入数据包的结构:

  • frame_n
    下降沿意味着数据包的第一位
    上升沿意味着数据包的最后一位

  • din
    数据头和负载(我理解为传输的有效数据)

  • valid_n
    该信号为低表示数据有效,否则认为数据无效。

    输出数据包的时序图如下,需要注意的是只有frameo_n和valido_n都是低电平时才认为输出的数据是有效的。

    对于复位信号:
    当拉低复位信号后,需要注意的是在通过这个路由器发送数据包之前一定要等待15个时钟周期,在这个15个时钟周期内,路由器在执行自刷新的操作。否则将会刷新失败,后续无法正常工作。
    下面贴出router.v的代码:

module router(reset_n, clock, frame_n, valid_n, din, dout, busy_n, valido_n, frameo_n);input reset_n, clock;input [15:0] din, frame_n, valid_n;output [15:0] dout, valido_n, busy_n, frameo_n;wire reset;
wire [15:0] arb0, arb1, arb2, arb3, arb4, arb5, arb6, arb7;
wire [15:0] di;
wire [15:0] arb8, arb9, arb10, arb11, arb12, arb13, arb14, arb15;
wire [15:0] arb_head, okstep;tri0 [15:0] doint;
tri1 [15:0] valdoint_n, frameoint_n;reg [15:0] dout, valido_n, frameo_n;
reg [3:0] arb_head_num;assign di = din;                                            //将din赋值给diassign reset = ~reset_n;                                    //将reset_n信号取反后赋值给reset
assign arb_head = 1 << arb_head_num;                     //将arb_head_num左移一位赋值给arb_headrtslice rts0(reset,clock,frame_n[0],valid_n[0],di[0],arb0,arb1,arb_head[0],okstep[0],doint,busy_n[0],valdoint_n,frameoint_n);
rtslice rts1(reset,clock,frame_n[1],valid_n[1],di[1],arb1,arb2,arb_head[1],okstep[1],doint,busy_n[1],valdoint_n,frameoint_n);
rtslice rts2(reset,clock,frame_n[2],valid_n[2],di[2],arb2,arb3,arb_head[2],okstep[2],doint,busy_n[2],valdoint_n,frameoint_n);
rtslice rts3(reset,clock,frame_n[3],valid_n[3],di[3],arb3,arb4,arb_head[3],okstep[3],doint,busy_n[3],valdoint_n,frameoint_n);
rtslice rts4(reset,clock,frame_n[4],valid_n[4],di[4],arb4,arb5,arb_head[4],okstep[4],doint,busy_n[4],valdoint_n,frameoint_n);
rtslice rts5(reset,clock,frame_n[5],valid_n[5],di[5],arb5,arb6,arb_head[5],okstep[5],doint,busy_n[5],valdoint_n,frameoint_n);
rtslice rts6(reset,clock,frame_n[6],valid_n[6],di[6],arb6,arb7,arb_head[6],okstep[6],doint,busy_n[6],valdoint_n,frameoint_n);
rtslice rts7(reset,clock,frame_n[7],valid_n[7],di[7],arb7,arb8,arb_head[7],okstep[7],doint,busy_n[7],valdoint_n,frameoint_n);
rtslice rts8(reset,clock,frame_n[8],valid_n[8],di[8],arb8,arb9,arb_head[8],okstep[8],doint,busy_n[8],valdoint_n,frameoint_n);
rtslice rts9(reset,clock,frame_n[9],valid_n[9],di[9],arb9,arb10,arb_head[9],okstep[9],doint,busy_n[9],valdoint_n,frameoint_n);
rtslice rts10(reset,clock,frame_n[10],valid_n[10],di[10],arb10,arb11,arb_head[10],okstep[10],doint,busy_n[10],valdoint_n,frameoint_n);
rtslice rts11(reset,clock,frame_n[11],valid_n[11],di[11],arb11,arb12,arb_head[11],okstep[11],doint,busy_n[11],valdoint_n,frameoint_n);
rtslice rts12(reset,clock,frame_n[12],valid_n[12],di[12],arb12,arb13,arb_head[12],okstep[12],doint,busy_n[12],valdoint_n,frameoint_n);
rtslice rts13(reset,clock,frame_n[13],valid_n[13],di[13],arb13,arb14,arb_head[13],okstep[13],doint,busy_n[13],valdoint_n,frameoint_n);
rtslice rts14(reset,clock,frame_n[14],valid_n[14],di[14],arb14,arb15,arb_head[14],okstep[14],doint,busy_n[14],valdoint_n,frameoint_n);
//rtslicef rts15(reset,clock,frame_n[15],valid_n[15],di[15],
//  arb15,arb0,arb_head[15],okstep[15],
//  doint,busy_n[15],valdoint_n,frameoint_n);
rtslice rts15(reset,clock,frame_n[15],valid_n[15],di[15],arb15,arb0,arb_head[15],okstep[15],doint,busy_n[15],valdoint_n,frameoint_n);always @(posedge reset)
beginarb_head_num <= 4'b0;
endalways @(posedge clock)
begindout <= doint;valido_n <= valdoint_n;frameo_n <= frameoint_n;if (reset == 1'b0)beginif (okstep[arb_head_num] == 1'b1)arb_head_num <= arb_head_num + 1;end
endendmodule  //router//模块rtslice开始
module rtslice(reset,clock,frame_n,valid_n,din,iarbin,arbout,arbhead,okstep,dout,busy_n,valido_n,frameo_n);input reset,clock,frame_n,valid_n,din, arbhead;
output busy_n,okstep;
input  [15:0] iarbin;
output [15:0] arbout,dout,valido_n;
inout [15:0] frameo_n;reg [4:0] addrsf, addrsel;
reg [5:0] addrfsr;
reg din1, busy_n, frame1_n, frame2_n, vald1_n, arbena;wire [15:0] dout;
wire [15:0] arbin;
wire busy1_n;
wire [4:0] addrsel_g;reg [3:0] i; assign arbin = (arbhead == 1'b1) ? 16'hffff : iarbin;assign addrsel_g = (arbena == 1'b1) ? addrsel : 5'h0;//    always @ ( posedge clock)
//  beginassign dout[0] =(addrsel_g == 5'h10 && arbin[0] == 1'b1) ? din1 : 1'bZ;
//  endassign dout[1] =(addrsel_g == 5'h11 && arbin[1] == 1'b1) ? din1 : 1'bZ;assign dout[2] =(addrsel_g == 5'h12 && arbin[2] == 1'b1) ? din1 : 1'bZ;assign dout[3] =(addrsel_g == 5'h13 && arbin[3] == 1'b1) ? din1 : 1'bZ;assign dout[4] =(addrsel_g == 5'h14 && arbin[4] == 1'b1) ? din1 : 1'bZ;assign dout[5] =(addrsel_g == 5'h15 && arbin[5] == 1'b1) ? din1 : 1'bZ;assign dout[6] =(addrsel_g == 5'h16 && arbin[6] == 1'b1) ? din1 : 1'bZ;assign dout[7] =(addrsel_g == 5'h17 && arbin[7] == 1'b1) ? din1 : 1'bZ;assign dout[8] =(addrsel_g == 5'h18 && arbin[8] == 1'b1) ? din1 : 1'bZ;assign dout[9] =(addrsel_g == 5'h19 && arbin[9] == 1'b1) ? din1 : 1'bZ;assign dout[10] =(addrsel_g == 5'h1a && arbin[10] == 1'b1) ? din1 : 1'bZ;assign dout[11] =(addrsel_g == 5'h1b && arbin[11] == 1'b1) ? din1 : 1'bZ;assign dout[12] =(addrsel_g == 5'h1c && arbin[12] == 1'b1) ? din1 : 1'bZ;assign dout[13] =(addrsel_g == 5'h1d && arbin[13] == 1'b1) ? din1 : 1'bZ;assign dout[14] =(addrsel_g == 5'h1e && arbin[14] == 1'b1) ? din1 : 1'bZ;assign dout[15] =(addrsel_g == 5'h1f && arbin[15] == 1'b1) ? din1 : 1'bZ;assign frameo_n[0] =(addrsel_g == 5'h10 && arbin[0] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[1] =(addrsel_g == 5'h11 && arbin[1] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[2] =(addrsel_g == 5'h12 && arbin[2] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[3] =(addrsel_g == 5'h13 && arbin[3] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[4] =(addrsel_g == 5'h14 && arbin[4] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[5] =(addrsel_g == 5'h15 && arbin[5] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[6] =(addrsel_g == 5'h16 && arbin[6] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[7] =(addrsel_g == 5'h17 && arbin[7] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[8] =(addrsel_g == 5'h18 && arbin[8] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[9] =(addrsel_g == 5'h19 && arbin[9] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[10] =(addrsel_g == 5'h1a && arbin[10] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[11] =(addrsel_g == 5'h1b && arbin[11] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[12] =(addrsel_g == 5'h1c && arbin[12] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[13] =(addrsel_g == 5'h1d && arbin[13] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[14] =(addrsel_g == 5'h1e && arbin[14] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[15] =(addrsel_g == 5'h1f && arbin[15] == 1'b1) ? frame1_n : 1'bZ;assign valido_n[0] =(addrsel_g == 5'h10 && arbin[0] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[1] =(addrsel_g == 5'h11 && arbin[1] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[2] =(addrsel_g == 5'h12 && arbin[2] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[3] =(addrsel_g == 5'h13 && arbin[3] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[4] =(addrsel_g == 5'h14 && arbin[4] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[5] =(addrsel_g == 5'h15 && arbin[5] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[6] =(addrsel_g == 5'h16 && arbin[6] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[7] =(addrsel_g == 5'h17 && arbin[7] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[8] =(addrsel_g == 5'h18 && arbin[8] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[9] =(addrsel_g == 5'h19 && arbin[9] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[10] =(addrsel_g == 5'h1a && arbin[10] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[11] =(addrsel_g == 5'h1b && arbin[11] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[12] =(addrsel_g == 5'h1c && arbin[12] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[13] =(addrsel_g == 5'h1d && arbin[13] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[14] =(addrsel_g == 5'h1e && arbin[14] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[15] =(addrsel_g == 5'h1f && arbin[15] == 1'b1) ? vald1_n : 1'bZ;assign arbout[0] =(addrsel_g != 5'h10 && arbin[0] == 1'b1) ? 1'b1 : 1'b0;assign arbout[1] =(addrsel_g != 5'h11 && arbin[1] == 1'b1) ? 1'b1 : 1'b0;assign arbout[2] =(addrsel_g != 5'h12 && arbin[2] == 1'b1) ? 1'b1 : 1'b0;assign arbout[3] =(addrsel_g != 5'h13 && arbin[3] == 1'b1) ? 1'b1 : 1'b0;assign arbout[4] =(addrsel_g != 5'h14 && arbin[4] == 1'b1) ? 1'b1 : 1'b0;assign arbout[5] =(addrsel_g != 5'h15 && arbin[5] == 1'b1) ? 1'b1 : 1'b0;assign arbout[6] =(addrsel_g != 5'h16 && arbin[6] == 1'b1) ? 1'b1 : 1'b0;assign arbout[7] =(addrsel_g != 5'h17 && arbin[7] == 1'b1) ? 1'b1 : 1'b0;assign arbout[8] =(addrsel_g != 5'h18 && arbin[8] == 1'b1) ? 1'b1 : 1'b0;assign arbout[9] =(addrsel_g != 5'h19 && arbin[9] == 1'b1) ? 1'b1 : 1'b0;assign arbout[10] =(addrsel_g != 5'h1a && arbin[10] == 1'b1) ? 1'b1 : 1'b0;assign arbout[11] =(addrsel_g != 5'h1b && arbin[11] == 1'b1) ? 1'b1 : 1'b0;assign arbout[12] =(addrsel_g != 5'h1c && arbin[12] == 1'b1) ? 1'b1 : 1'b0;assign arbout[13] =(addrsel_g != 5'h1d && arbin[13] == 1'b1) ? 1'b1 : 1'b0;assign arbout[14] =(addrsel_g != 5'h1e && arbin[14] == 1'b1) ? 1'b1 : 1'b0;assign arbout[15] =(addrsel_g != 5'h1f && arbin[15] == 1'b1) ? 1'b1 : 1'b0;assign busy1_n = (arbout != arbin) ? 1'b1 : ~addrsel[4];assign okstep  = (arbout == arbin) ? 1'b1 : 1'b0;always @(posedge reset)beginif (reset == 1'b1)beginaddrsel <= 5'b0;addrfsr  <= 6'b0;arbena <= 1'b0;endendalways @(posedge clock)beginframe1_n <= frame_n;frame2_n <= frame1_n;busy_n <= busy1_n;din1 <= din;vald1_n <= valid_n | ~busy_n ;if (reset == 1'b0)beginif (frame2_n != frame1_n && frame1_n == 1'b1)begin // frame is now inactiveaddrsel <= 5'b0;   // clear the address registeraddrfsr <= 6'b0;  // clear the address flag reg.arbena <= 1'b0;endelsebeginif (addrsel[4] == 1'b1 && frameo_n[addrsel[3:0]] == 1'b1)arbena <= 1'b1;endif (frame1_n != frame_n && frame_n == 1'b0)addrfsr <= 6'b11_1111;      if (addrfsr[5:4] == 2'b10)addrsel <= {addrsf[0],addrsf[1],addrsf[2],addrsf[3],addrsf[4]};if (addrfsr[4] == 1'b1) addrsf <= (addrsf << 1) | { 4'b0, din1 };if (addrfsr[5] == 1'b1) addrfsr <= addrfsr << 1;endendendmodule  //rtslicemodule rtslicef(reset,clock,frame_n,valid_n,din,iarbin,arbout,arbhead,okstep,dout,busy_n,valido_n,frameo_n);input reset,clock,frame_n,valid_n,din, arbhead;
output busy_n,okstep;
input  [15:0] iarbin;
output [15:0] arbout,dout,valido_n;
inout [15:0] frameo_n;reg [4:0] addrsf, addrsel;
reg [5:0] addrfsr;
reg din1, busy_n, frame1_n, frame2_n, vald1_n, arbena;wire [15:0] dout;
wire [15:0] arbin;
wire busy1_n;
wire [4:0] addrsel_g;assign arbin = (arbhead == 1'b1) ? 16'hffff : iarbin;assign addrsel_g = (arbena == 1'b1) ? addrsel : 5'h0;assign dout[0] =(addrsel_g == 5'h10 && arbin[0] == 1'b1) ? din1 : 1'bZ;assign dout[1] =(addrsel_g == 5'h11 && arbin[1] == 1'b1) ? din1 : 1'bZ;assign dout[2] =(addrsel_g == 5'h12 && arbin[2] == 1'b1) ? din1 : 1'bZ;assign dout[3] =(addrsel_g == 5'h13 && arbin[3] == 1'b1) ? din1 : 1'bZ;assign dout[4] =(addrsel_g == 5'h14 && arbin[4] == 1'b1) ? din1 : 1'bZ;assign dout[5] =(addrsel_g == 5'h15 && arbin[5] == 1'b1) ? din1 : 1'bZ;assign dout[6] =(addrsel_g == 5'h16 && arbin[6] == 1'b1) ? din1 : 1'bZ;assign dout[7] =(addrsel_g == 5'h17 && arbin[7] == 1'b1) ? din1 : 1'bZ;// stuck at xassign dout[8] =
//  (addrsel_g == 5'h18 && arbin[8] == 1'b1) ? din1 : 1'bZ;(addrsel_g == 5'h18 && arbin[8] == 1'b1) ? 1'bx : 1'bZ;assign dout[9] =(addrsel_g == 5'h19 && arbin[9] == 1'b1) ? din1 : 1'bZ;assign dout[10] =(addrsel_g == 5'h1a && arbin[10] == 1'b1) ? din1 : 1'bZ;assign dout[11] =(addrsel_g == 5'h1b && arbin[11] == 1'b1) ? din1 : 1'bZ;assign dout[12] =(addrsel_g == 5'h1c && arbin[12] == 1'b1) ? din1 : 1'bZ;assign dout[13] =(addrsel_g == 5'h1d && arbin[13] == 1'b1) ? din1 : 1'bZ;assign dout[14] =(addrsel_g == 5'h1e && arbin[14] == 1'b1) ? din1 : 1'bZ;assign dout[15] =(addrsel_g == 5'h1f && arbin[15] == 1'b1) ? din1 : 1'bZ;assign frameo_n[0] =(addrsel_g == 5'h10 && arbin[0] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[1] =(addrsel_g == 5'h11 && arbin[1] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[2] =(addrsel_g == 5'h12 && arbin[2] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[3] =(addrsel_g == 5'h13 && arbin[3] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[4] =(addrsel_g == 5'h14 && arbin[4] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[5] =(addrsel_g == 5'h15 && arbin[5] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[6] =(addrsel_g == 5'h16 && arbin[6] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[7] =(addrsel_g == 5'h17 && arbin[7] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[8] =(addrsel_g == 5'h18 && arbin[8] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[9] =(addrsel_g == 5'h19 && arbin[9] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[10] =(addrsel_g == 5'h1a && arbin[10] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[11] =(addrsel_g == 5'h1b && arbin[11] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[12] =(addrsel_g == 5'h1c && arbin[12] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[13] =(addrsel_g == 5'h1d && arbin[13] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[14] =(addrsel_g == 5'h1e && arbin[14] == 1'b1) ? frame1_n : 1'bZ;assign frameo_n[15] =(addrsel_g == 5'h1f && arbin[15] == 1'b1) ? frame1_n : 1'bZ;assign valido_n[0] =(addrsel_g == 5'h10 && arbin[0] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[1] =(addrsel_g == 5'h11 && arbin[1] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[2] =(addrsel_g == 5'h12 && arbin[2] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[3] =(addrsel_g == 5'h13 && arbin[3] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[4] =(addrsel_g == 5'h14 && arbin[4] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[5] =(addrsel_g == 5'h15 && arbin[5] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[6] =(addrsel_g == 5'h16 && arbin[6] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[7] =(addrsel_g == 5'h17 && arbin[7] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[8] =(addrsel_g == 5'h18 && arbin[8] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[9] =(addrsel_g == 5'h19 && arbin[9] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[10] =(addrsel_g == 5'h1a && arbin[10] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[11] =(addrsel_g == 5'h1b && arbin[11] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[12] =(addrsel_g == 5'h1c && arbin[12] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[13] =(addrsel_g == 5'h1d && arbin[13] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[14] =(addrsel_g == 5'h1e && arbin[14] == 1'b1) ? vald1_n : 1'bZ;assign valido_n[15] =(addrsel_g == 5'h1f && arbin[15] == 1'b1) ? vald1_n : 1'bZ;assign arbout[0] =(addrsel_g != 5'h10 && arbin[0] == 1'b1) ? 1'b1 : 1'b0;assign arbout[1] =(addrsel_g != 5'h11 && arbin[1] == 1'b1) ? 1'b1 : 1'b0;assign arbout[2] =(addrsel_g != 5'h12 && arbin[2] == 1'b1) ? 1'b1 : 1'b0;assign arbout[3] =(addrsel_g != 5'h13 && arbin[3] == 1'b1) ? 1'b1 : 1'b0;assign arbout[4] =(addrsel_g != 5'h14 && arbin[4] == 1'b1) ? 1'b1 : 1'b0;assign arbout[5] =(addrsel_g != 5'h15 && arbin[5] == 1'b1) ? 1'b1 : 1'b0;assign arbout[6] =(addrsel_g != 5'h16 && arbin[6] == 1'b1) ? 1'b1 : 1'b0;assign arbout[7] =(addrsel_g != 5'h17 && arbin[7] == 1'b1) ? 1'b1 : 1'b0;assign arbout[8] =(addrsel_g != 5'h18 && arbin[8] == 1'b1) ? 1'b1 : 1'b0;assign arbout[9] =(addrsel_g != 5'h19 && arbin[9] == 1'b1) ? 1'b1 : 1'b0;assign arbout[10] =(addrsel_g != 5'h1a && arbin[10] == 1'b1) ? 1'b1 : 1'b0;assign arbout[11] =(addrsel_g != 5'h1b && arbin[11] == 1'b1) ? 1'b1 : 1'b0;assign arbout[12] =(addrsel_g != 5'h1c && arbin[12] == 1'b1) ? 1'b1 : 1'b0;assign arbout[13] =(addrsel_g != 5'h1d && arbin[13] == 1'b1) ? 1'b1 : 1'b0;assign arbout[14] =(addrsel_g != 5'h1e && arbin[14] == 1'b1) ? 1'b1 : 1'b0;assign arbout[15] =(addrsel_g != 5'h1f && arbin[15] == 1'b1) ? 1'b1 : 1'b0;assign busy1_n = (arbout != arbin) ? 1'b1 : ~addrsel[4];assign okstep  = (arbout == arbin) ? 1'b1 : 1'b0;always @(posedge reset)beginif (reset == 1'b1)beginaddrsel <= 5'b0;addrfsr  <= 6'b0;arbena <= 1'b0;endendalways @(posedge clock)beginframe1_n <= frame_n;frame2_n <= frame1_n;busy_n <= busy1_n;din1 <= din;vald1_n <= valid_n | ~busy_n ;if (reset == 1'b0)beginif (frame1_n != frame_n && frame_n == 1'b0)addrfsr <= 6'b11_1111;       if (frame2_n != frame1_n && frame1_n == 1'b1)begin  // frame is now inactiveaddrsel <= 5'b0;   // clear the address registeraddrfsr <= 6'b0;  // clear the address flag reg.arbena <= 1'b0;endelsebeginif (addrsel[4] == 1'b1 && frameo_n[addrsel[3:0]] == 1'b1)arbena <= 1'b1;endif (addrfsr[5:4] == 2'b10)addrsel <= {addrsf[0],addrsf[1],addrsf[2],addrsf[3],addrsf[4]};if (addrfsr[4] == 1'b1) addrsf <= (addrsf << 1) | { 4'b0, din1 };if (addrfsr[5] == 1'b1) addrfsr <= addrfsr << 1;endendendmodule  //rtslicef

IC验证 --- synopsys router介绍相关推荐

  1. (数字ic验证)从零开始的apb_watchdog验证模块搭建(一、功能介绍与环境搭建)

    apb_watchdog验证模块搭建(一)文章目录 文章目录 apb_watchdog验证模块搭建(一)文章目录 前言 一.apb_watchdog简单功能介绍 二.测试平台环境搭建 1.测试所用模板 ...

  2. 【数字IC验证快速入门】3、数字IC设计全流程介绍

    导读:作者有幸在中国电子信息领域的排头兵院校"电子科技大学"攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思.清华紫光.联发科技等业界顶尖集成电路相关企业面授课程, ...

  3. 【数字IC验证快速入门】1、浅谈数字IC验证,了解专栏内容,明确学习目标

    导读:作者有幸在中国电子信息领域的排头兵院校"电子科技大学"攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思.清华紫光.联发科技等业界顶尖集成电路相关企业面授课程, ...

  4. 数字IC验证工程师加班吗?工资高吗?一天是怎么样的呢?

    现阶段的IC行业,数字IC验证工程师非常紧缺,尤其是在这个行业中干了很多年的工程师那更是奇货可居.但是最近和一些在校学生和刚入行的朋友们交流的时候,发现大多数人对数字IC验证工程师的具体工作不了解,甚 ...

  5. Cadence和Synopsys工具介绍

    参考博文:https://blog.csdn.net/qq_28284627/article/details/52062031 和 https://blog.csdn.net/palaciopku/a ...

  6. (241)IC验证工程师技能树

    (241)IC验证工程师技能树 1 文章目录 1)文章目录 2)FPGA入门与提升课程介绍 3)FPGA简介 4)IC验证工程师技能树 5)技术交流 6)参考资料 2 FPGA入门与提升课程介绍 1) ...

  7. 2021秋招IC验证面经-华为/英伟达/兆易创新/ZeKu

    华为 华为一面技术面: 简历上有实习经验的,会先问实习都做过哪些东西,哪些项目,画下图简单解释一下,在你做这个项目的时候,面临的最大的挑战是什么,如何解决的? 解释一下setup time和hold ...

  8. IC验证培训——SystemVerilog通用程序库(上)

    路桑的个人网址:路科验证 -IC验证培训-数字芯片验证 作为许多验证工程师的首选语言,SystemVerilog其实并不是专门为验证设计的语言,它还是一种硬件描述语言和通用的编程语言.尽管System ...

  9. 【数字IC验证快速入门】22、SystemVerilog项目实践之AHB-SRAMC(2)(AHB协议基本要点)

    导读:作者有幸在中国电子信息领域的排头兵院校"电子科技大学"攻读研究生期间,接触到前沿的数字IC验证知识,旁听到诸如华为海思.清华紫光.联发科技等业界顶尖集成电路相关企业面授课程, ...

最新文章

  1. python编辑svg文件_SVG 文本
  2. React中的唯一标识key(用index VS id)和key的选择
  3. centos7安装php8,centos8安装php7.4
  4. gitlab 删除分支_如何删除gitlab上默认受保护的master主分支
  5. L2-039 清点代码库 (25 分)-PAT 团体程序设计天梯赛 GPLT
  6. Android adb不是内部或外部命令 问题解决
  7. CentOS7 扩容时发现 /dev/mapper/centos-home 不存在,创建后登录终端显示 -bash-4.2
  8. (Ios 实战) 自定义UITableView
  9. 拟凸函数一阶条件的证明
  10. vue 背景弹出禁止滚动_vue-蒙层弹窗里的内容滚动。外层大页面禁止滚动
  11. proteus元件图片_Proteus模型,元件库
  12. 2022年计算机软件水平考试网络工程师(中级)练习题及答案
  13. 平面与网页设计中关于颜色搭配的问题
  14. 评委对计算机知识竞赛的提问,知识竞赛抢答软件-评委评分知识竞赛答题软件...
  15. 小米路由的IPv6支持教程(纯转保存)
  16. 2.模仿小米通讯录的快速索引demo
  17. 综述 | 语义分割经典网络及轻量化模型盘点
  18. 对校招生培养工作的建议_学校招生工作的几点建议
  19. 网上商城从搭建到推广全流程细节注意点
  20. 左连接(LEFT JOIN)实例

热门文章

  1. ES9218PC SABRE HiFi SoC具有2V 耳机放大器 32位立体声移动DAC
  2. Xilinx FPGA时钟资源的使用
  3. The Mamba Mentality
  4. chrome账号登录问题
  5. Selenium学习之显式等待中的EC模块详解
  6. 响应jianyi大侠的codeArt (Codeing艺术) 的号召,借用了codeArt命名空间,整理出以前写的自定字段类型 Picker Lookup。...
  7. hda and hdb
  8. “机器学习实战”刻意练习——回归问题:线性回归(最小二乘、岭回归、逐步回归)
  9. python中int占几个字节_python int占几个字节
  10. Excel如何利用公式向导截取右侧文本指定内容?