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

📄 core.v

📁 q6805.zip
💻 V
📖 第 1 页 / 共 5 页
字号:
mux7_bit I_17 ( .A(A[7]), .B(B[7]), .C(C[7]), .D(D[7]), .DOUT(Y[7]), .E(E[7]),
             .F(F[7]), .G(G[7]), .S0(S0), .S1(S1), .S2(S2), .S3(S3) );

endmodule // mux7x8

`endif


`ifdef half_os
`else
`define half_os
module half_os( CLK , CLR, D, E, XCLK, Q );
input CLK, CLR, D, E;
output Q;
input XCLK;


reg Q;
reg CLR_Q;

wire Q_CLR = CLR | CLR_Q;
wire Q_n = ~Q;

always @(posedge XCLK or posedge Q_CLR) begin
	if (Q_CLR) begin
		Q <= 1'b0;
	end
	else begin
		Q <= D;
	end
end

always @(posedge CLK or posedge Q_n) begin
	if (Q_n) begin
		CLR_Q <= 1'b0;
	end
	else begin
		if (E) CLR_Q <= Q;
	end
end

endmodule // half_os

`endif

`ifdef mux16
`else
`define mux16
module mux16( A , B, S, Y );
 input [15:0] A;
 input [15:0] B;
input S;
 output [15:0] Y;

wire [15:0] Y;

assign Y = S ? B : A;

endmodule // mux16

`endif

`ifdef csadd16c
`else
`define csadd16c
module csadd16c( A , B, CI, Q );
 input [15:0] A;
 input [15:0] B;
input CI;
 output [15:0] Q;

wire [15:0] Q;

assign Q = A + B + CI;

endmodule // csadd16c

`endif

`ifdef dat_ptr
`else
`define dat_ptr
module dat_ptr( CLK , CLR_DP_HI, CLR_DP_L, EN_DP_HI, NEG_ADND, NEG_ONE, OPRND,
                READY, DP );
input CLK, CLR_DP_HI, CLR_DP_L;
 output [15:0] DP;
input EN_DP_HI, NEG_ADND, NEG_ONE;
 input [7:0] OPRND;
input READY;

reg [15:8] DPX;
wire N_1;
wire N_2;
wire N_3;
wire N_4;
wire N_5;
wire N_6;
wire N_7;
wire N_8;
wire N_9;
wire N_10;
wire N_11;
wire NEG;
wire CLR;
wire [15:0] DP;

supply0 GND;
supply1 VCC;

assign N_8 = CLR_DP_HI ? 1'b0 : DPX[15];
assign N_7 = CLR_DP_HI ? 1'b0 : DPX[14];
assign N_6 = CLR_DP_HI ? 1'b0 : DPX[13];
assign N_5 = CLR_DP_HI ? 1'b0 : DPX[12];
assign N_4 = CLR_DP_HI ? 1'b0 : DPX[11];
assign N_3 = CLR_DP_HI ? 1'b0 : DPX[10];
assign N_2 = CLR_DP_HI ? 1'b0 : DPX[9];
assign N_1 = CLR_DP_HI ? 1'b0 : DPX[8];

always @(posedge CLK) begin
	if (N_11) DPX[15:8] <= OPRND[7:0];
end

assign DP[15] = N_8 | N_9 | N_10;
assign DP[14] = N_7 | N_9 | N_10;
assign DP[13] = N_6 | N_9 | N_10;
assign DP[12] = N_5 | N_9 | N_10;
assign DP[11] = N_4 | N_9 | N_10;
assign DP[10] = N_3 | N_9 | N_10;
assign DP[9] = N_2 | N_9 | N_10;
assign DP[8] = N_1 | N_9 | N_10;
 
assign N_9 = NEG_ONE;
assign NEG = NEG_ONE;
assign CLR = CLR_DP_L;

assign DP[7:0] = NEG ? 8'hFF : (CLR ? 8'b0 : OPRND[7:0]);
assign N_10 = NEG_ADND & OPRND[7];
assign N_11 = READY & EN_DP_HI;

endmodule // dat_ptr

`endif

`ifdef stack
`else
`define stack
module stack( CLK , EN_STK_PTR, POP_PUSH, READY, RESET, RSP, STACK_BASE, XCLK_L,
              SPQ );
input CLK, EN_STK_PTR, POP_PUSH, READY, RESET, RSP;
 output [15:0] SPQ;
 input [15:6] STACK_BASE;
input XCLK_L;

reg [5:0] Q;

wire [15:0] SPQ;

assign SPQ = {STACK_BASE, Q};


always @(posedge CLK or posedge RESET) begin
	if (RESET) begin
		Q <= 6'b0;
	end
	else begin
		if ( READY & EN_STK_PTR) begin
			Q <= Q + (POP_PUSH ? 6'b111111: 6'b000001);
		end
		else if (READY & RSP) Q <= 6'b0;
	end
