前面的题目要求,设计思路,功能仿真,可以看上一篇
目录
本来说是要做CRC的老师突然说用fpga课设的也可以(苦瓜脸,CRC的都做好了)
@
目录
一、电路综合
1、使用综合工具DC,给出DC综合脚本(脚本要有必要的注释)
####################################################
#
#Name:qiangdaqi_top_1.tcl
#Description: the synthesis tcl script for prbs code
#Date:2020-06
#Author: djy
#Version:v1.1
#Modified: 1-2008-01-24-modified the path since changing the workstation
#
##############################################################################
set_svf ../mapped/qiangdaqi_top_1.svf
#形式化验证配置文件文件初始位置
set map_path ../mapped
#设置生成文件的相对路径
set report_path ../report
#设置生成报告的相对路径
############################################################################
#begin time
date
#起始时间
###########################################################################
#read source verilog code
read_verilog jf_zz.v
read_verilog ym_zz.v
read_verilog qd_zz.v
read_verilog fmq_zz.v
read_verilog dtsm_zz.v
read_verilog qiangdaqi_top_1.v
#自底向上的读入设计代码
#############################################################################
#set & link top design ,remove relative constraints
current_design qiangdaqi_top_1
#设置顶层文件(顶层的模块名)
link
#定位设计调用的子模块,链接到当前设计
reset_design
#剔除之前的所有约束,防止影响下面的约束
###############################################################################
#set clocks
create_clock -period 5 -name clk [get_ports clk]
#clk端口设置为时钟周期5ns
set_clock_latency -source 0.4 [get_clocks clk]
#外部时钟延迟0.4ns
set_clock_latency 0.2 [get_clocks clk]
#时钟内部延迟0.2ns
set_clock_uncertainty -setup 0.4 [get_clocks clk]
#时钟不稳定性0.4ns
set_clock_transition 0.1 [get_clocks clk]
#时钟翻转时间0.1ns
set_dont_touch_network [list clk ]
#不要更改或替换该时钟网络
#set_dont_touch_network [all_clocks]
##################################################################################
#advanced constraints
#foreach_in_collection clk1 [all_clocks] {
# foreach_in_collection clk2 [remove_from_collection [all_clocks] [get_clocks $clk1]] {
# set_false_path -from [get_clocks $clk1] -to [get_clocks $clk2]
# }
#}
#######################################################################################
#set input delays & output delays
set i_min_delay 0.4
#定义元素i_min_delay为0.4ns
set i_max_delay 1.2
#定义元素i_max_delay为1.2ns
set o_delay 0.4
#定义元素o_delay为0.4ns
set ain_ports [remove_from_collection [all_inputs] [all_clocks] ]
#定义列表 包含除了clk的所有输入
set_input_delay -min $i_min_delay -clock [get_clocks clk] $ain_ports
#设置上述列表相对于时钟信号的最小输入延迟0.4ns
set_input_delay -max $i_max_delay -clock [get_clocks clk] $ain_ports
#设置上述列表相对于时钟信号的最大输入延迟1.2ns
set_output_delay -max $o_delay -clock [get_clocks clk] [all_outputs]
#设置输出端口相对于时钟信号的最大输出延迟0.4ns
###########################################################################################
#clk,reset,etc.driven capablity should be strongest
set_drive 0 [get_ports clk]
#前端设置时钟和复位驱动为0,不让DC加缓冲方便后端设计
set_driving_cell -lib_cell BUFHD1X -library smic18_tt -pin Z [remove_from_collection $ain_ports [get_ports rst]]
#除开复位和时钟端口为其加上BUFHD1X器件的输出驱动
set_load [expr [load_of smic18_tt/BUFHD1X/A]*8] [all_outputs]
#给所有输出设置8倍的BUFHD1X的负载
set_fanout_load 8 [all_outputs]
#所有输出后的下级扇入理论值为8,即输出的最大负载为8+8*buf
##############################################################################################
#ensure the postive slack,the smallest area
set_max_area 0
#让DC综合面积越小越好
#################
#report_lib
set_operating_conditions typical
#设置典型工作环境
################################################################################################
#wire_load_models
set auto_wire_load_selection true
#自动选择线负载模型
#set_wire_load_model -name CSM25_Conservative
set_wire_load_mode enclosed
#线负载模式: 子模块内以及连接子模块之间的连线负载模型使用上一层模块的线负载模型
########################################################################################
#area optimization
#set compile_sequential_area_recovery true
#set compile_new_boolean_structure true
#set_structure -boolean true -boolean_effort high
##########################################################################################
#flatten the whole design for area reducing
current_design qiangdaqi_top_1
#设置当前设计为top
ungroup -flatten -all
#解散全部设计
uniquify
#就是将相同的模块每一个唯一化,这样在时钟树综合的时候达到最好的优化
##########################################################################################
#compile
compile
#映射——优化
#write -format verilog -hierarchy -output $map_path/prbs_top_1st.sv
#report_qor > $map_path/prbs_top_1st.qor
#compile -map_effort high -boundary_optimization -incr
#############################################################################################
#reports
check_design > $report_path/check_design.rpt
#检查设计
check_timing > $report_path/check_timing.rpt
#检查时序
report_timing -delay max -max_paths 10 -nets -tran -nosplit -input_pins > $report_path/timing_setup.rpt
#报告在建立时间约束下的最差的10条路径
report_timing -delay min -max_paths 10 -nets -tran -nosplit -input_pins > $report_path/timing_hold.rpt
#报告在保持时间约束下的最差的10条路径
report_clock > $report_path/clock.rpt
#报告时钟信息
#report_wire_load > $report_path/wlm.rpt
#report_constraint -all_violators > $report_path/con_violators.rpt
report_area > $report_path/area.rpt
report_power > $report_path/power.rpt
#报告面积和功耗
#report_net_fanout -nosplit -threshold 48 > $report_path/top_net_fanout.rpt
#################################################################################################
#write the database
change_names -rule verilog -h
#去除特殊字符如“[”“]”
write -format verilog -output $map_path/qiangdaqi_top_1.sv
#保存网表文件
#write -format ddc -hierarchy -output $map_path/qiangdaqi_top_1.ddc
write_sdf $map_path/qiangdaqi_top_1.sdf
#保存时序反标文件
write_sdc -v 1.4 $map_path/qiangdaqi_top_1.sdc
#保存约束文件
###################################################################################################
#end time
date
#结束信号
set_svf off
#fm配置文件结束
2、给出综合报告(要有必要的分析说明)
未完待续