bsv.mk
上传用户:aoptech
上传日期:2014-09-22
资源大小:784k
文件大小:8k
源码类别:

3G开发

开发平台:

Others

  1. ifndef BLUESPECDIR
  2.   $(error Please set environment variable BLUESPECDIR before running make)
  3. endif
  4. # setup dir for build output and simulation output
  5. BSVBLD = ../../build
  6. RESDIR = ../../result
  7. MAINV  = $(BLUESPECDIR)/Verilog/main.v
  8. # bluespec compiler flags
  9. BSC = bsc -u -aggressive-conditions -steps 1000000 +RTS -K4000M -RTS 
  10. -keep-fires -cross-info -no-show-method-conf -show-compiles
  11. BSC_V = $(BSC) -verilog
  12. BSC_BA = $(BSC) -sim
  13. BSC_LIB = $(BSC) -elab -verilog
  14. # Decides root directory (null for common files)
  15. mkSimTop = $(sim_top:%.bsv=mk%)
  16. BLD= $(BSVBLD)/$(mkSimTop)
  17. RES= $(RESDIR)/$(mkSimTop)
  18. # Separate directory for each build output
  19. v_dir= $(BLD)/src
  20. o_dir= $(BLD)/bo
  21. s_dir= $(BLD)/sim
  22. b_dir= $(BLD)/bin
  23. syn_dir= $(BLD)/syn
  24. lib_dir = $(BSVBLD)/../src/lib
  25. src_dirs = $(o_dir):$(lib_dir):$(lib_dir)/CPInsert:$(lib_dir)/ChannelEstimator:$(lib_dir)/ConvEncoder:$(lib_dir)/FFT:$(lib_dir)/FIFOs:$(lib_dir)/Interleaver:$(lib_dir)/Mapper:$(lib_dir)/PilotInsert:$(lib_dir)/Pipeline:$(lib_dir)/Puncturer:$(lib_dir)/ReedSolomon:$(lib_dir)/Scrambler:$(lib_dir)/ShiftRegs:$(lib_dir)/Synchronizer:$(lib_dir)/Unserializer:$(lib_dir)/Viterbi:+
  26. # add for bil testing
  27. #rtl_dir=$(rtl)
  28. #RIO_DIR     = ${RIO}
  29. #TB_INC +=  +incdir+${RIO}/source/rio_defs_virtex4_10b/sim
  30. #TB_INC += +incdir+${rtl_dir}/rio_defs_virtex4_10b/sim
  31. #SYNTB_INC += +incdir+${rtl_dir}/rio_defs_virtex4_10b/syn
  32. #COMP_OPTS = ${TB_INC}
  33. #SYNCOMP_OPTS = ${SYNTB_INC}
  34. mkSimTop = $(sim_top:%.bsv=mk%)
  35. #bsv_files= $(dut_files) $(syn_files) $(dut_top) $(lib_files) $(sim_top) 
  36. bsv_files= $(dut_top) $(sim_top)
  37. bi_files= $(bsv_files:%.bsv=$(o_dir)/%.bo)
  38. ba_files= $(bsv_files:%.bsv=$(o_dir)/mk%.ba)
  39. ba_rules= $(bsv_files:%.bsv=mk%BA)
  40. v_files = $(bsv_files:%.bsv=$(v_dir)/mk%.v)
  41. v_rules = $(bsv_files:%.bsv=mk%V)
  42. lib_rules = $(bsv_files:%.bsv=mk%LIB)
  43. cxx_obj = $(cxx_files:%.cxx=$(s_dir)/%.o)
  44. # Transformation Rules
  45. mk%V: %.bsv
  46. @mkdir -p $(v_dir) $(o_dir)
  47. $(BSC_V) -bdir $(o_dir) -vdir $(v_dir) -p $(src_dirs) $<
  48. touch $@
  49. mk%BA: %.bsv
  50. @mkdir -p $(s_dir) $(o_dir)
  51. $(BSC_BA) -bdir $(o_dir) -simdir $(s_dir) -p $(src_dirs) $<
  52. touch $@
  53. mk%LIB: %.bsv
  54. @mkdir -p $(v_dir) $(s_dir) $(o_dir)
  55. $(BSC_LIB) -bdir $(o_dir) -vdir $(v_dir) -simdir $(s_dir) -p $(src_dirs) $<
  56. touch $(subst LIB,V,$@)
  57. touch $(subst LIB,BA,$@)
  58. $(s_dir)/%.o: %.cxx
  59. @mkdir -p $(s_dir)
  60. @# compile C++ code
  61. $(COMPILE.cpp) $(OUTPUT_OPTION) $<
  62. # iverilog simulator
  63. $(b_dir)/ivsim_$(mkSimTop): $(v_rules) 
  64. mkdir -p $(b_dir)
  65. iverilog -y . -y $(BLUESPECDIR)/Verilog -y $(v_dir) 
  66. ${MAINV} -o $@ -DTOP=$(mkSimTop)
  67. .PHONY: $(RES)/run_ivsim
  68. $(RES)/run_ivsim: $(b_dir)/ivsim_$(mkSimTop)
  69. mkdir -p $(RES)
  70. $< | tee $@
  71. # bluesim simulator
  72. $(b_dir)/bsim_$(mkSimTop): $(ba_rules) $(cxx_obj) 
  73. mkdir -p $(b_dir)
  74. bsc -v -e $(mkSimTop) -sim -bdir $(o_dir) -simdir $(o_dir) 
  75. -p $(o_dir):$(BSVBLD)/bo:+ -o $@ $(o_dir)/*.ba $(cxx_obj)
  76. .PHONY: $(RES)/run_bsim
  77. $(RES)/run_bsim: $(b_dir)/bsim_$(mkSimTop)
  78. mkdir -p $(RES)
  79. $< | tee $@
  80. # VCS simulator
  81. $(b_dir)/simv_$(mkSimTop): $(v_rules) 
  82. mkdir -p $(b_dir)
  83. cd $(b_dir) && vcs  +v2k +libext+.v ${MAINV} -y . -y $(libv_dir) 
  84. -y $(v_dir) -y $(BLUESPECDIR)/Verilog -o $@ +define+TOP=$(mkSimTop)
  85. .PHONY: run_vcs
  86. $(RES)/run_vcs: $(b_dir)/simv_$(mkSimTop)
  87. mkdir -p $(RES) 
  88. $< +bscvcd +bsccycle | tee $@
  89. # MTI simulator
  90. # $(b_dir)/simu.work:
  91. #  mkdir -p $(b_dir)
  92. #  cd $(b_dir) && vlib simu.work
  93. #  cd $(b_dir) && vmap RLL_LIB ${RIO}/libs/rll_lib 
  94. #  cd $(b_dir) && vmap RDB_LIB ${RIO}/libs/rdb_lib 
  95. # $(b_dir)/mti: $(v_files) $(b_dir)/simu.work
  96. #  cd $(b_dir) &&  vlog -work simu.work +define+TOP=$(mkSimTop) +v2k ${MAINV} 
  97. #  -y $(BLUESPECDIR)/Verilog -y $(rtl_dir) -y $(v_dir) -y $(libv_dir) +libext+.v ${COMP_OPTS}
  98. #  cd $(b_dir) && touch mti
  99. # .PHONY: run_mti
  100. # run_mti: $(b_dir)/mti
  101. #  cd $(b_dir) && vsim -c -do "run -all; exit" simu.work.main +bscvcd +bsccycle 
  102. #  +nowarnTSCALE -L RLL_LIB -L RDB_LIB | tee mti.txt
  103. # view_mti:
  104. #  cd $(b_dir) && /pkg/qct/software/novas/2007.01/bin/verdi &
  105. # Generates verilog files for synthesis
  106. .PHONY: syn
  107. syn: $(v_rules)
  108. mkdir -p $(syn_dir)
  109. cp -p ../dc_scripts/* $(syn_dir)/
  110. cd $(syn_dir) && make
  111. .PHONY: icarus
  112. icarus: $(b_dir)/$(mkSimTop)
  113. # Generates verilog files for synthesis
  114. .PHONY: lib
  115. lib: $(lib_rules)
  116. # Simulation with Bluespec
  117. .PHONY: bsim
  118. bsim: $(b_dir)/bsim_$(mkSimTop)
  119. .PHONY: run_bsim
  120. run_bsim: $(RES)/run_bsim
  121. # Simulation with iverilog
  122. .PHONY: ivsim
  123. ivsim: $(b_dir)/ivsim_$(mkSimTop)
  124. .PHONY: run_ivsim
  125. run_ivsim: $(RES)/run_ivsim
  126. # Simulation with Vcs
  127. .PHONY: simv
  128. simv: $(b_dir)/simv_$(mkSimTop)
  129. .PHONY: run_simv
  130. run_simv: $(RES)/run_simv
  131. # Simulation with Modelsim
  132. .PHONY: mti
  133. mti: $(b_dir)/mti
  134. # Build memory
  135. .PHONY: memory
  136. memory: $(BLD)/memory_done
  137. $(BLD)/memory_done: sram.tcl
  138. mkdir -p $(v_dir)
  139. cd $(v_dir) && zMem $(PWD)/sram.tcl
  140. mkdir -p $(v_dir)_bb
  141. cd $(v_dir) && mv *_bbx.v $(v_dir)_bb
  142. cd $(v_dir) && mv *.edf.gz $(BLD)
  143. cd $(v_dir) && rm *.vhd *.log *_gates*.v
  144. touch $@
  145. # Fire up Blueview
  146. .PHONY: blueview
  147. blueview: $(v_dir)/$(mkSimTop).info
  148. cd $(b_dir) && blueview $< $(b_dir)/dump.vcd /main/top
  149. # Clean deletes object files
  150. .PHONY: clean
  151. clean:
  152. rm -rf $(BLD)
  153. rm mk*V
  154. rm mk*BA
  155. # generate only html documentation. "doxygen -g" shows all defaults
  156. doc_bsv=$(BLD)/doc/bsv
  157. .PHONY: bsv_doc
  158. bsv_doc: $(doc_bsv)/html/index.html
  159. $(doc_bsv)/html/index.html: $(bsv_files)
  160. mkdir -p $(doc_bsv)
  161. @rm -rf $(doc_bsv)/Doxyfile
  162. @echo "PROJECT_NAME           = $(sim_top)"      >> $(doc_bsv)/Doxyfile
  163. @echo "OUTPUT_DIRECTORY       = $(doc_bsv)"      >> $(doc_bsv)/Doxyfile
  164. @echo "TAB_SIZE               = 4"               >> $(doc_bsv)/Doxyfile
  165. @echo "INPUT                  = $(pwd)"          >> $(doc_bsv)/Doxyfile
  166. @echo "FILE_PATTERNS          = *.h *.bsv"       >> $(doc_bsv)/Doxyfile
  167. @echo "SOURCE_BROWSER         = YES"             >> $(doc_bsv)/Doxyfile
  168. @echo "GENERATE_LATEX         = NO"              >> $(doc_bsv)/Doxyfile
  169. doxygen $(doc_bsv)/Doxyfile
  170. doc_verilog=$(BLD)/doc/verilog
  171. .PHONY: verilog_doc
  172. verilog_doc: $(doc_verilog)/html/index.html
  173. $(doc_verilog)/html/index.html:
  174. mkdir -p $(doc_verilog)
  175. @rm -rf $(doc_verilog)/Doxyfile
  176. @echo "PROJECT_NAME           = $(mkSimTop)"              >> $(doc_verilog)/Doxyfile
  177. @echo "OUTPUT_DIRECTORY       = $(doc_verilog)"           >> $(doc_verilog)/Doxyfile
  178. @echo "TAB_SIZE               = 4"                        >> $(doc_verilog)/Doxyfile
  179. @echo "INPUT                  = $(v_dir) $(PWD)/down/rtl" >> $(doc_verilog)/Doxyfile
  180. @echo "FILE_PATTERNS          = *.h *.v"                  >> $(doc_verilog)/Doxyfile
  181. @echo "SOURCE_BROWSER         = YES"                      >> $(doc_verilog)/Doxyfile
  182. @echo "GENERATE_LATEX         = NO"                       >> $(doc_verilog)/Doxyfile
  183. doxygen $(doc_verilog)/Doxyfile
  184. .PHONY: doc
  185. doc: bsv_doc verilog_doc
  186. help:
  187. @echo
  188. @echo "   TARGETS:"
  189. @echo
  190. @echo "     synth - generates $(v_dir)/*.v and iverilog executable- $(b_dir)/$(mkSimTop)"
  191. @echo "       lib - generates $(v_dir)/*.v and $(o_dir)/*.ba/bo files"
  192. @echo "      bsim - generates $(o_dir)/*.bi/bo and Bluespec executable- $(b_dir)/bsim_$(mkSimTop)"
  193. @echo "       mti - generates $(o_dir)/*.bi/bo and Modelsim simulation env- $(b_dir)/mti"
  194. @echo "      simv - generates $(o_dir)/*.bi/bo and VCS executable- $(b_dir)/simv"
  195. @echo
  196. @echo "     clean - deletes $(BLD)"
  197. @echo
  198. env:
  199. @echo
  200. @echo "---------------------------------------------------------"
  201. @echo "               Makefile Environment"
  202. @echo "---------------------------------------------------------"
  203. @echo "       BSV Source files: $(bsv_files)"
  204. @echo "---------------------------------------------------------"
  205. @echo "           .v directory: $(v_dir)"
  206. @echo "     .ba file directory: $(s_dir)"
  207. @echo ".bi, .bo file directory: $(o_dir)"
  208. @echo "---------------------------------------------------------"
  209. @echo "              BSV files: $(bsv_files)"
  210. @echo "              CXX files: $(cxx_files)"
  211. @echo "              DUT files: $(dut_files)"
  212. @echo "              SYN files: $(syn_files)"
  213. @echo "              SIM files: $(sim_files)"
  214. @echo "                V files: $(v_files)"
  215. @echo "---------------------------------------------------------"
  216. @echo " For make actions, type: make -n target_name"
  217. @echo "---------------------------------------------------------"
  218. @echo