【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:綜合的庫文件目錄;
由于目前只完成了代碼編寫和功能驗證,目錄內容暫不全面,后面會逐步補全。