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

📄 arm9.v

📁 arm10-behavioral的行为仿真代码verilogHDL
💻 V
📖 第 1 页 / 共 2 页
字号:
`timescale 1ns/10ps/*****************************************************************************$RCSfile: arm9.v,v $$Revision: 1.47 $$Author: kohlere $$Date: 2000/05/04 16:49:02 $$State: Exp $$Source: /home/lefurgy/tmp/ISC-repository/isc/hardware/ARM10/behavioral/pipelined/arm9.v,v $Description: This is a behavioral, 5-stage Pipeline design of an ARM9		micorprocessor. *****************************************************************************/module arm9 (GCLK, nRESET, ECLK, nFIQ, nIRQ, ISYNC, TESTMODE,		TESTSELECT, TEST_SI, TEST_SO, MMnWR, MMD, MMA, MCLK,		DRIVE_MMD_OFFCHIP);/*------------------------------------------------------------------------        Ports------------------------------------------------------------------------*/input 		GCLK;		//Clock Signalinput 		nRESET;		//Reset Signalinput		nFIQ;		//Fast Interrupt Request (active low)input		nIRQ;		//Normal Interrupt Request (active low)input		ISYNC;		//Synchronous nFIQ, nIRQ when lowinput		TESTMODE;	//Test Mode Control Signalinput	[1:0]	TESTSELECT;	//Scan Chain Select Logicinput		TEST_SI;	//Scan Chain Inputinout	[31:0]	MMD;		//Main Memory Data Busoutput	[31:0]	MMA;		//Main Memory Address Busoutput		MMnWR;		//Main Memory Not Write, Readoutput		MCLK;		//Clock to Memoryoutput		ECLK;		//External Clock (Clock Driving ARM)output		TEST_SO;	//Scan Chain Outputoutput		DRIVE_MMD_OFFCHIP;	//Drive the MMD Bus/*------------------------------------------------------------------------        Variable/Signal Declarations------------------------------------------------------------------------*/wire	[31:0]	inst_count;reg     [63:0]  pre_data_bus;  wire	[31:0]	rf_a;wire	[31:0]	rf_b;reg     [31:0]  addr_bus;   reg     [31:0]  data_bus;   reg	[1:0]	DMAS;reg		TEST_SO;wire    [63:0]  data_bus_me;wire	[95:0]	ID;wire	[31:0]	inst_if;wire	[31:0] 	IA;wire	[31:0]	imiss_addr;wire	[31:0]	dmiss_addr;wire	[31:0]	write_a;wire	[31:0]	write_b;wire	[31:0]	pc_if;wire	[31:0]	ex_result;wire	[31:0]	store_addr;reg	[31:0]	addr_bus_me;wire	[31:0]	me_result;wire	[31:0]  addr_me;wire	[31:0]  base_ex;	wire	[31:0]  base_me;wire	[31:0]	cop_data_ex;wire	[31:0]	MMA;wire	[31:0]	MMD;wire	[31:0]	count;wire	[31:0]	cyc_count;wire	[31:0]	swic_data;wire	[7:0]	shift_amount_id;wire	[4:0]	mode;wire	[4:0]	index_a;wire	[4:0]	index_b;wire	[4:0]	Rd_ex;wire	[4:0]	Rn_ex;wire	[4:0]	Rd_me;wire	[4:0]	Rn_me;wire	[4:0]	w_addr_a;wire	[4:0]	w_addr_b;wire    [3:0]   alu_opcode_id;wire    [3:0]   condition_id; wire	[3:0]	inst_type_ex;wire	[3:0]	inst_type_id;wire	[3:0]	flags_ex;wire	[2:0]	shift_type_id;wire	[6:4]	ir_id;wire	[1:0]	exc_code;wire	[1:0]	CHSD, CHSE;wire		PASS;wire		LATECANCEL = 1'b0;wire		IABORT;wire		DABORT;wire		nWAIT;wire		InMREQ;wire		DnMREQ;wire		DnWR;wire		iswic;wire		dswic;wire		dwb;wire		dmiss;wire		imiss;wire		doublehold;wire		stop_me;wire		fiq_disable;wire		irq_disable;wire		rfw_ena_a;wire		newline;wire		rfw_ena_b;wire		second_id;wire		second_nlu_id;wire		need_2cycles_id;wire		load_use_id;		wire		useMini;wire		load_pc_ex;wire		cop_mem_ld;wire		cop_mem_st;wire		ldm_id;wire		stm_id;wire		mcr_ex;wire		prediction_stall;wire		ptaken_ex;wire		finished_id;wire		double_id;wire		double_ex;wire		double_me;wire		exception_to_id;wire		pc_touched;wire		mispredicted_if;wire		misp_rec;wire		s;wire		mul_first_id;wire		second_ex;wire		write_Rd_ex;wire		write_Rn_ex;wire		unsigned_byte_ex;wire		signed_byte_ex;wire		unsigned_hw_ex;wire		signed_hw_ex;wire		write_Rd_me;wire		dc_init;wire		ic_init;wire		write_Rn_me;wire		write_Rd_wb;wire		write_Rn_wb;wire		mem_rd_wr;wire		mem_ena;wire		ic_read_mmd;wire		dc_read_mmd;wire		drive_mmd;wire		byte;wire		halfword;wire            if_enbar;wire            id_enbar;wire            ex_enbar; wire            me_enbar;   wire            wb_enbar;wire		cop_mem_id;wire		cop_id;	wire		cop_absent_int;wire		pc_mod_ex;wire		write_Pc_Rn_ex;wire		write_Pc_Rd_ex;wire		reset_write_Rd_me;wire		reset_write_Rn_me;wire		hold_next_ex;wire		load_pc_me;wire		ECLK;wire            inst_finished;wire		test_so_cnt;wire		test_so_id;wire		test_so_ex;wire		test_so_me;wire		MCLK;wire		istall;wire		data_decomp;wire		dflush;	wire		eval;wire		pt;wire		put;reg		nreset;/*------------------------------------------------------------------------        Component Instantiations------------------------------------------------------------------------*///And the CLK to compensate for memory delaysassign ECLK = (!nWAIT | GCLK);//Latch the reset  signal in case its shorter than one cyclealways @(posedge GCLK or negedge nRESET)  begin    if (~nRESET)      nreset <= 1'b0;    else if (nWAIT)      nreset <= nRESET;  endalways @(double_me or halfword or byte)  begin	if (double_me)	  DMAS = 2'h3;	else if (halfword)	  DMAS = 2'h1;	else if (byte)	  DMAS = 2'h0;	else	  DMAS = 2'h2;  end//Create a Clock Tree, sort ofwire eclk_1, eclk1_1, eclk1_2, eclk11_1, eclk11_2,	eclk12_1, eclk12_2, eclk21_1, eclk111_1, eclk111_2,	eclk112_1, eclk112_2, eclk121_1, eclk121_2, 	eclk122_1, eclk122_2,	eclk1, eclk2, eclk3, eclk4, eclk5, eclk6, eclk7,         eclk8, eclk9, eclk10, eclk11, eclk12, eclk13, eclk14,	eclk15, eclk16, eclk17, eclk18, eclk19, eclk20, eclk21,	eclk22, eclk23, eclk24, gclk1, gclk2, gclk3, gclk4, gclk5;/* May End up Using Buffers Here */nb1s1 	xcb1 	(.Q(eclk_1), .DIN(ECLK));nb1s2	xcb2	(.Q(eclk1_1), .DIN(eclk_1));nb1s2	xcb3	(.Q(eclk1_2), .DIN(eclk_1));nb1s4	xcb4	(.Q(eclk11_1), .DIN(eclk1_1));nb1s4	xcb5	(.Q(eclk11_2), .DIN(eclk1_1));nb1s4   xcb6    (.Q(eclk12_1), .DIN(eclk1_2));nb1s4   xcb7    (.Q(eclk12_2), .DIN(eclk1_2));nb1s8   xcb8    (.Q(eclk111_1), .DIN(eclk11_1));nb1s8   xcb9    (.Q(eclk111_2), .DIN(eclk11_1));nb1s8   xcb10   (.Q(eclk112_1), .DIN(eclk11_2));nb1s8   xcb11   (.Q(eclk112_2), .DIN(eclk11_2));nb1s8   xcb12   (.Q(eclk121_1), .DIN(eclk12_1));nb1s8   xcb13   (.Q(eclk121_2), .DIN(eclk12_1));nb1s8   xcb14   (.Q(eclk122_1), .DIN(eclk12_2));nb1s8   xcb15   (.Q(eclk122_2), .DIN(eclk12_2));ib1s12   xcb16   (.Q(eclk1), .DIN(eclk111_1));ib1s12   xcb17   (.Q(eclk2), .DIN(eclk111_1));ib1s12   xcb18   (.Q(eclk3), .DIN(eclk111_1));ib1s12   xcb19   (.Q(eclk4), .DIN(eclk111_2));ib1s12   xcb20   (.Q(eclk5), .DIN(eclk111_2));ib1s12   xcb21   (.Q(eclk6), .DIN(eclk111_2));ib1s12   xcb22   (.Q(eclk7), .DIN(eclk112_1));ib1s12   xcb23   (.Q(eclk8), .DIN(eclk112_1));ib1s12   xcb24   (.Q(eclk9), .DIN(eclk112_1));ib1s12   xcb25   (.Q(eclk10), .DIN(eclk112_2));ib1s12   xcb26   (.Q(eclk11), .DIN(eclk112_2));ib1s12   xcb27   (.Q(eclk12), .DIN(eclk112_2));ib1s12   xcb28   (.Q(eclk13), .DIN(eclk121_1));ib1s12   xcb29   (.Q(eclk14), .DIN(eclk121_1));ib1s12   xcb30   (.Q(eclk15), .DIN(eclk121_1));ib1s12   xcb31   (.Q(eclk16), .DIN(eclk121_2));ib1s12   xcb32   (.Q(eclk17), .DIN(eclk121_2));ib1s12   xcb33   (.Q(eclk18), .DIN(eclk121_2));ib1s12   xcb34   (.Q(eclk19), .DIN(eclk122_1));ib1s12   xcb35   (.Q(eclk20), .DIN(eclk122_1));ib1s12   xcb36   (.Q(eclk21), .DIN(eclk122_1));ib1s12   xcb37   (.Q(eclk22), .DIN(eclk122_2));ib1s12   xcb38   (.Q(eclk23), .DIN(eclk122_2));ib1s12   xcb39   (.Q(eclk24), .DIN(eclk122_2));nb1s1	xcb40	(.Q(gclk1), .DIN(GCLK));nb1s2	xcb41	(.Q(gclk2), .DIN(gclk1));nb1s4   xcb42	(.Q(gclk3), .DIN(gclk2));nb1s8	xcb43	(.Q(gclk4), .DIN(gclk3));ib1s12	xcb44	(.Q(gclk5), .DIN(gclk4));assign MCLK = ~gclk3;/* Need Logic to Select the Hook-up the Proper Scan Chains; */reg test_cnt, test_id, test_ex, test_me;always @(TESTSELECT or TEST_SI or test_so_cnt or test_so_id or	  test_so_ex or test_so_me)  begin    case (TESTSELECT)      2'h0: begin 	      test_cnt <= TEST_SI;	      test_id <= 1'b0;              test_ex <= 1'b0;              test_me <= 1'b0;              TEST_SO <= test_so_cnt;            end      2'h1: begin              test_cnt <= 1'b0;              test_id <= TEST_SI;              test_ex <= 1'b0;              test_me <= 1'b0;	      TEST_SO <= test_so_id;            end      2'h2: begin              test_cnt <= 1'b0;              test_id <= 1'b0;              test_ex <= TEST_SI;              test_me <= 1'b0;	      TEST_SO <= test_so_ex;            end      2'h3: begin              test_cnt <= 1'b0;              test_id <= 1'b0;              test_ex <= 1'b0;              test_me <= TEST_SI;	      TEST_SO <= test_so_me;            end    endcase  endcontrol xcontrol (.nGCLK1_if(eclk2), .nGCLK2_if(eclk3), .nGCLK3_if(eclk4),//		.test_se(TESTMODE), .test_si(test_cnt), .test_so(test_so_cnt),		.nGCLK_int(eclk1), .if_enbar(if_enbar),		.TESTMODE(TESTMODE), .nRESET(nRESET), .DABORT(DABORT),		.IABORT(IABORT), .nFIQ(nFIQ), .nIRQ(nIRQ),                .ISYNC(ISYNC), .CHSD(CHSD), .CHSE(CHSE), .ID(ID), .IA(IA),		.irq_disable(irq_disable), .fiq_disable(fiq_disable),                .flags_ex(flags_ex), .load_pc_me(load_pc_me),		.exception_to_id(exception_to_id), .pc_touched(pc_touched),		.pc(pc_if), .inst_if(inst_if), .misp_rec(misp_rec),                .mispredicted_if(mispredicted_if), .me_result(me_result),		.base_me(base_me), .ex_result(ex_result),                .Rd_ex(Rd_ex), .Rd_me(Rd_me), .InMREQ(InMREQ),		.Rn_me(Rn_me), .hold_next_ex(hold_next_ex),                 .load_pc_ex(load_pc_ex), .exc_code(exc_code),		.newline(newline), .Rn_ex(Rn_ex), .ptaken_ex(ptaken_ex),		.need_2cycles_id(need_2cycles_id), .pt(pt), .put(put),                .second_id(second_id), .load_use_id(load_use_id),		.ldm_id(ldm_id), .stm_id(stm_id),		.finished_id(finished_id), .id_enbar(id_enbar),		.ex_enbar(ex_enbar), .pc_mod_ex(pc_mod_ex),		.me_enbar(me_enbar), .wb_enbar(wb_enbar), .cop_id(cop_id),                .cop_absent_int(cop_absent_int),		.write_Pc_Rn_ex(write_Pc_Rn_ex),		.write_Pc_Rd_ex(write_Pc_Rd_ex), .eval(eval),                .reset_write_Rn_me(reset_write_Rn_me),		.reset_write_Rd_me(reset_write_Rd_me));/* Comment out first two for non-structural code. */pipe	xpipe	(//		.test_si1(test_si_me), .test_si2(test_si_id),//              .test_si3(test_si_ex), .test_se(TESTMODE),		.test_so_ex(test_so_ex), .test_so_me(test_so_me),		.test_so_id(test_so_id),		.nGCLK_id(eclk1), .nGCLK1_ex(eclk16), .nGCLK2_ex(eclk17),		.nGCLK3_ex(eclk18), .nGCLK_me(eclk13), .TESTMODE(TESTMODE),                .nRESET(nRESET), .id_enbar(id_enbar), .ex_enbar(ex_enbar),		.me_enbar(me_enbar), .inst_if(inst_if), .rf_a(rf_a),		.rf_b(rf_b), .index_a(index_a), .index_b(index_b),		.finished_id(finished_id), .second_id(second_id),		.need_2cycles_id(need_2cycles_id), .exception_to_id(exception_to_id),		.exc_code(exc_code), .hold_next_ex(hold_next_ex),		.write_Pc_Rn_ex(write_Pc_Rn_ex), .DnWR(DnWR),		.write_Pc_Rd_ex(write_Pc_Rd_ex), .DnMREQ(DnMREQ),		.PASS(PASS), .ldm_id(ldm_id), .stm_id(stm_id),		.load_use_id(load_use_id), .cop_id(cop_id),		.pc_mod_ex(pc_mod_ex), .Rn_ex(Rn_ex), .Rd_ex(Rd_ex),		.load_pc_ex(load_pc_ex), .store_addr(store_addr),                .ex_result(ex_result), .stop_me(stop_me),		.flags_ex(flags_ex), .Rn_me(Rn_me), .Rd_me(Rd_me), 		.base_me(base_me), .me_result(me_result),		.write_Rd_ex(write_Rd_ex), .load_pc_me(load_pc_me), 		.data_bus(data_bus_me), .mode(mode),		.reset_write_Rd_me(reset_write_Rd_me),		.reset_write_Rn_me(reset_write_Rn_me),		.double_me(double_me), .byte_me(byte),		.halfword_me(halfword), .store_ex(store_ex),		.pc_if(pc_if), .cop_absent_int(cop_absent_int),                .mispredicted_if(mispredicted_if),		.irq_disable(irq_disable),		.fiq_disable(fiq_disable), .BIGEND(BIGEND),		.write_Rd_me(write_Rd_me), .write_Rn_me(write_Rn_me));wire wena_a = write_Rd_me & ~wb_enbar;wire wena_b = write_Rn_me & ~wb_enbar;//Comment Out First Line for Checker regfile xrf	(.nRESET(nRESET),//regfile xrf	(.nRESET(1'b1),		.nGCLK1(eclk5), .nGCLK2(eclk6), .nGCLK3(eclk7),		.nGCLK4(eclk8), .nGCLK5(eclk9), .nGCLK6(eclk10),                 .nGCLK7(eclk11), .nGCLK8(eclk12), .pc_if(pc_if),		.index_a(index_a), .index_b(index_b), 		.write_a(me_result), .write_b(base_me),		.wena_a(wena_a), .wena_b(wena_b), .w_addr_a(Rd_me),		.w_addr_b(Rn_me), .port_a(rf_a), .port_b(rf_b));mmu	xmmu 	(.nECLK1(eclk19), .nECLK2(eclk20), .nECLK3(eclk21),		.nECLK4(eclk22), .nECLK5(eclk23), .nECLK6(eclk24), 		.nRESET(nRESET), .nWAIT(nWAIT), .CHSD(CHSD), .CHSE(CHSE),		.id_enbar(id_enbar), .BIGEND(BIGEND), .inst_if(inst_if),		.LATECANCEL(LATECANCEL), .PASS(PASS), .IABORT(IABORT),		.DABORT(DABORT), .MMA(MMA), .MMnWR(MMnWR),		.nGCLK(gclk5), .dwb(dwb), .drive_mmd(drive_mmd),		.ex_enbar(ex_enbar), .imiss(imiss), .dmiss(dmiss),		.imiss_addr(imiss_addr), .dmiss_addr(dmiss_addr),		.ic_read_mmd(ic_read_mmd), .dc_read_mmd(dc_read_mmd),		.DD(data_bus_me), .doublehold(doublehold), .IA(IA),		.InMREQ(InMREQ), .useMini(useMini), .iswic(iswic),		.swic_data(swic_data), .dswic(dswic), .dflush(dflush),		.dc_init(dc_init), .ic_init(ic_init), .istall(istall),		.DA(store_addr), .DnMREQ(DnMREQ), .mode(mode),		.me_enbar(me_enbar), .data_decomp(data_decomp),		.mispredicted(mispredicted_if), .misp_rec(misp_rec),		.pc_touched(pc_touched), .hold_next_ex(hold_next_ex),		.ptaken_ex(ptaken_ex), .pt(pt), .put(put), .eval(eval),		.inst_count(inst_count), .inst_finished(inst_finished),		.if_enbar(if_enbar), .stop_me(stop_me));reg DRIVE_MMD_OFFCHIP;always @(posedge gclk5 or negedge nRESET)  begin    if (~nRESET)      DRIVE_MMD_OFFCHIP <= #1 1'b0;    else

⌨️ 快捷键说明

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