加班猫

人于人区别,就是远见不一样。szfpga.com

FPGA中级技术脚本使用

0
阅读(1816)

       我个人觉得做fpga 不会脚本,基本跟残废一个概念。以前我觉得做FPGA应该学习什么人工智能,大数据,机器人。现在想起来真是傻逼,做fpga也好,做ic,做逻辑其实基本能力都是一样的。

        一个学习tcl脚本,perl脚本能力,perl脚本可以做定制IP设定功能,可以封装IP功能。tcl是仿真,软件自动编译能力。二个是时序约束能力。以后都是会重点讲述这两个方面。 

下面列举一些常见的TCL脚本命令


#Run do文件的一些常用命令
#打开现有工程

project open C:/Users/jayash/Desktop/sim/ImageProcess

#新建一个库

vlib my_lib

#将其映射到work

vmap my_lib work

#删除制定库

vmap -del my_lib

#添加指定设计文件

project addfile src/Verilog/test.v

#编译工程内所有文件

project compileall

#编译指定verilog文件

vlog src/Verilog/test.v

#编译指定的vhdl文件,同时检查可综合性

vcom –check_synthesis src/video_cap.vhd 

##仿真work库下面的test_tb实例,同时调用220model_ver库,不再进行任何优化,仿真分辨率1ns。

vsim –t 1ns –L 220model_ver –gui –novopt work.test_tb

#取消warning,例如‘x’,‘u’,‘z’信号的警告,对提高编译速度很有帮助

set StdarithNoWarning 1#查看objectView objects#查看局部变量View locals#查看sourceView source

#添加模块顶层所有信号到波形图

add wave*

#10进制无符号显示

Radix usigned

#16进制显示

Radix hex

#重新进行仿真

Restart

#开始仿真
Run

#仿真指定时间

Run 1ms

#时钟激励50ns周期 占空比50%

Force –repeat 50 clk 0 0,1 25

#指定信号置0

Force rst_n 0

#指定信号置1


Force rst_n 1

#指定信号赋值

Force din_a 123

Force din_b 39


  下面是经常用的仿真脚本模板,仿真新的工程只需要修改一点点,就可以直接使用了。将sim.do文件放在仿真工程目录下,即和Modelsim仿真工程xxx.mpf在同一个文件夹。sim是我定义的do文件名,用户可自行定义。


#退出当前仿真

quit -sim

vlib work

#编译修改后的文件,我这里把设计文件和仿真文件分开放了,所以写两个。

vlog "../Src/*.v"

vlog "../Sim/*.v"

#开始仿真
vsim -voptargs=+acc work.tb_Cordic_Cos_Sin

#添加指定信号#添加顶层所有的信号
# Set the window types
# 打开波形窗口

view wave
view structure

# 打开信号窗口

view signals

# 添加波形模板

add wave -divider {tb_Cordic_Cos_Sin}
add wave tb_Cordic_Cos_Sin/*add wave -divider {tb_Cordic_Cos_Sin}
add wave tb_Cordic_Cos_Sin/uut/*.main clear

#运行xxms

run 100us

    

   另外说明三个重要指令,因为很多DS编写verilog 跟写c语言一样。

  (1) +incdir+:
   如:vlog +incdir+YOUR_SOURCE_PATH  foo.v
    +incdir+YOUR_SOURCE_PATH 选项是指在verilog文件中出现`include "xxx.v" 时,包含文件的搜索路径。
   缺省是搜索当前路径,然后是YOUR_SOURCE_PATH 指定的路径。
 
  (2) +define+:
 +define+<macro_name>[=<macro_text>]
  允许用户在命令行中定义宏定义,等效于编译器指令:
`define <macro_name> <macro_text>


  用户可以指定多个宏定义,如下:


vlog +define+one=r1 +two=r2 +three=r3 test.v


  命令行的宏定义会覆盖在源文件中用`define定义的相同名字的宏定义


如:vsim -c -l vsim.log -do ./YourDo.do -L ./work work.foo


 (3) 通配符概念。如果一个工程需要很多文件,你每个文件都加上你是不是很痛苦。所以这个时候需要做通配文件。+libext+.v 代表所有的.v文件。


vlog -y ../../../models/ecp5um +libext+.v \

 -y ../../../models/mem +libext+.v


下面就是脚本,保存do文件就可以。在modelsim 敲入do *.do就可以运行。

quit -sim
if {[file exists work]} {
   file delete -force work
}
vlib work

#==== compile
vlog -novopt +define+inst1_NO_DEBUG+inst1_SIM+SIM+NO_DEBUG \
-y ../../../models/ecp5um +libext+.v \
-y ../../../models/mem +libext+.v \
-y D:/program/latticediamond/diamond/3.10_x64/cae_library/simulation/verilog/ecp5u +libext+.v \
-y D:/program/latticediamond/diamond/3.10_x64/cae_library/simulation/verilog/pmi +libext+.v \
+incdir+../../../testbench/tests/ecp5um \
+incdir+../../src/params \
+incdir+../../../models/mem \
../../src/params/ddr3_sdram_mem_params_inst1.v \
../../../../inst1_beh.v \
../../../models/ecp5um/ddr_clks_src.v \
../../src/rtl/top/ecp5um/ddr3_sdram_mem_top_wrapper_inst1.v \
../../../testbench/top/ecp5um/odt_watchdog.v \
../../../testbench/top/ecp5um/monitor.v \
../../../../../../src/ddr3_wrrd.v \
../../../../../../src/sim_ddr3_wrrd.v \
../../../../../../ddr3_ip_inst/fifox64/fifox64.v

 
#==== run the simulation
vsim -novopt -t 1ps work.sim_ddr3_wrrd -l inst1_eval.log\


add wave -position insertpoint sim:/sim_ddr3_wrrd/*
add wave -position insertpoint sim:/sim_ddr3_wrrd/ddr3_wrrd_inst/*