【IC前端虚拟项目】数据搬运指令处理模块前端实现虚拟项目说明-CSDN博客
文档目录在“MVU芯片前端设计验证虚拟项目”中,截至本篇文章时,包含了MVU_FS.md/project_req.md和mvu_vp_list.xlsx三个文件。
- MVU_FS是模块的方案文档,除了feature和对外接口已经提供外,其他部分请自行完成;
- project_req是设计要求和设计及验证需要交付的代码和文档;
- mvu_vp_list是测试点文档的参考;
代码目录在“mvu_prj”中,结构如下:
.
├── project.bashrc
├── rtl
│ ├── cbb
│ │ ├── bw_pipe.v
│ │ ├── flop
│ │ │ ├── dffe.v
│ │ │ ├── dffre.v
│ │ │ ├── dffr.v
│ │ │ └── dff.v
│ │ ├── fw_bw_pipe.v
│ │ ├── fw_bw_shift_pipe.v
│ │ ├── fw_pipe.v
│ │ ├── hand_fifo.v
│ │ ├── hand_merge.v
│ │ ├── hand_split_align.v
│ │ ├── hand_split_unalign.v
│ │ ├── mvu_cbb.lst
│ │ ├── ral
│ │ │ ├── apb2hostif.sv
│ │ │ ├── vmm_ral_a0_field_rtl.sv
│ │ │ ├── vmm_ral_a1_field_rtl.sv
│ │ │ ├── vmm_ral_host_itf.sv
│ │ │ ├── vmm_ral_notifier_rtl.sv
│ │ │ ├── vmm_ral_rc_field_rtl.sv
│ │ │ ├── vmm_ral_ro_field_rtl.sv
│ │ │ ├── vmm_ral_ru_field_rtl.sv
│ │ │ ├── vmm_ral_rw_field_rtl.sv
│ │ │ ├── vmm_ral_w1c_field_rtl.sv
│ │ │ └── vmm_ral_wo_field_rtl.sv
│ │ └── rr_dispatch.v
│ ├── mvu_core.v
│ ├── mvu_inst_buffer.v
│ ├── mvu_param.v
│ ├── mvu_read_path.v
│ ├── mvu_reg.sv
│ ├── mvu_top_define.v
│ ├── mvu_top.rtl.lst
│ ├── mvu_top.v
│ ├── mvu_write_path.v
│ ├── novas.conf
│ ├── novas.rc
│ ├── reg
│ │ ├── geany_run_script.bat
│ │ ├── gen_reg.py
│ │ ├── gen_xml_trans.py
│ │ ├── MVU_REG_Description.ralf
│ │ ├── MVU_REG_Description.xml
│ │ ├── MVU_REG_inf_trans.sv
│ │ ├── MVU_REG_log.txt
│ │ ├── MVU_REG.xlsx
│ │ └── reg
│ │ └── MVU_REG_Description
│ │ ├── ral_global_cfg.sv
│ │ ├── ral_global_status.sv
│ │ ├── ral_MVU_REG.sv
│ │ ├── ral_sys_MVU_REG_rtl.sv
│ │ ├── rtl_global_cfg
│ │ │ ├── ral_blk_MVU_REG_global_cfg_rtl.sv
│ │ │ ├── ral_reg_MVU_REG_global_cfg_AXI_R_CFG_rtl.sv
│ │ │ ├── ral_reg_MVU_REG_global_cfg_AXI_R_OSTD_CFG_rtl.sv
│ │ │ ├── ral_reg_MVU_REG_global_cfg_AXI_W_CFG_rtl.sv
│ │ │ └── ral_reg_MVU_REG_global_cfg_GLOBAL_rtl.sv
│ │ └── rtl_global_status
│ │ ├── ral_blk_MVU_REG_global_status_rtl.sv
│ │ ├── ral_reg_MVU_REG_global_status_interface_rtl.sv
│ │ ├── ral_reg_MVU_REG_global_status_itf_rtl.sv
│ │ └── ral_reg_MVU_REG_global_status_ostd_rtl.sv
│ ├── ut_ver
│ │ ├── mvu_read_path_verification
│ │ │ ├── cfg
│ │ │ │ ├── cfg.mk
│ │ │ │ ├── check_fail.pl
│ │ │ │ ├── run.do
│ │ │ │ └── tb.f
│ │ │ ├── sim
│ │ │ │ └── Makefile
│ │ │ ├── top
│ │ │ │ └── testbench.sv
│ │ │ └── ver
│ │ │ └── mvu_read_path_pkg.sv
│ │ └── mvu_write_path_verification
│ │ ├── cfg
│ │ │ ├── cfg.mk
│ │ │ ├── check_fail.pl
│ │ │ ├── run.do
│ │ │ └── tb.f
│ │ ├── sim
│ │ │ └── Makefile
│ │ ├── top
│ │ │ └── testbench.sv
│ │ └── ver
│ │ └── mvu_write_path_pkg.sv
│ └── verdiLog
│ ├── compiler.log
│ ├── exe.log
│ ├── novas_autosave.ses
│ ├── novas_autosave.ses.config
│ ├── novas_autosave.ses.png
│ ├── novas.log
│ ├── novas_ones_IC_EDA_8908.log.result
│ ├── novas.rc
│ ├── pes.bat
│ ├── tdc.list.oneSearch
│ ├── ToNetlist.log
│ ├── turbo.log
│ ├── verdi.cmd
│ ├── verdi.cmd.bak
│ └── verdi_perf_err.log
├── script
│ ├── cmp_rtl
│ ├── cp.py
│ └── git_push.py
└── ver├── common│ ├── apb_utils│ │ ├── apb_utils.lst│ │ └── src│ │ ├── apb_adapter.sv│ │ ├── apb_agent.sv│ │ ├── apb_driver.sv│ │ ├── apb_interface.sv│ │ ├── apb_monitor.sv│ │ ├── apb_ready_drv.sv│ │ ├── apb_scb.sv│ │ ├── apb_sequencer.sv│ │ ├── apb_sequence.sv│ │ └── apb_transaction.sv│ ├── axi_ar_utils│ │ ├── axi_ar.cfg│ │ ├── axi_ar_utils.lst│ │ ├── src│ │ │ ├── axi_ar_agent.sv│ │ │ ├── axi_ar_driver.sv│ │ │ ├── axi_ar_interface.sv│ │ │ ├── axi_ar_monitor.sv│ │ │ ├── axi_ar_ready_drv.sv│ │ │ ├── axi_ar_scb.sv│ │ │ ├── axi_ar_sequencer.sv│ │ │ ├── axi_ar_sequence.sv│ │ │ ├── axi_ar_transaction.sv│ │ │ └── prj_scoreboard.sv│ │ └── test│ │ ├── axi_ar_env.sv│ │ ├── axi_ar_sim.lst│ │ ├── base_test.sv│ │ ├── check_fail.pl│ │ ├── harness.sv│ │ ├── Makefile│ │ ├── run.do│ │ └── sanity_case.sv│ ├── axi_aw_utils│ │ ├── axi_aw.cfg│ │ ├── axi_aw_utils.lst│ │ ├── src│ │ │ ├── axi_aw_agent.sv│ │ │ ├── axi_aw_driver.sv│ │ │ ├── axi_aw_interface.sv│ │ │ ├── axi_aw_monitor.sv│ │ │ ├── axi_aw_ready_drv.sv│ │ │ ├── axi_aw_scb.sv│ │ │ ├── axi_aw_sequencer.sv│ │ │ ├── axi_aw_sequence.sv│ │ │ ├── axi_aw_transaction.sv│ │ │ └── prj_scoreboard.sv│ │ └── test│ │ ├── axi_aw_env.sv│ │ ├── axi_aw_sim.lst│ │ ├── base_test.sv│ │ ├── check_fail.pl│ │ ├── harness.sv│ │ ├── Makefile│ │ ├── run.do│ │ └── sanity_case.sv│ ├── axi_b_utils│ │ ├── axi_b.cfg│ │ ├── axi_b_utils.lst│ │ ├── src│ │ │ ├── axi_b_agent.sv│ │ │ ├── axi_b_driver.sv│ │ │ ├── axi_b_interface.sv│ │ │ ├── axi_b_monitor.sv│ │ │ ├── axi_b_ready_drv.sv│ │ │ ├── axi_b_scb.sv│ │ │ ├── axi_b_sequencer.sv│ │ │ ├── axi_b_sequence.sv│ │ │ ├── axi_b_transaction.sv│ │ │ └── prj_scoreboard.sv│ │ └── test│ │ ├── axi_b_env.sv│ │ ├── axi_b_sim.lst│ │ ├── base_test.sv│ │ ├── check_fail.pl│ │ ├── harness.sv│ │ ├── Makefile│ │ ├── run.do│ │ └── sanity_case.sv│ ├── axi_ram_model│ │ ├── axi_ram_model.lst│ │ ├── axi_ram_model_seq.sv│ │ ├── axi_ram_model_sqr.sv│ │ └── axi_ram_model.sv│ ├── axi_r_utils│ │ ├── axi_r.cfg│ │ ├── axi_r_utils.lst│ │ ├── src│ │ │ ├── axi_r_agent.sv│ │ │ ├── axi_r_driver.sv│ │ │ ├── axi_r_interface.sv│ │ │ ├── axi_r_monitor.sv│ │ │ ├── axi_r_ready_drv.sv│ │ │ ├── axi_r_scb.sv│ │ │ ├── axi_r_sequencer.sv│ │ │ ├── axi_r_sequence.sv│ │ │ ├── axi_r_transaction.sv│ │ │ └── prj_scoreboard.sv│ │ └── test│ │ ├── axi_r_env.sv│ │ ├── axi_r_sim.lst│ │ ├── base_test.sv│ │ ├── check_fail.pl│ │ ├── harness.sv│ │ ├── Makefile│ │ ├── run.do│ │ ├── sanity_case.sv│ │ └── tr_db.log│ ├── axi_w_utils│ │ ├── axi_w.cfg│ │ ├── axi_w_utils.lst│ │ ├── src│ │ │ ├── axi_w_agent.sv│ │ │ ├── axi_w_driver.sv│ │ │ ├── axi_w_interface.sv│ │ │ ├── axi_w_monitor.sv│ │ │ ├── axi_w_ready_drv.sv│ │ │ ├── axi_w_scb.sv│ │ │ ├── axi_w_sequencer.sv│ │ │ ├── axi_w_sequence.sv│ │ │ ├── axi_w_transaction.sv│ │ │ └── prj_scoreboard.sv│ │ └── test│ │ ├── axi_w_env.sv│ │ ├── axi_w_sim.lst│ │ ├── base_test.sv│ │ ├── check_fail.pl│ │ ├── harness.sv│ │ ├── Makefile│ │ ├── run.do│ │ └── sanity_case.sv│ ├── cmt_utils│ │ ├── cmt.cfg│ │ ├── cmt_utils.lst│ │ ├── src│ │ │ ├── cmt_agent.sv│ │ │ ├── cmt_driver.sv│ │ │ ├── cmt_interface.sv│ │ │ ├── cmt_monitor.sv│ │ │ ├── cmt_ready_drv.sv│ │ │ ├── cmt_scb.sv│ │ │ ├── cmt_sequencer.sv│ │ │ ├── cmt_sequence.sv│ │ │ ├── cmt_transaction.sv│ │ │ └── prj_scoreboard.sv│ │ └── test│ │ ├── base_test.sv│ │ ├── check_fail.pl│ │ ├── cmt_env.sv│ │ ├── cmt_sim.lst│ │ ├── harness.sv│ │ ├── Makefile│ │ ├── run.do│ │ └── sanity_case.sv│ ├── inst_utils│ │ ├── inst.cfg│ │ ├── inst_utils.lst│ │ ├── src│ │ │ ├── inst_agent.sv│ │ │ ├── inst_driver.sv│ │ │ ├── inst_interface.sv│ │ │ ├── inst_monitor.sv│ │ │ ├── inst_ready_drv.sv│ │ │ ├── inst_scb.sv│ │ │ ├── inst_sequencer.sv│ │ │ ├── inst_sequence.sv│ │ │ ├── inst_transaction.sv│ │ │ └── prj_scoreboard.sv│ │ └── test│ │ ├── base_test.sv│ │ ├── check_fail.pl│ │ ├── harness.sv│ │ ├── inst_env.sv│ │ ├── inst_sim.lst│ │ ├── Makefile│ │ ├── run.do│ │ └── sanity_case.sv│ └── prj_utils│ ├── prj_utils.lst│ └── src│ ├── prj_define.sv│ └── prj_scoreboard.sv├── mvu│ ├── cfg│ │ ├── cfg.mk│ │ ├── check_fail.pl│ │ ├── run.do│ │ └── tb.f│ ├── cov│ │ └── mvu_inst_cov.sv│ ├── env│ │ ├── mvu_env.sv│ │ └── mvu_rm.sv│ ├── sim│ │ ├── Makefile│ │ ├── novas.rc│ │ └── run_case.sh│ ├── tc│ │ ├── base_test.sv│ │ ├── one_inst_case.sv│ │ ├── random_case.sv│ │ ├── sanity_case.sv│ │ ├── small_pkt_case.sv│ │ └── tc.f│ └── th│ ├── harness.sv│ └── th│ └── harness.sv├── mvu.cfg└── mvu_sim_define.sv
这些全部是手撕代码,当然会借助verilog-mode/auto_testbench/gen_uvm_agent/gen_uvm_tb等诸多工具辅助开发,不需要担心。
mvu_prj下预计有五个目录:
- rtl:用于放置rtl代码,以及rtl filelist,一些模块的ut仿真环境也在这个目录下;
- ver:验证目录,其中的common为公用组件和utils,mvu为muv模块的仿真环境;
- script:相关的脚本放置目录;
- flow:编译、lint、综合的工作目录;
- lib:综合的库文件目录;
由于目前只完成了代码编写和功能验证,目录内容暂不全面,后面会逐步补全。