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

📄 q6805_top.v

📁 q6805.zip
💻 V
📖 第 1 页 / 共 2 页
字号:
		PIOB_ADRS  	: RD_INTRNL = PIOB_D;
		PIOWK_ADRS 	: RD_INTRNL = PIOWK_D;
		CNTRA_ADRS 	: RD_INTRNL = CNTRA_D;
		CNTRB_ADRS 	: RD_INTRNL = CNTRB_D;
		CNTRC_ADRS 	: RD_INTRNL = CNTRC_D;
		SCIA_ADRS  	: RD_INTRNL = SCIA_D;
		EXPWN_ADRS 	: RD_INTRNL = EXPWN_D;
		default  	: RD_INTRNL = RAM1_D;
	endcase
end


//
// Q6805 CPU instatntiation
//

Q6805_CPU CPU( 
			.CLK_2Xi(CLK_2X),
			.CLK_2Xo(),
			.CPU_CLK(CPU_CLK),
			.WClockp(WClockp),
			.EClock(),
			.EClock_n(),
			.EClockStretch(EClockStretch),
			.CPU_PC(CPU_PC),
			.RD_D(RD_D),
			.WR_D(WR_D),
			.WR_n(WR_n),
			.WRDELq(WRDELq),
			.WRQ1(WRQ1),	
			.RD_n(RD_n),
			.RDQ1(RDQ1),
			.OPCOD_n(OPCOD_n),
			.FETCH_n(FETCH_n),
			.IACK_n(IACK_n),
			.DISC_n(DISC_n),
			.INT(INT),
			.ACC(ACC),
			.XREG(XREG),
			.CCR(CCR),
			.PROD(PROD),
			.VECTOR(VECTOR),
			.STACK_BASE(STACK_BASE),
			.STK_PTR(),
			.WAITNG_n(),
			.STOPD_n(),
			.RESET_n(RESET_n),
			.RESET(RESET),
			.READY(EXP_RDY),
			.CPU_RDY(CPU_RDY),
			.MULE(1'b0),
			.TCK(TCK),
			.TDI(TDI),
			.TDO(TDO),
			.TMS(TMS),
			.TRST_n(TRST_n),
			.EVNT0_n(EVNT0_n),
			.EVNT1_n(EVNT1_n) );

// 
// example QuickLogic 4K RAM block instantiation -- remove comments enable
//
r4096a8_25um RAM1(
			.wa(CPU_PC[11:0]),
			.ra(CPU_PC[11:0]),
			.wd(WR_D),
			.rd(RAM1_D),
			.we(WRQ1 & RAM1_SEL),
			.wclk(CPU_CLK));

//
// example Actel ProASIC-PLUS 4K RAM block instatntiation -- remove comments to enable
//
//ram4kx8 RAM1(
//               .DO(RAM1_D), 
//               .WCLOCK(CPU_CLK), 
//               .DI(WR_D), 
//               .WRB(~(WRQ1 & RAM1_SEL)), 
//               .RDB(1'b0), 
//               .WADDR({CPU_PC[11:0]}), 
//               .RADDR({CPU_PC[11:0]}));

//
// example ALTERA Quartus II 4K RAM block instatntiation -- remove comments to enable
//
//ram4kx8 RAM1(
//				.data(WR_D),
//				.wren(WRQ1 & RAM1_SEL),
//				.wraddress({CPU_PC[11:0]}),
//				.rdaddress({CPU_PC[11:0]}),
//				.wrclock(CPU_CLK),
//				.rdclock(CLK_2X),
//				.q(RAM1_D));



//
// 8-bit PIO PORTA instantiation
//

PIO8 PIOA(  
			.BlockSel(PIOA_SEL),
			.RegSel(CPU_PC[0]),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.IOPort(PORTA),
			.DIn(WR_D),
			.DOut(PIOA_D),
			.Reset(RESET),
			.Ready(READY));

//
// 8-bit PIO PORTB instantiation
//

PIO8 PIOB(  
			.BlockSel(PIOB_SEL),
			.RegSel(CPU_PC[0]),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.IOPort(PORTB),
			.DIn(WR_D),
			.DOut(PIOB_D),
			.Reset(RESET),
			.Ready(READY));

//
// 8-bit PIO PORTC with edge detection keyboard wake-up instantiation
// can be programmed to generate an interrupt (lowest priority)
//

IOKey PIOWK(  
			.BlockSel(PIOWK_SEL),
			.RegSel(CPU_PC[1:0]),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.IntRequest(INT[0]),
			.IOPort(PORTC),
			.DIn(WR_D),
			.DOut(PIOWK_D),
			.Reset(RESET),
			.Ready(READY));

// 
// 8-bit programmable timer/counter	 A
// interrupt connected to IRQ3
//

CNTR8 CNTRA( 
			.BlockSel(CNTRA_SEL),
			.RegSel(CPU_PC[0]),
			.CPURD(RDQ1),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.Gate(GateA),
			.Trigger(TrigA),
			.SquareWave(SQWA),
			.TermCount(TermA),
			.IntRequest(INT[3]),
			.DIn(WR_D),
			.DOut(CNTRA_D),
			.Reset(RESET),
			.Ready(READY));

// 
// 8-bit programmable timer/counter	 B
// interrupt connected to IRQ2
//

CNTR8 CNTRB( 
			.BlockSel(CNTRB_SEL),
			.RegSel(CPU_PC[0]),
			.CPURD(RDQ1),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.Gate(GateB),
			.Trigger(TrigB),
			.SquareWave(SQWB),
			.TermCount(TermB),
			.IntRequest(INT[2]),
			.DIn(WR_D),
			.DOut(CNTRB_D),
			.Reset(RESET),
			.Ready(READY));

// 
// 8-bit programmable timer/counter	 C
// the terminal count signal of this timer/counter is used for baud rate generation
// no interrupts are required since operating in auto-reload mode, so not connected
//

CNTR8 CNTRC( 
			.BlockSel(CNTRC_SEL),
			.RegSel(CPU_PC[0]),
			.CPURD(RDQ1),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.Gate(GateC),
			.Trigger(TrigC),
			.SquareWave(SQWC),
			.TermCount(TermC),
			.IntRequest(),
			.DIn(WR_D),
			.DOut(CNTRC_D),
			.Reset(RESET),
			.Ready(READY));


//
// simple asynchronous serial port A
// interrupt connected to IRQ1
//

SCI8db SCIA(  
			.BlockSel(SCIA_SEL),
			.RegSel(CPU_PC[0]),
			.CPURD(RDQ1),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.IntRequest(INT[1]),
			.TxD(TxD),
			.RxD(RxD),
			.Baudx16(TermC),
			.DIn(WR_D),
			.DOut(SCIA_D),
			.Reset(RESET),
			.Ready(READY));

//
// memory address expander
// allows up to 2 mega bytes of program memory and 2 mega bytes data memory for a total of 4 megabytes
//

ExpWin ExpWin( 
			.BlockSel(EXPWN_SEL),
			.RegSel(CPU_PC[1:0]),
			.INTRNL_ADDRS(INTRNL_ADDRS),
			.CPUWR(WRDELq),
			.CPURD(~RD_n),
			.CPUClock(CPU_CLK), 
			.EClockStretch(EClockStretch),
			.NotWClock(~WClockp),
			.AddrsIn(CPU_PC),
			.AddrsOutQ(EXP_ADDRS),
			.CSP0_n(CSP0_n),
			.CSP1_n(CSP1_n),
			.CSD0_n(CSD0_n),
			.CSD1_n(CSD1_n),
			.CS3_n(),
			.CS2_n(),
			.CS1_n(),
			.CS0_n(),
			.DIn(WR_D),
			.WaitReqQ(EXP_RDY),
			.DOut(EXPWN_D),
			.Reset(RESET),
			.Ready(READY));

//
// Burr-Brown DAC7512 serial controller	channel A
//

DAC7512 DAC_A (
			.BlockSel(DAC_A_SEL),
			.RegSel(CPU_PC[0]),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.DIn(WR_D),
			.SYNC_n(SYNC_A_n),
			.SIn(SIn_A),
			.TxD_OE(),
			.Reset(RESET));

//
// Burr-Brown DAC7512 serial controller	channel B
//

DAC7512 DAC_B (
			.BlockSel(DAC_B_SEL),
			.RegSel(CPU_PC[0]),
			.CPUWR(WRQ1),
			.CPUClock(CPU_CLK),
			.DIn(WR_D),
			.SYNC_n(SYNC_B_n),
			.SIn(SIn_B),
			.TxD_OE(),
			.Reset(RESET));


 endmodule // Q6805_TOP 

⌨️ 快捷键说明

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