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

📄 main.cpp

📁 system C源码 一种替代verilog的语言
💻 CPP
📖 第 1 页 / 共 2 页
字号:
  sc_signal<int>   	add1("ADD1") ;  sc_signal<bool>   	shift_sel("SHIFT_SEL") ;  // EXEC dina = src_A  // EXEC dinb = src_B  // EXEC dest = alu_src  sc_signal<bool>   		c("C") ;  sc_signal<bool>   		v("V") ;  sc_signal<bool>   		z("Z") ;  sc_signal<signed>   		dout("DOUT") ;  sc_signal<bool>   		out_valid("OUTPUT_VALID") ;  sc_signal<unsigned> 		destout("DESTOUT") ;  // ************************ Floating point ******************************  // FPU in_valid = float_valid  // FPU opcode = alu_op  // FPU floata = src_A  // FPU floatb = src_B  // FPU dest = alu_src  sc_signal<signed> 		fdout("FDOUT") ;  sc_signal<bool> 		fout_valid("FOUT_VALID") ;  sc_signal<unsigned> 		fdestout("FDESTOUT") ;    // ************************ PIC *****************************************  sc_signal<bool> 		ireq0("IREQ0") ;  sc_signal<bool> 		ireq1("IREQ1") ;  sc_signal<bool> 		ireq2("IREQ2") ;  sc_signal<bool> 		ireq3("IREQ3") ;  // PIC cs = interrupt_ack  // PIC intack_cpu = interrupt_ack  sc_signal<bool> 		rd_wr("RD_WR") ;  sc_signal<bool> 		intreq("INTREQ") ;  sc_signal<unsigned> 		vectno("VECTNO") ;  sc_signal<bool> 		intack("INTACK") ;  sc_signal<bool> 		intack_cpu("INTACK_CPU") ;  // ************************ MMX ***********************************  // MMX mmx_valid = mmx_valid  // MMX opcode = alu_op  // MMX mmxa = src_A  // MMX mmxb = src_B  // MMX dest = dest  // MMX mmxdout = fdout  // MMX mmxout_valid = fpu_valid  // MMX mmxdestout = fpu_destout   // ************************ DSP *****************************************  sc_signal<int> 		dsp_in1("DPS_IN1");  sc_signal<int> 		dsp_out1("DSP_OUT1");  sc_signal<bool> 		dsp_data_valid("DSP_DATA_VALID");  sc_signal<bool> 		dsp_input_valid("DSP_INPUT_VALID");  sc_signal<bool> 		dsp_data_requested("DSP_DATA_REQUESTED");  ////////////////////////////////////////////////////////////////////////////  // 				MAIN PROGRAM   ////////////////////////////////////////////////////////////////////////////  sc_clock clk("Clock", 1, SC_NS, 0.5, 0.0, SC_NS);  printf("/////////////////////////////////////////////////////////////////////////\n");  printf("//  This code is written at SYNOPSYS, Inc.\n");  printf("/////////////////////////////////////////////////////////////////////////\n");  printf("//  Module   : main of CPU Model\n");  printf("//  Author   : Martin Wang\n");  printf("//  Company  : SYNOPSYS, Inc.\n");  printf("//  Purpose  : This is a simple CPU modeling using SystemC.\n");  printf("//             Instruction Set Architecure defined by Martin Wang.\n");  printf("//             \n");  printf("//           SystemC (TM) Copyright (c) 1988-2001 by Synopsys, Inc.  \n");  printf("//             \n");  printf("/////////////////////////////////////////////////////////////////////////\n");  cout << "// IN THIS MACHINE Integer is " << sizeof (int) << " bytes.\n";  cout << "// IN THIS MACHINE Floating is " << sizeof (float) << " bytes.\n";  cout << "// IN THIS MACHINE Double is " << sizeof (double) << " bytes.\n";  printf("//     \n");  printf("//     \n");  printf("//                            .,,uod8B8bou,,.\n");  printf("//                   ..,uod8BBBBBBBBBBBBBBBBRPFT?l!i:.\n");  printf("//              ,=m8BBBBBBBBBBBBBBBRPFT?!||||||||||||||\n");  printf("//              !...:!TVBBBRPFT||||||||||!!^^\"\"    ||||\n");  printf("//              !.......:!?|||||!!^^\"\"'            ||||\n");  printf("//              !.........||||        ###  #  #    ||||\n");  printf("//              !.........||||  ###  #  #  #  #    ||||\n");  printf("//              !.........|||| #     #  #  #  #    ||||\n");  printf("//              !.........|||| #     # #   #  #    ||||\n");  printf("//              !.........|||| #     ##    #  #    ||||\n");  printf("//              !.........|||| #     #     ###     ||||\n");  printf("//              `.........|||| #   # #            ,||||\n");  printf("//               .;.......||||  ###          _.-!!|||||\n");  printf("//        .,uodWBBBBb.....||||       _.-!!|||||||||!:'\n");  printf("//     !YBBBBBBBBBBBBBBb..!|||:..-!!|||||||!iof68BBBBBb....\n");  printf("//     !..YBBBBBBBBBBBBBBb!!||||||||!iof68BBBBBBRPFT?!::   `.\n");  printf("//     !....YBBBBBBBBBBBBBBbaaitf68BBBBBBRPFT?!:::::::::     `.\n");  printf("//     !......YBBBBBBBBBBBBBBBBBBBRPFT?!::::::;:!^\"`;:::       `.\n");  printf("//     !........YBBBBBBBBBBRPFT?!::::::::::^''...::::::;         iBBbo.\n");  printf("//     `..........YBRPFT?!::::::::::::::::::::::::;iof68bo.      WBBBBbo.\n");  printf("//       `..........:::::::::::::::::::::::;iof688888888888b.     `YBBBP^'\n");  printf("//         `........::88::::::::::::;iof688888888888888888888b.     `\n");  printf("//           `......::81:::::;iof688888888888888888888888888888b.\n");  printf("//             `....:::;iof688888888888888888888888888888888899fT!\n");  printf("//               `..::!8888888888888888888888888888888899fT|!^\"'\n");  printf("//                 `' !!988888888888888888888888899fT|!^\"'\n");  printf("//                     `!!8888888888888888899fT|!^\"'\n");  printf("//                       `!988888888899fT|!^\"'\n");  printf("//                         `!9899fT|!^\"'\n");  printf("//                           `!^\"'\n");  printf("//     \n");  printf("//     \n");  printf("/////////////////////////////////////////////////////////////////////////\n\n\n");  	  fetch 	IFU("FETCH_BLOCK");                IFU.init_param(delay_cycles);		IFU << ram_dataout << branch_target_address << next_pc << branch_valid		<< stall_fetch << intreq << vectno << bios_valid << icache_valid		<< pred_fetch << pred_branch_address << pred_branch_valid << ram_cs << ram_we 		<< addr << ram_datain << instruction << instruction_valid << program_counter 		<< intack_cpu << branch_clear << pred_fetch_valid << reset << clk;  decode 	IDU("DECODE_BLOCK");		IDU << reset << instruction << pred_instruction << instruction_valid		<< pred_inst_valid << out_valid << destout << dout << dram_dataout		<< dram_rd_valid << destout << fdout << fout_valid << fdestout	        << branch_clear << dsp_data_valid << program_counter << pred_on		<< branch_instruction_address << next_pc << branch_valid 		<< branch_target_address << mem_access << mem_address << alu_op		<< mem_write << alu_src << reg_write << src_A << src_B << forward_A		<< forward_B << stall_fetch << decode_valid << float_valid << mmx_valid		<< pid_valid << pid_data << clk;  exec 		IEU("EXEC_BLOCK");		IEU << reset << decode_valid << alu_op << negate << add1 << shift_sel 		<< src_A << src_B << forward_A << forward_B << alu_src << c << v << z		<< dout << out_valid << destout << clk;  floating 	FPU("FLOAT_BLOCK");		// order dependent		FPU << float_valid << alu_op << src_A << src_B << alu_src 		<< fdout << fout_valid << fdestout << clk;  mmxu	 	MMXU("MMX_BLOCK");		MMXU << mmx_valid << alu_op << src_A << src_B << alu_src		<< fdout << fout_valid << fdestout << clk;  bios 		BIOS("BIOS_BLOCK");                  BIOS.init_param(delay_cycles);		BIOS.datain(ram_datain);	// order independent                BIOS.cs(ram_cs);		BIOS.we(ram_we);		BIOS.addr(addr);		BIOS.dataout(ram_dataout);		BIOS.bios_valid(bios_valid);		BIOS.stall_fetch(stall_fetch);		BIOS.CLK(clk);  paging 	PAGING("PAGING_BLOCK");		PAGING << ram_datain << ram_cs << ram_we << addr << icache_din 		<< icache_validin << icache_stall << paging_dout << paging_csout 		<< paging_weout << physical_address << ram_dataout << icache_valid		<< stall_fetch << clk ;  	  icache 	ICACHE("ICACHE_BLOCK"); 		ICACHE.init_param(delay_cycles);		ICACHE << paging_dout << paging_csout << paging_weout 			<< physical_address << pid_valid << pid_data << icache_din << icache_validin 		<< icache_stall << clk;  dcache 	DCACHE("DCACHE_BLOCK");		DCACHE.init_param(delay_cycles);		DCACHE << mmic_datain << mmic_statein << mmic_cs << mmic_we << mmic_addr		<< mmic_dest << mmic_destout << mmic_dataout << mmic_out_valid << mmic_stateout << clk;  pic		APIC("PIC_BLOCK");		APIC << ireq0 << ireq1 << ireq2 << ireq3 <<intack_cpu << rd_wr 		<< intack_cpu << intreq << intack << vectno;  time_t tbuffer = time(NULL);  sc_start();  cout << "Time for simulation = " << (time(NULL) - tbuffer) << endl;  return 0;	/* this is necessary */}

⌨️ 快捷键说明

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