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

📄 or1200_cpu.v

📁 or1200开源risc cpu的verilog描述实现
💻 V
📖 第 1 页 / 共 2 页
字号:
assign immu_en = sr[`OR1200_SR_IME];//// SUPV bit//assign supv = sr[`OR1200_SR_SM];//// Instantiation of instruction fetch block//or1200_genpc or1200_genpc(	.clk(clk),	.rst(rst),	.icpu_adr_o(icpu_adr_o),	.icpu_cycstb_o(icpu_cycstb_o),	.icpu_sel_o(icpu_sel_o),	.icpu_tag_o(icpu_tag_o),	.icpu_rty_i(icpu_rty_i),	.icpu_adr_i(icpu_adr_i),	.branch_op(branch_op),	.except_type(except_type),	.except_start(except_start),	.except_prefix(sr[`OR1200_SR_EPH]),	.branch_addrofs(branch_addrofs),	.lr_restor(operand_b),	.flag(flag),	.taken(branch_taken),	.binsn_addr(lr_sav),	.epcr(epcr),	.spr_dat_i(spr_dat_cpu),	.spr_pc_we(pc_we),	.genpc_refetch(genpc_refetch),	.genpc_freeze(genpc_freeze),  .genpc_stop_prefetch(1'b0),	.no_more_dslot(no_more_dslot));//// Instantiation of instruction fetch block//or1200_if or1200_if(	.clk(clk),	.rst(rst),	.icpu_dat_i(icpu_dat_i),	.icpu_ack_i(icpu_ack_i),	.icpu_err_i(icpu_err_i),	.icpu_adr_i(icpu_adr_i),	.icpu_tag_i(icpu_tag_i),	.if_freeze(if_freeze),	.if_insn(if_insn),	.if_pc(if_pc),	.flushpipe(flushpipe),	.if_stall(if_stall),	.no_more_dslot(no_more_dslot),	.genpc_refetch(genpc_refetch),	.rfe(rfe),	.except_itlbmiss(except_itlbmiss),	.except_immufault(except_immufault),	.except_ibuserr(except_ibuserr));//// Instantiation of instruction decode/control logic//or1200_ctrl or1200_ctrl(	.clk(clk),	.rst(rst),	.id_freeze(id_freeze),	.ex_freeze(ex_freeze),	.wb_freeze(wb_freeze),	.flushpipe(flushpipe),	.if_insn(if_insn),	.ex_insn(ex_insn),	.branch_op(branch_op),	.branch_taken(branch_taken),	.rf_addra(rf_addra),	.rf_addrb(rf_addrb),	.rf_rda(rf_rda),	.rf_rdb(rf_rdb),	.alu_op(alu_op),	.mac_op(mac_op),	.shrot_op(shrot_op),	.comp_op(comp_op),	.rf_addrw(rf_addrw),	.rfwb_op(rfwb_op),	.wb_insn(wb_insn),	.simm(simm),	.branch_addrofs(branch_addrofs),	.lsu_addrofs(lsu_addrofs),	.sel_a(sel_a),	.sel_b(sel_b),	.lsu_op(lsu_op),	.cust5_op(cust5_op),	.cust5_limm(cust5_limm),	.multicycle(multicycle),	.spr_addrimm(spr_addrimm),	.wbforw_valid(wbforw_valid),	.sig_syscall(sig_syscall),	.sig_trap(sig_trap),	.force_dslot_fetch(force_dslot_fetch),	.no_more_dslot(no_more_dslot),	.ex_void(ex_void),	.id_macrc_op(id_macrc_op),	.ex_macrc_op(ex_macrc_op),	.rfe(rfe),	.du_hwbkpt(du_hwbkpt),	.except_illegal(except_illegal));//// Instantiation of register file//or1200_rf or1200_rf(	.clk(clk),	.rst(rst),	.supv(sr[`OR1200_SR_SM]),	.wb_freeze(wb_freeze),	.addrw(rf_addrw),	.dataw(rf_dataw),	.id_freeze(id_freeze),	.we(rfwb_op[0]),	.flushpipe(flushpipe),	.addra(rf_addra),	.rda(rf_rda),	.dataa(rf_dataa),	.addrb(rf_addrb),	.rdb(rf_rdb),	.datab(rf_datab),	.spr_cs(spr_cs[`OR1200_SPR_GROUP_SYS]),	.spr_write(spr_we),	.spr_addr(spr_addr),	.spr_dat_i(spr_dat_cpu),	.spr_dat_o(spr_dat_rf));//// Instantiation of operand muxes//or1200_operandmuxes or1200_operandmuxes(	.clk(clk),	.rst(rst),	.id_freeze(id_freeze),	.ex_freeze(ex_freeze),	.rf_dataa(rf_dataa),	.rf_datab(rf_datab),	.ex_forw(rf_dataw),	.wb_forw(wb_forw),	.simm(simm),	.sel_a(sel_a),	.sel_b(sel_b),	.operand_a(operand_a),	.operand_b(operand_b),	.muxed_b(muxed_b));//// Instantiation of CPU's ALU//or1200_alu or1200_alu(	.a(operand_a),	.b(operand_b),	.mult_mac_result(mult_mac_result),	.macrc_op(ex_macrc_op),	.alu_op(alu_op),	.shrot_op(shrot_op),	.comp_op(comp_op),	.cust5_op(cust5_op),	.cust5_limm(cust5_limm),	.result(alu_dataout),	.flagforw(flagforw),	.flag_we(flag_we),	.cyforw(cyforw),	.cy_we(cy_we),  .flag(flag),	.carry(carry));//// Instantiation of CPU's ALU//or1200_mult_mac or1200_mult_mac(	.clk(clk),	.rst(rst),	.ex_freeze(ex_freeze),	.id_macrc_op(id_macrc_op),	.macrc_op(ex_macrc_op),	.a(operand_a),	.b(operand_b),	.mac_op(mac_op),	.alu_op(alu_op),	.result(mult_mac_result),	.mac_stall_r(mac_stall),	.spr_cs(spr_cs[`OR1200_SPR_GROUP_MAC]),	.spr_write(spr_we),	.spr_addr(spr_addr),	.spr_dat_i(spr_dat_cpu),	.spr_dat_o(spr_dat_mac));//// Instantiation of CPU's SPRS block//or1200_sprs or1200_sprs(	.clk(clk),	.rst(rst),	.addrbase(operand_a),	.addrofs(spr_addrimm),	.dat_i(operand_b),	.alu_op(alu_op),	.flagforw(flagforw),	.flag_we(flag_we),	.flag(flag),	.cyforw(cyforw),	.cy_we(cy_we),	.carry(carry),	.to_wbmux(sprs_dataout),	.du_addr(du_addr),	.du_dat_du(du_dat_du),	.du_read(du_read),	.du_write(du_write),	.du_dat_cpu(du_dat_cpu),	.spr_addr(spr_addr),	.spr_dat_pic(spr_dat_pic),	.spr_dat_tt(spr_dat_tt),	.spr_dat_pm(spr_dat_pm),	.spr_dat_cfgr(spr_dat_cfgr),	.spr_dat_rf(spr_dat_rf),	.spr_dat_npc(spr_dat_npc),        .spr_dat_ppc(spr_dat_ppc),	.spr_dat_mac(spr_dat_mac),	.spr_dat_dmmu(spr_dat_dmmu),	.spr_dat_immu(spr_dat_immu),	.spr_dat_du(spr_dat_du),	.spr_dat_o(spr_dat_cpu),	.spr_cs(spr_cs),	.spr_we(spr_we),	.epcr_we(epcr_we),	.eear_we(eear_we),	.esr_we(esr_we),	.pc_we(pc_we),	.epcr(epcr),	.eear(eear),	.esr(esr),	.except_started(except_started),	.sr_we(sr_we),	.to_sr(to_sr),	.sr(sr),	.branch_op(branch_op));//// Instantiation of load/store unit//or1200_lsu or1200_lsu(	.addrbase(operand_a),	.addrofs(lsu_addrofs),	.lsu_op(lsu_op),	.lsu_datain(operand_b),	.lsu_dataout(lsu_dataout),	.lsu_stall(lsu_stall),	.lsu_unstall(lsu_unstall),        .du_stall(du_stall),	.except_align(except_align),	.except_dtlbmiss(except_dtlbmiss),	.except_dmmufault(except_dmmufault),	.except_dbuserr(except_dbuserr),	.dcpu_adr_o(dcpu_adr_o),	.dcpu_cycstb_o(dcpu_cycstb_o),	.dcpu_we_o(dcpu_we_o),	.dcpu_sel_o(dcpu_sel_o),	.dcpu_tag_o(dcpu_tag_o),	.dcpu_dat_o(dcpu_dat_o),	.dcpu_dat_i(dcpu_dat_i),	.dcpu_ack_i(dcpu_ack_i),	.dcpu_rty_i(dcpu_rty_i),	.dcpu_err_i(dcpu_err_i),	.dcpu_tag_i(dcpu_tag_i));//// Instantiation of write-back muxes//or1200_wbmux or1200_wbmux(	.clk(clk),	.rst(rst),	.wb_freeze(wb_freeze),	.rfwb_op(rfwb_op),	.muxin_a(alu_dataout),	.muxin_b(lsu_dataout),	.muxin_c(sprs_dataout),	.muxin_d({lr_sav, 2'b0}),	.muxout(rf_dataw),	.muxreg(wb_forw),	.muxreg_valid(wbforw_valid));//// Instantiation of freeze logic//or1200_freeze or1200_freeze(	.clk(clk),	.rst(rst),	.multicycle(multicycle),	.flushpipe(flushpipe),	.extend_flush(extend_flush),	.lsu_stall(lsu_stall),	.if_stall(if_stall),	.lsu_unstall(lsu_unstall),	.force_dslot_fetch(force_dslot_fetch),	.abort_ex(abort_ex),	.du_stall(du_stall),	.mac_stall(mac_stall),	.genpc_freeze(genpc_freeze),	.if_freeze(if_freeze),	.id_freeze(id_freeze),	.ex_freeze(ex_freeze),	.wb_freeze(wb_freeze),	.icpu_ack_i(icpu_ack_i),	.icpu_err_i(icpu_err_i));//// Instantiation of exception block//or1200_except or1200_except(	.clk(clk),	.rst(rst),	.sig_ibuserr(except_ibuserr),	.sig_dbuserr(except_dbuserr),	.sig_illegal(except_illegal),	.sig_align(except_align),	.sig_range(1'b0),	.sig_dtlbmiss(except_dtlbmiss),	.sig_dmmufault(except_dmmufault),	.sig_int(sig_int),	.sig_syscall(sig_syscall),	.sig_trap(sig_trap),	.sig_itlbmiss(except_itlbmiss),	.sig_immufault(except_immufault),	.sig_tick(sig_tick),	.branch_taken(branch_taken),	.icpu_ack_i(icpu_ack_i),	.icpu_err_i(icpu_err_i),	.dcpu_ack_i(dcpu_ack_i),	.dcpu_err_i(dcpu_err_i),	.genpc_freeze(genpc_freeze),        .id_freeze(id_freeze),        .ex_freeze(ex_freeze),        .wb_freeze(wb_freeze),	.if_stall(if_stall),	.if_pc(if_pc),	.id_pc(id_pc),	.lr_sav(lr_sav),	.flushpipe(flushpipe),	.extend_flush(extend_flush),	.except_type(except_type),	.except_start(except_start),	.except_started(except_started),	.except_stop(except_stop),	.ex_void(ex_void),	.spr_dat_ppc(spr_dat_ppc),	.spr_dat_npc(spr_dat_npc),	.datain(operand_b),	.du_dsr(du_dsr),	.epcr_we(epcr_we),	.eear_we(eear_we),	.esr_we(esr_we),	.pc_we(pc_we),        .epcr(epcr),	.eear(eear),	.esr(esr),	.lsu_addr(dcpu_adr_o),	.sr_we(sr_we),	.to_sr(to_sr),	.sr(sr),	.abort_ex(abort_ex));//// Instantiation of configuration registers//or1200_cfgr or1200_cfgr(	.spr_addr(spr_addr),	.spr_dat_o(spr_dat_cfgr));endmodule

⌨️ 快捷键说明

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