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

📄 debug.v

📁 q6805.zip
💻 V
📖 第 1 页 / 共 2 页
字号:
module tap( CLOCK_DR, CLOCK_IR, ENABLE, RESET, SELECT, SHIFT_DR, SHIFT_IR, TCK, TMS,
            UPDATE_DR, UPDATE_IR, XTCK, XTRST );


output CLOCK_DR, CLOCK_IR, ENABLE, RESET, SELECT, SHIFT_DR, SHIFT_IR;
input TCK, TMS;
output UPDATE_DR, UPDATE_IR;
input XTCK, XTRST;

reg [3:0] TAP;
reg RESET;
reg ENABLE;
reg SHIFT_IRq;
reg SHIFT_DRq;
reg CLOCK_IRq;
reg UPDATE_IR;
reg CLOCK_DRq;
reg UPDATE_DR;


wire SELECT;
wire SHIFT_IR;
wire SHIFT_DR;
wire CLOCK_IR;
wire CLOCK_DR;
wire TRST;

assign SELECT = TAP[0];
assign SHIFT_IR = !SHIFT_IRq;
assign SHIFT_DR = !SHIFT_DRq;
assign CLOCK_IR = !CLOCK_IRq;
assign CLOCK_DR = !CLOCK_DRq;

assign TRST = !XTRST;

always @(posedge TCK or posedge TRST) begin
	if (TRST) begin
		TAP[3:0] <= 4'b1111;
	end
	else begin
		TAP[3] <= !(!(TAP[3] & !TAP[1] & !TMS)   		& 
				    !(TMS & !TAP[2])               		& 
				    !(TMS & !TAP[3])               		& 
				    !(TAP[1] & TAP[0] & TMS));

		TAP[2] <= !(!(TAP[2] & !TAP[3] & !TMS)   		& 
				    !(!TAP[1] & !TMS)              		& 
				    !(TAP[2] & !TAP[0] & !TMS)     		& 
				    !(!TAP[3] & !TAP[0] & !TMS)    		& 
				    !(TAP[1] & TMS & !TAP[2])      		& 
				    !(TAP[3] & TAP[1] & TAP[0] & TMS));

		TAP[1] <= !(!(TAP[1] & !TAP[2]) 				& 
				    !(TAP[3] & TAP[1]) 					& 
				    !(TMS & !TAP[2]));

		TAP[0] <= !(!(TAP[0] & !TAP[1]) 				& 
				    !(TAP[2] & TAP[0]) 					& 
				    !(TAP[1] & !TAP[2] & !TMS) 			& 
				    !(TAP[1] & !TAP[3] & !TAP[2] & !TAP[0]));
	end
end

always @(posedge XTCK or posedge TRST) begin
	if (TRST) begin
		RESET <= 1'b1;
		ENABLE <= 1'b0;
		SHIFT_IRq <= 1'b0;
		SHIFT_DRq <= 1'b0;
		CLOCK_IRq <= 1'b1;
		CLOCK_DRq <= 1'b1;	
		UPDATE_IR <= 1'b0;
		UPDATE_DR <= 1'b0;
	end
	else begin
		RESET <= &TAP[3:0];
		ENABLE <= !(!(TAP[2] & TAP[0] & !TAP[3] & !TAP[1]) 		& 
					!(TAP[2] & !TAP[3] & !TAP[1] & !TAP[0]));

		SHIFT_IRq <= !(TAP[2] & TAP[0] & !TAP[3] & !TAP[1]);

		SHIFT_DRq <= !(TAP[2] & !TAP[3] & !TAP[1] & !TAP[0]);

		CLOCK_IRq <= !(TAP[2] & TAP[0] & !TAP[3]);

		CLOCK_DRq <= !(TAP[2] & !TAP[3] & !TAP[0]);

		UPDATE_IR <= TAP[3] & TAP[1] & TAP[0] & !TAP[2];
		UPDATE_DR <= TAP[3] & !TAP[2] & TAP[1] & !TAP[0];

	end
end




endmodule // tap


module j_regs( CMPR_H, CMPR_L, CYCL, JRESET, MFUNC_CMPLT, MFUNC_REQ, MON_ADR,
               MON_DAT, MON_OPCD, SEL_CMPR_H, SEL_CMPR_L, SEL_CYCTYP,
               SEL_MON_ADRH, SEL_MON_ADRL, SEL_MON_DAT, SEL_MON_OPCD, SHFTR,
               TCK, UPDAT_DR );

output [15:8] CMPR_H;
output [7:0] CMPR_L;
output [4:0] CYCL;
input JRESET, MFUNC_CMPLT;
output MFUNC_REQ;
output [15:0] MON_ADR;
output [7:0] MON_DAT;
output [7:0] MON_OPCD;
input SEL_CMPR_H, SEL_CMPR_L, SEL_CYCTYP, SEL_MON_ADRH, SEL_MON_ADRL,SEL_MON_DAT, SEL_MON_OPCD;
input [7:0] SHFTR;
input TCK, UPDAT_DR;

