OpenCores
URL https://opencores.org/ocsvn/dbg_interface/dbg_interface/trunk

Subversion Repositories dbg_interface

[/] [dbg_interface/] [tags/] [rel_15/] [rtl/] [verilog/] [dbg_wb.v] - Diff between revs 86 and 87

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 86 Rev 87
Line 41... Line 41...
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// CVS Revision History
// CVS Revision History
//
//
// $Log: not supported by cvs2svn $
// $Log: not supported by cvs2svn $
 
// Revision 1.3  2003/12/23 16:22:46  mohor
 
// Tmp version.
 
//
// Revision 1.2  2003/12/23 15:26:26  mohor
// Revision 1.2  2003/12/23 15:26:26  mohor
// Small fix.
// Small fix.
//
//
// Revision 1.1  2003/12/23 15:09:04  mohor
// Revision 1.1  2003/12/23 15:09:04  mohor
// New directory structure. New version of the debug interface.
// New directory structure. New version of the debug interface.
Line 124... Line 127...
 
 
reg           tdo_o;
reg           tdo_o;
 
 
reg [`WB_DR_LEN -1:0] dr;
reg [`WB_DR_LEN -1:0] dr;
wire enable;
wire enable;
reg [5:0] cnt;
reg [1:0] cmd_cnt;
 
reg [5:0] data_cnt;
reg [5:0] crc_cnt;
reg [5:0] crc_cnt;
wire      cnt_end;
wire      cmd_cnt_end;
 
wire      data_cnt_end;
wire      crc_cnt_end;
wire      crc_cnt_end;
reg       crc_cnt_end_q;
reg       crc_cnt_end_q;
 
reg       status_reset_en;
 
 
 
 
reg [`STATUS_CNT -1:0]      status_cnt;
reg [`STATUS_CNT -1:0]      status_cnt;
wire status_cnt_end;
wire status_cnt_end;
 
 
Line 140... Line 146...
assign shift_crc_o = wishbone_ce_i & status_cnt_end & shift_dr_i;  // Signals dbg module to shift out the CRC
assign shift_crc_o = wishbone_ce_i & status_cnt_end & shift_dr_i;  // Signals dbg module to shift out the CRC
 
 
 
 
always @ (posedge tck_i)
always @ (posedge tck_i)
begin
begin
  if (enable & (~cnt_end))
  if (enable & (~data_cnt_end))
    dr <= #1 {tdi_i, dr[`WB_DR_LEN -1:1]};
    dr <= #1 {tdi_i, dr[`WB_DR_LEN -1:1]};
end
end
 
 
 
 
always @ (posedge tck_i or posedge trst_i)
always @ (posedge tck_i or posedge trst_i)
begin
begin
  if (trst_i)
  if (trst_i)
    cnt <= #1 'h0;
    cmd_cnt <= #1 'h0;
  else if (update_dr_i)
  else if (update_dr_i)
    cnt <= #1 'h0;
    cmd_cnt <= #1 'h0;
  else if (enable & (~cnt_end))
  else if (enable & (~cmd_cnt_end))
    cnt <= #1 cnt + 1'b1;
    cmd_cnt <= #1 cmd_cnt + 1'b1;