end

endmodule // stack

`endif



`ifdef mux16x4
`else
`define mux16x4
module mux16x4( A , B, C, D, S0, S1, Y );
 input [15:0] A;
 input [15:0] B;
 input [15:0] C;
 input [15:0] D;
input S0, S1;
 output [15:0] Y;

wire [15:0] Y;

assign Y= S1 ? (S0 ? D : C) : (S0 ? B : A);


endmodule // mux16x4

`endif


`ifdef vect
`else
`define vect
module vect( CLK , EN_IACK, FRST_WRD, IF, IRQ, MFUNC, MRTI, NMI, READY, RESET,
             SBRK, SEQ_CMPLT, SWI, VECTOR, XCLK_L, BRK_IN_SRVC, BRK_PND,
             INT_SEQ, IRQ_DET, RESET_SEQ, VECT );
output BRK_IN_SRVC, BRK_PND;
input CLK, EN_IACK, FRST_WRD, IF;
output INT_SEQ;
 input [5:0] IRQ;
output IRQ_DET;
input MFUNC, MRTI, NMI, READY, RESET;
output RESET_SEQ;
input SBRK, SEQ_CMPLT, SWI;
 output [15:0] VECT;
 input [15:5] VECTOR;
input XCLK_L;

reg [4:1] VECT_R;
reg RESET_SEQ;
reg BRK_IN_SRVC;
reg INT_SEQ;

wire [4:1] VD;
wire [6:0] INT_PND;
wire INT_DET;
wire IRQ_DET;
wire [15:0] VECT;

supply0 GND;