reg [15:0] MON_ADR;
reg [7:0]  MON_DAT;
reg [7:0]  MON_OPCD;
reg [15:8]  CMPR_H;
reg [7:0]  CMPR_L;
reg [4:0]  CYCL;
reg 	   MFUNC_REQ;

wire TCK;
wire CLR_MFUNC_REQ;

assign CLR_MFUNC_REQ = JRESET | MFUNC_CMPLT;

always @(posedge TCK or posedge JRESET) begin
	if (JRESET) begin
		CYCL <= 5'b00000;
	end
	else begin
		if (UPDAT_DR & SEL_MON_ADRH) MON_ADR[15:8] <= SHFTR[7:0];
		if (UPDAT_DR & SEL_MON_ADRL) MON_ADR[7:0]  <= SHFTR[7:0];
		if (UPDAT_DR & SEL_MON_DAT)  MON_DAT[7:0]  <= SHFTR[7:0];
		if (UPDAT_DR & SEL_MON_OPCD) MON_OPCD[7:0] <= SHFTR[7:0];
		if (UPDAT_DR & SEL_CMPR_H)   CMPR_H[15:8]   <= SHFTR[7:0];
		if (UPDAT_DR & SEL_CMPR_L)   CMPR_L[7:0]   <= SHFTR[7:0];
		if (UPDAT_DR & SEL_CYCTYP)   CYCL[4:0]     <= SHFTR[4:0];
	end
end

always @(posedge TCK or posedge CLR_MFUNC_REQ) begin
	if (CLR_MFUNC_REQ) begin
		MFUNC_REQ <= 1'b0;
	end
	else begin
		if (UPDAT_DR & SEL_MON_DAT) begin
			MFUNC_REQ <= 1'b1;
		end
	end
end



endmodule // j_regs


module jtg_stat( STAT0, STAT1, STAT2, STAT3, STAT4, STAT5, STAT6, STAT7, STATUS );


input STAT0, STAT1, STAT2, STAT3, STAT4, STAT5, STAT6, STAT7;
output [7:0] STATUS;

wire [7:0] STATUS;

assign STATUS[7] = STAT7;
assign STATUS[6] = STAT6;
assign STATUS[5] = STAT5;
assign STATUS[4] = STAT4;
assign STATUS[3] = STAT3;
assign STATUS[2] = STAT2;
assign STATUS[1] = STAT1;
assign STATUS[0] = STAT0;


endmodule // jtg_stat


module jtgshft8( A, B, C, D, EN_CLOCK_DR, SEL0, SEL1, SHFTR, SHIFT_DR, SI, SO, TCK );

input [7:0] A;
input [7:0] B;
input [7:0] C;
input [7:0] D;
input EN_CLOCK_DR, SEL0, SEL1;
output [7:0] SHFTR;
input SHIFT_DR, SI;
output SO;
input TCK;


wire SO;
wire [7:0] D_SHFT_MUX;
wire [1:0] SELECT;

reg [7:0] SHFTR;


assign D_SHFT_MUX[7] = SHIFT_DR ?       SI : D[7];
assign D_SHFT_MUX[6] = SHIFT_DR ? SHFTR[7] : D[6];
assign D_SHFT_MUX[5] = SHIFT_DR ? SHFTR[6] : D[5];
assign D_SHFT_MUX[4] = SHIFT_DR ? SHFTR[5] : D[4];
assign D_SHFT_MUX[3] = SHIFT_DR ? SHFTR[4] : D[3];
assign D_SHFT_MUX[2] = SHIFT_DR ? SHFTR[3] : D[2];
assign D_SHFT_MUX[1] = SHIFT_DR ? SHFTR[2] : D[1];
assign D_SHFT_MUX[0] = SHIFT_DR ? SHFTR[1] : D[0];
 
assign SO = SHFTR[0];

assign SELECT[1:0] = {(SEL1 | SHIFT_DR), (SEL0 | SHIFT_DR)};

always @(posedge TCK) begin
	if (EN_CLOCK_DR | SHIFT_DR) begin
		case (SELECT[1:0])
			2'b00 : SHFTR <= A;
			2'b01 : SHFTR <= B;
			2'b10 : SHFTR <= C;
			2'b11 : SHFTR <= D_SHFT_MUX;
		endcase
	end
end


endmodule // jtgshft8


module jtag_ir( IR_Q, RESET, SEL_IR, SHIFT_IR, SIN, SOUT, TCK, UPDATE_IR );

output [7:0] IR_Q;
input RESET, SEL_IR, SHIFT_IR, SIN;
output SOUT;
input TCK, UPDATE_IR;


reg [7:0]	IR_SHIFT_REG;
reg [7:0]	IR_Q;

wire [7:0] IR_D_MUX;

wire SOUT;

assign SOUT = IR_SHIFT_REG[0];

assign IR_D_MUX = SHIFT_IR ? {SIN, IR_SHIFT_REG[7:1]} : 8'h01;

always @(posedge TCK or posedge RESET) begin
	if (RESET) begin
		IR_Q <= 8'h01;
	end
	else begin
		if (UPDATE_IR) begin
			IR_Q <= IR_SHIFT_REG;
		end
	end
end


always @(posedge TCK) begin
	if (SEL_IR | SHIFT_IR) begin
		IR_SHIFT_REG <= IR_D_MUX;
	end
end


endmodule // jtag_ir


module jtag_dec( A, SEL_BYP, Y );
 input [4:0] A;
output SEL_BYP;
 output [15:0] Y;

wire [15:0] Y;
wire SEL_BYP;

assign Y[15] = (A[4:0] == 5'h0F);
assign Y[14] = (A[4:0] == 5'h0E);
assign Y[13] = (A[4:0] == 5'h0D);
assign Y[12] = ((A[4:0] == 5'h0C) | A[4]);
assign Y[11] = ((A[4:0] == 5'h0B) | A[4]);
assign Y[10] = (A[4:0] == 5'h0A);
assign Y[9] = (A[4:0] == 5'h09);
assign Y[8] = (A[4:0] == 5'h08);
assign Y[7] = (A[4:0] == 5'h07);
assign Y[6] = (A[4:0] == 5'h06);
assign Y[5] = (A[4:0] == 5'h05);
assign Y[4] = (A[4:0] == 5'h04);
assign Y[3] = (A[4:0] == 5'h03);
assign Y[2] = (A[4:0] == 5'h02);
assign Y[1] = (A[4:0] == 5'h01);
assign Y[0] = (A[4:0] == 5'h00);

assign SEL_BYP = Y[15] | Y[14] | Y[1] | Y[0] | (Y[15] & A[4]);


endmodule // jtag_dec


module jtag_byp( BYP_SEL, SHIFT_DR, SIN, SOUT, TCK );

input BYP_SEL, SHIFT_DR, SIN;
output SOUT;
input TCK;

reg SOUT;

always @(posedge TCK) begin
	if (BYP_SEL) begin
		SOUT <= SHIFT_DR ? SIN : 1'b0;
	end
end



endmodule // jtag_byp


module jtag_brk( BRK_IN_SRVC, BRK_REQ, CMPR, CPU_CLK, CPU_RDY, CPU_RESET, CYC_TYP,
                 EN_BRK, EN_EXT_BRK, EVNT0, EVNT_CNT, EVNT_DET, FETCH,
                 FRC_BRK, FRST_WRD, IACKq, MFUNC, PC, RD, WR );

input BRK_IN_SRVC;
output BRK_REQ;
input [15:0] CMPR;
input CPU_CLK, CPU_RDY, CPU_RESET;
input [4:0] CYC_TYP;
input EN_BRK, EN_EXT_BRK, EVNT0, EVNT_CNT;
output EVNT_DET;
input FETCH, FRC_BRK, FRST_WRD, IACKq, MFUNC;
input [15:0] PC;
input RD, WR;

reg [1:0] Ext_Brk_Trig;
reg 	  Single_Step;

wire EVNT_DET;
wire BRK_REQ;



assign EVNT_DET = (((RD & CYC_TYP[3] & !FETCH   & !MFUNC)  | 
					        (WR & CYC_TYP[2]    & !MFUNC)  |
						    (FETCH & CYC_TYP[1] & !MFUNC)  |
						    (IACKq & CYC_TYP[0] & !MFUNC)) 
						&
						    (CYC_TYP[4] | (!(PC[15:0] ^ CMPR[15:0]))))
				|
						(Ext_Brk_Trig[0] &	!Ext_Brk_Trig[1]);

assign BRK_REQ = Single_Step | (EN_BRK & EVNT_CNT);


always @(posedge CPU_CLK or posedge CPU_RESET) begin
	if (CPU_RESET) begin
		Single_Step <= 1'b0;
	end
	else begin
		Ext_Brk_Trig[0] <= EN_EXT_BRK & !EVNT0;
		Ext_Brk_Trig[1] <= Ext_Brk_Trig[0];
		if (CPU_RDY) begin
			Single_Step <= FRST_WRD & FRC_BRK & !BRK_IN_SRVC;
		end
	end
end	 



endmodule // jtag_brk



module evnt_cnt( 
				CNTR_DR, 
				CNTR_EVNT, 
				CPU_CLK, 
				D, 
				EVNT_CNT_VAL, 
				EVNT_EN, 
				LTCH_CNTR,
                SEL_EVNT_CNTR, 
                TCK, 
                TRST, 
                UPDAT_DR, 
                XCLK_L );

output [7:0] CNTR_DR;
output 		 CNTR_EVNT;
input 		 CPU_CLK;
input  [7:0] D;
output [7:0] EVNT_CNT_VAL;
input 		 EVNT_EN; 
input 		 LTCH_CNTR; 
input 		 SEL_EVNT_CNTR; 
input 		 TCK; 
input 		 TRST; 
input 		 UPDAT_DR; 
input 		 XCLK_L;



wire ZERO_OR_ONE;

reg CNTR_EVNT;

reg [7:0] CNTR_DR;
reg [7:0] CNTR_VAL;
reg Latch_Sync;

reg [7:0] EVNT_CNT_VAL;

⌨️ 快捷键说明

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