end
end
 
 
assign cnt_end = cnt == `WB_DR_LEN;
 
 
always @ (posedge tck_i or posedge trst_i)
 
begin
 
  if (trst_i)
 
    data_cnt <= #1 'h0;
 
  else if (update_dr_i)
 
    data_cnt <= #1 'h0;
 
  else if (enable & cmd_cnt_end & (~data_cnt_end))
 
    data_cnt <= #1 data_cnt + 1'b1;
 
end
 
 
 
 
// crc counter
// crc counter
always @ (posedge tck_i or posedge trst_i)
always @ (posedge tck_i or posedge trst_i)
begin
begin
  if (trst_i)
  if (trst_i)
    crc_cnt <= #1 'h0;
    crc_cnt <= #1 'h0;
  else if(enable & cnt_end & (~crc_cnt_end))
  else if(enable & data_cnt_end & (~crc_cnt_end))
    crc_cnt <= #1 crc_cnt + 1'b1;
    crc_cnt <= #1 crc_cnt + 1'b1;
  else if (update_dr_i)
  else if (update_dr_i)
    crc_cnt <= #1 'h0;
    crc_cnt <= #1 'h0;
end
end
 
 
 
assign cmd_cnt_end  = cmd_cnt  == 2'h3;
 
assign data_cnt_end = data_cnt == 6'd48;
assign crc_cnt_end = crc_cnt == 6'd32;
assign crc_cnt_end = crc_cnt == 6'd32;
 
 
always @ (posedge tck_i)
always @ (posedge tck_i)
begin
begin
  crc_cnt_end_q <= #1 crc_cnt_end;
  crc_cnt_end_q <= #1 crc_cnt_end;
Line 243... Line 260...
  else if (crc_cnt_end & (~crc_cnt_end_q))
  else if (crc_cnt_end & (~crc_cnt_end_q))
  begin
  begin
    tdo_o = crc_match_i;
    tdo_o = crc_match_i;
    TDO_WISHBONE = "crc_match_i";
    TDO_WISHBONE = "crc_match_i";
  end
  end
  else
  else if (crc_cnt_end)
  begin
  begin
    tdo_o = status[0];
    tdo_o = status[0];
    TDO_WISHBONE = "status";
    TDO_WISHBONE = "status";
  end
  end
 
  else
 
    begin
 
      tdo_o = 1'b0;
 
      TDO_WISHBONE = "zero while CRC is shifted in";
 
    end
end
end
 
 
assign crc_en_o = crc_cnt_end & (~status_cnt_end) & shift_dr_i;
assign crc_en_o = crc_cnt_end & (~status_cnt_end) & shift_dr_i;
 
 
reg [2:0]  cmd;
reg [2:0]  cmd, cmd_old;
reg [31:0] adr;
reg [31:0] adr;
reg [15:0] len;
reg [15:0] len;
reg start_tck;
reg start_tck;
reg start_sync1;
reg start_sync1;
reg start_wb;
reg start_wb;
Line 265... Line 287...
always @ (posedge tck_i)
always @ (posedge tck_i)
begin
begin
  if(crc_cnt_end & (~crc_cnt_end_q) & crc_match_i)
  if(crc_cnt_end & (~crc_cnt_end_q) & crc_match_i)
    begin
    begin
      cmd <= #1 dr[2:0];
      cmd <= #1 dr[2:0];
 
      cmd_old <= #1 cmd;
      adr <= #1 dr[34:3];
      adr <= #1 dr[34:3];
      len <= #1 dr[50:35];
      len <= #1 dr[50:35];
      start_tck <= #1 1'b1;
      start_tck <= #1 1'b1;
    end
    end
  else
  else
Line 298... Line 321...
 
 
 
 
 
 
always @ (posedge wb_clk_i)
always @ (posedge wb_clk_i)
begin
begin
//  if (start_wb & (~start_wb_q) & (cmd > `WB_STATUS) & (cmd < `WB_GO)) // Setting starting address
 
  if (start_wb & (~start_wb_q) & (cmd !== `WB_STATUS) & (cmd !== `WB_GO)) // Setting starting address
  if (start_wb & (~start_wb_q) & (cmd !== `WB_STATUS) & (cmd !== `WB_GO)) // Setting starting address
    wb_adr_o <= #1 adr;
    wb_adr_o <= #1 adr;
  else if (wb_ack_i)
  else if (wb_ack_i)
    begin
    begin
      if ((cmd == `WB_WRITE8) | (cmd == `WB_READ8))
      if ((cmd == `WB_WRITE8) | (cmd == `WB_READ8))
Line 438... Line 460...
begin
begin
  if (wb_rst_i)
  if (wb_rst_i)
    wb_error <= #1 1'b0;
    wb_error <= #1 1'b0;
  else if(wb_err_i)
  else if(wb_err_i)
    wb_error <= #1 1'b1;
    wb_error <= #1 1'b1;
  else if(wb_ack_i | acc_cnt_limit)
  else if((wb_ack_i | acc_cnt_limit) & status_reset_en) // error remains active until STATUS read is performed
    wb_error <= #1 1'b0;
    wb_error <= #1 1'b0;
end
end
 
 
always @ (posedge tck_i)
always @ (posedge tck_i)
begin
begin
Line 455... Line 477...
begin
begin
  if (wb_rst_i)
  if (wb_rst_i)
    wb_timeout <= #1 1'b0;
    wb_timeout <= #1 1'b0;
  else if(acc_cnt_limit)
  else if(acc_cnt_limit)
    wb_timeout <= #1 1'b1;
    wb_timeout <= #1 1'b1;
  else if(wb_ack_i | wb_err_i)
  else if((wb_ack_i | wb_err_i) & status_reset_en)  // error remains active until STATUS read is performed
    wb_timeout <= #1 1'b0;
    wb_timeout <= #1 1'b0;
end
end
 
 
always @ (posedge tck_i)
always @ (posedge tck_i)
begin
begin
  wb_timeout_sync <= #1 wb_timeout;
  wb_timeout_sync <= #1 wb_timeout;
  wb_timeout_tck  <= #1 wb_timeout_sync;
  wb_timeout_tck  <= #1 wb_timeout_sync;
end
end
 
 
 
 
 
 
 
// wb_timeout and wb_error are locked until WB_STATUS is performed
 
always @ (posedge tck_i or posedge trst_i)
 
begin
 
  if (trst_i)
 
    status_reset_en <= 1'b0;
 
  else if((cmd_old == `WB_STATUS) & (cmd !== `WB_STATUS))
 
    status_reset_en <= #1 1'b1;
 
  else
 
    status_reset_en <= #1 1'b0;
 
end
 
 
endmodule
endmodule
 
 
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.