assign VD[4] = ~(~RESET_SEQ & BRK_PND);
assign IRQ_DET = (|IRQ[5:0]) | NMI;
assign VECT[15:0] = {VECTOR[15:5], VECT_R[4:1], 1'b0}; 


always @(posedge CLK) begin
	VECT_R[4:1]	<= VD[4:1];
end

always @(posedge CLK or posedge RESET) begin
	if (RESET) begin
		RESET_SEQ <= 1'b1;
	end
	else begin
		if (READY & EN_IACK & RESET_SEQ) RESET_SEQ <= 1'b0;
	end
end

always @(posedge CLK or posedge RESET) begin
	if (RESET) begin
		BRK_IN_SRVC <= 1'b0;
		INT_SEQ <= 1'b0;
	end
	else begin
		if (READY) begin
			BRK_IN_SRVC <= (SEQ_CMPLT & MRTI) ? 1'b0 : ((BRK_PND & EN_IACK) | BRK_IN_SRVC);
			INT_SEQ      <= EN_IACK ? 1'b0 : (((SBRK | SWI | FRST_WRD) & INT_DET & ~RESET_SEQ & ~MFUNC) | INT_SEQ);
		end
	end
end
		 


irq_reg I_64 ( .BRK_PND(BRK_PND), .CPU_CLK(CLK), .EN_IACK(EN_IACK), .IF(IF),
            .INT_SEQ(INT_SEQ), .IRQ({ IRQ[5:0] }),
            .IRQ_MSK({ GND,GND,GND,GND,GND,GND }),
            .IRQ_PEND({ INT_PND[6:0] }), .NMI(NMI), .READY(READY),
            .RESET(RESET), .SBRK(SBRK), .SWI(SWI), .VECT({ VECT[3:1] }),
            .XCLK_L(XCLK_L) );

pri_enc I_26 ( .A0(VD[1]), .A1(VD[2]), .A2(VD[3]), .DET(INT_DET), .I0(INT_PND[0]),
            .I1(INT_PND[1]), .I2(INT_PND[2]), .I3(INT_PND[3]),
            .I4(INT_PND[4]), .I5(INT_PND[5]), .I6(INT_PND[6]), .I7(RESET_SEQ | BRK_PND) );

endmodule // vect

`endif


`ifdef othr_seq
`else
`define othr_seq
module othr_seq( ADC , ADD, AND, BIT, BRK_PND, CLC, CLI, CMP, CPU_CLK, CPX, DIRB,
                 EOR, EXT, IMM, INT_SEQ, INT_STAT, INVALID, IX1E, IX2D, IXF,
                 JMP, JSR, LDA, LDX, LOI, MFUNC, MRD, MRET, MRTI, MUL, MULE,
                 MWR, NOP, ORA, RESET, RSP, RST_SEQ, RTI, RTS, SBC, SBRK, SEC,
                 SEI, STA, STATE, STOP, STX, SUB, SWI, TAX, TXA, WAIT, WORM,
                 ACC_SRC_SEL0, ACC_SRC_SEL1, ADD_1_PC, CF_SEL0, CF_SEL1,
                 CF_SEL2, CF_SEL3, CF_SEL4, CLR_DP_H, CLR_DP_L, DIS_FTCH,
                 DIS_PC, DIS_PC_TRK, DIS_RD, DIS_STATE, DISCNTY, EN_ACC,
                 EN_CF, EN_DP_H, EN_HC, EN_IACK, EN_IF, EN_NF, EN_STK_PTR,
                 EN_WR, EN_XREG, EN_ZF, IF_SEL0, IF_SEL1, INT_STB7, LD_ACC,
                 LD_PC, LD_PC_TRK, LD_XREG, NEG_ADND, NEG_ONE, NF_SEL0,
                 OUT_MON, OUT_PCH, OUT_PCL, OUT_XREG, PC_XREG, POP, RESTOR,
                 RTI_STB3, SEL_BOOL, SEL_FF_00, SEL_MON_ADRS, SEL_STK_PTR,
                 SEL_VECT, SEL_XREG_A, SEQ_CMPLT, SUB_A, X_SRC_SEL0,
                 X_SRC_SEL1, ZERO, ZF_SEL0 );
output ACC_SRC_SEL0, ACC_SRC_SEL1;
input ADC, ADD;
output ADD_1_PC;
input AND, BIT, BRK_PND;
output CF_SEL0, CF_SEL1, CF_SEL2, CF_SEL3, CF_SEL4;
input CLC, CLI;
output CLR_DP_H, CLR_DP_L;
input CMP, CPU_CLK, CPX, DIRB;
output DIS_FTCH, DIS_PC, DIS_PC_TRK, DIS_RD, DIS_STATE, DISCNTY, EN_ACC,
EN_CF, EN_DP_H, EN_HC, EN_IACK, EN_IF, EN_NF, EN_STK_PTR, EN_WR,
EN_XREG, EN_ZF;
input EOR, EXT;
output IF_SEL0, IF_SEL1;
input IMM, INT_SEQ;
 input [9:0] INT_STAT;
output INT_STB7;
input INVALID, IX1E, IX2D, IXF, JMP, JSR;
output LD_ACC, LD_PC, LD_PC_TRK, LD_XREG;
input LDA, LDX, LOI, MFUNC, MRD, MRET, MRTI, MUL, MULE, MWR;
output NEG_ADND, NEG_ONE, NF_SEL0;
input NOP, ORA;
output OUT_MON, OUT_PCH, OUT_PCL, OUT_XREG, PC_XREG, POP;
input RESET;
output RESTOR;
input RSP, RST_SEQ, RTI;
output RTI_STB3;
input RTS, SBC, SBRK, SEC, SEI;
output SEL_BOOL, SEL_FF_00, SEL_MON_ADRS, SEL_STK_PTR, SEL_VECT, SEL_XREG_A,
SEQ_CMPLT;
input STA;
 input [9:1] STATE;
input STOP, STX, SUB;
output SUB_A;
input SWI, TAX, TXA, WAIT, WORM;
output X_SRC_SEL0, X_SRC_SEL1, ZERO, ZF_SEL0;
wire [9:1] STB;
wire N_3;
wire ACC_SRC_SEL1_b;
wire X_SRC_SEL1_b;
wire JMP_ST12;
wire N_1;
wire N_2;
wire INT_STB1;
wire INT_ST16;
wire INT_STB8;
wire INT_STB9;
wire JSR_STB45;
wire EN_LD_ACC_c;
wire EN_LD_XREG_c;
wire RST_LD_PC;
wire CF_SEL432_b;
wire CF_SEL4321_a;
wire EN_ZF_NF_a;
wire ZF_NF_SEL0_a;
wire SEL_MON_ADRS_d;
wire SEL_MON_ADRS_e;
wire PC_XREG_c;
wire ZERO_c;
wire ADD_1_PC_d;
wire NEG_ONE_c;
wire ADD_1_PC_c;
wire NEG_ONE_d;
wire DIS_PC_TRK_d;
wire CLR_DP_L_a;
wire LD_PC_TRK_d;
wire LD_PC_TRK_e;
wire LD_PC_TRK_f;
wire SEL_VECT_g;
wire LD_XREG_a;
wire LD_ACC_a;
wire LD_XREG_b;
wire X_SRC_SEL0_b;
wire LD_ACC_b;
wire ACC_SRC_SEL0_b;
wire EN_IF_b;
wire IF_SEL0_b;
wire EN_STK_PTR_c;
wire SEL_STK_PTR_c;
wire DIS_PC_c;
wire LD_PC_TRK_c;
wire DISCNTY_c;
wire DIS_RD_c;
wire DIS_RD_d;
wire OUT_PCH_d;
wire OUT_PCL_d;
wire PC_XREG_d;
wire DIS_PC_d;

⌨️ 快捷键说明

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