⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tap_top.v

📁 我的一个有关jtag的程序代码,发上来看看,看个有帮助.
💻 V
📖 第 1 页 / 共 2 页
字号:
  if(~tms_pad_i & (exit1_dr | pause_dr))    pause_dr<=#1 1'b1;  else    pause_dr<=#1 1'b0;end// exit2_dr statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    exit2_dr<=#1 1'b0;  else if (tms_reset)    exit2_dr<=#1 1'b0;  else  if(tms_pad_i & pause_dr)    exit2_dr<=#1 1'b1;  else    exit2_dr<=#1 1'b0;end// update_dr statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    update_dr<=#1 1'b0;  else if (tms_reset)    update_dr<=#1 1'b0;  else  if(tms_pad_i & (exit1_dr | exit2_dr))    update_dr<=#1 1'b1;  else    update_dr<=#1 1'b0;end// select_ir_scan statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    select_ir_scan<=#1 1'b0;  else if (tms_reset)    select_ir_scan<=#1 1'b0;  else  if(tms_pad_i & select_dr_scan)    select_ir_scan<=#1 1'b1;  else    select_ir_scan<=#1 1'b0;end// capture_ir statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    capture_ir<=#1 1'b0;  else if (tms_reset)    capture_ir<=#1 1'b0;  else  if(~tms_pad_i & select_ir_scan)    capture_ir<=#1 1'b1;  else    capture_ir<=#1 1'b0;end// shift_ir statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    shift_ir<=#1 1'b0;  else if (tms_reset)    shift_ir<=#1 1'b0;  else  if(~tms_pad_i & (capture_ir | shift_ir | exit2_ir))    shift_ir<=#1 1'b1;  else    shift_ir<=#1 1'b0;end// exit1_ir statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    exit1_ir<=#1 1'b0;  else if (tms_reset)    exit1_ir<=#1 1'b0;  else  if(tms_pad_i & (capture_ir | shift_ir))    exit1_ir<=#1 1'b1;  else    exit1_ir<=#1 1'b0;end// pause_ir statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    pause_ir<=#1 1'b0;  else if (tms_reset)    pause_ir<=#1 1'b0;  else  if(~tms_pad_i & (exit1_ir | pause_ir))    pause_ir<=#1 1'b1;  else    pause_ir<=#1 1'b0;end// exit2_ir statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    exit2_ir<=#1 1'b0;  else if (tms_reset)    exit2_ir<=#1 1'b0;  else  if(tms_pad_i & pause_ir)    exit2_ir<=#1 1'b1;  else    exit2_ir<=#1 1'b0;end// update_ir statealways @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    update_ir<=#1 1'b0;  else if (tms_reset)    update_ir<=#1 1'b0;  else  if(tms_pad_i & (exit1_ir | exit2_ir))    update_ir<=#1 1'b1;  else    update_ir<=#1 1'b0;end/***********************************************************************************                                                                                 **   End: TAP State Machine                                                        **                                                                                 ***********************************************************************************//***********************************************************************************                                                                                 **   jtag_ir:  JTAG Instruction Register                                           **                                                                                 ***********************************************************************************/reg [`IR_LENGTH-1:0]  jtag_ir;          // Instruction registerreg [`IR_LENGTH-1:0]  latched_jtag_ir, latched_jtag_ir_neg;reg                   instruction_tdo;always @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    jtag_ir[`IR_LENGTH-1:0] <= #1 `IR_LENGTH'b0;  else if(capture_ir)    jtag_ir <= #1 4'b0101;          // This value is fixed for easier fault detection  else if(shift_ir)    jtag_ir[`IR_LENGTH-1:0] <= #1 {tdi_pad_i, jtag_ir[`IR_LENGTH-1:1]};endalways @ (negedge tck_pad_i)begin  instruction_tdo <= #1 jtag_ir[0];end/***********************************************************************************                                                                                 **   End: jtag_ir                                                                  **                                                                                 ***********************************************************************************//***********************************************************************************                                                                                 **   idcode logic                                                                  **                                                                                 ***********************************************************************************/reg [31:0] idcode_reg;reg        idcode_tdo;always @ (posedge tck_pad_i)begin  if(idcode_select & shift_dr)    idcode_reg <= #1 {tdi_pad_i, idcode_reg[31:1]};  else    idcode_reg <= #1 `IDCODE_VALUE;endalways @ (negedge tck_pad_i)begin    idcode_tdo <= #1 idcode_reg;end/***********************************************************************************                                                                                 **   End: idcode logic                                                             **                                                                                 ***********************************************************************************//***********************************************************************************                                                                                 **   Bypass logic                                                                  **                                                                                 ***********************************************************************************/reg  bypassed_tdo;reg  bypass_reg;always @ (posedge tck_pad_i or posedge trst_pad_i)begin  if (trst_pad_i)    bypass_reg<=#1 1'b0;  else if(shift_dr)    bypass_reg<=#1 tdi_pad_i;endalways @ (negedge tck_pad_i)begin  bypassed_tdo <=#1 bypass_reg;end/***********************************************************************************                                                                                 **   End: Bypass logic                                                             **                                                                                 ***********************************************************************************//***********************************************************************************                                                                                 **   Activating Instructions                                                       **                                                                                 ***********************************************************************************/// Updating jtag_ir (Instruction Register)always @ (posedge tck_pad_i or posedge trst_pad_i)begin  if(trst_pad_i)    latched_jtag_ir <=#1 `IDCODE;   // IDCODE selected after reset  else if (tms_reset)    latched_jtag_ir <=#1 `IDCODE;   // IDCODE selected after reset  else if(update_ir)    latched_jtag_ir <=#1 jtag_ir;end/***********************************************************************************                                                                                 **   End: Activating Instructions                                                  **                                                                                 ***********************************************************************************/// Updating jtag_ir (Instruction Register)always @ (latched_jtag_ir)begin  extest_select           = 1'b0;  sample_preload_select   = 1'b0;  idcode_select           = 1'b0;  mbist_select            = 1'b0;  debug_select            = 1'b0;  bypass_select           = 1'b0;  case(latched_jtag_ir)    /* synthesis parallel_case */     `EXTEST:            extest_select           = 1'b1;    // External test    `SAMPLE_PRELOAD:    sample_preload_select   = 1'b1;    // Sample preload    `IDCODE:            idcode_select           = 1'b1;    // ID Code    `MBIST:             mbist_select            = 1'b1;    // Mbist test    `DEBUG:             debug_select            = 1'b1;    // Debug    `BYPASS:            bypass_select           = 1'b1;    // BYPASS    default:            bypass_select           = 1'b1;    // BYPASS  endcaseend/***********************************************************************************                                                                                 **   Multiplexing TDO data                                                         **                                                                                 ***********************************************************************************/always @ (shift_ir_neg or exit1_ir or instruction_tdo or latched_jtag_ir_neg or idcode_tdo or          debug_tdi_i or bs_chain_tdi_i or mbist_tdi_i or           bypassed_tdo)begin  if(shift_ir_neg)    tdo_pad_o = instruction_tdo;  else    begin      case(latched_jtag_ir_neg)    // synthesis parallel_case        `IDCODE:            tdo_pad_o = idcode_tdo;       // Reading ID code        `DEBUG:             tdo_pad_o = debug_tdi_i;      // Debug        `SAMPLE_PRELOAD:    tdo_pad_o = bs_chain_tdi_i;   // Sampling/Preloading        `EXTEST:            tdo_pad_o = bs_chain_tdi_i;   // External test        `MBIST:             tdo_pad_o = mbist_tdi_i;      // Mbist test        default:            tdo_pad_o = bypassed_tdo;     // BYPASS instruction      endcase    endend// Tristate control for tdo_pad_o pinalways @ (negedge tck_pad_i)begin  tdo_padoe_o <= #1 shift_ir | shift_dr | (pause_dr & debug_select);end/***********************************************************************************                                                                                 **   End: Multiplexing TDO data                                                    **                                                                                 ***********************************************************************************/always @ (negedge tck_pad_i)begin  shift_ir_neg <= #1 shift_ir;  latched_jtag_ir_neg <= #1 latched_jtag_ir;endendmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -