当前位置: 代码迷 >> 综合 >> DC 视频教程 第九课
  详细解决方案

DC 视频教程 第九课

热度:7   发布时间:2023-12-18 22:45:21.0

第九课

介绍一些特殊情况下会用到的功能和命令,如:占空比非50%的时钟,多个外部输入驱动/输出负载等等。

Define a clock

create_clock -period 2 -name my_clk [get_ports CLK]
set_input_delay -max 0.6 -clock my_clk [get_ports A] 

create_clock命令时,已经给带有clock属性的时钟起名叫做my_clk,因此在设置输入延时时也需要注意,延时是相对于什么名字的时钟而言。

  • duty_cycle
create_clock -period 2 -wave_form {0 0.6} [get_ports CLK]

-wave_form选项可以指定上升沿和下降沿的相对时间,从而设定时钟的初始偏移量和占空比。
但是利用-wave_form选项设定偏移量的做法并不推荐
更好的方式是用set_clock_latency

  • complex
    可以指定复杂信号/时钟 在这里插入图片描述
    ** Tmax = 0.6(最短的周期)- clk-q的延迟 - FF2setup
    加-clock_fall选项可以设置成相对于下降沿的延迟
    设置时钟的原则:1.完整 2.准确

Input/Output delay

  • Multiple input paths
    有多个输入路径时,即mux输入时可以用以下命令:
    在这里插入图片描述
    -add_delay选项可以告诉DC此端口有两种约束,否则后面一个约束会覆盖前面一个约束。
    DC会采取保守的策略,用较差的条件进行综合。

如果用set_driving_cell命令设置驱动作为输入,那么在原来设置的input delay的基础上,会额外增加由驱动单元带来的延迟。
因此set_input_delay的值必须是零负载下的延迟

  • Multiple output paths
    -clock_fall和-add_delay选项的用法与input时相同。

**由于TCL语言的特性,选项的顺序不会影响命令的执行。
在这里插入图片描述

TCL语言

set NAME  zhangsan
set var 0   #前面是变量名,后面是变量值# if语句
if {$var} {echo "Good!"} else {echo "..."}# if语句在DC中的应用
if {[link] == 0} {
...}    # []方括号可以起到嵌套命令的作用# switch结构,相当于case语句
switch -regexp -exact $NAME{   # -regexp表示用正则表达式 -exac表示精准匹配"zhangsan" {...}"lisi" {...}default {...}
} # while循环
while {$i < 10}  {...incr i 1   #相当于 i++
}# for循环
for {set idx 0} {$idx < 10} {incr idx } {if {$ix ==8} {continue; }     #continue和break的用法与C语言相通echo "...";
}# 数组与foreach结构
set NAMES [list "zhangsan" "lisi""wangwu""zhaoliu"]
foreach NAME $NAMES {
...}   #每次都会把$NAMES中的变量赋给NAME,并执行括号中的语句#保存程序运行结果至文件
set    SRC             "Good night!"
set    file_wr_id     [open data.txt w+]   #表明在当前文件夹下打开data.txt文件,w表示写,+表示若没有则创建一个新文件
puts   $file_wr_id   $SRC  #表示将字符$SRC存入文件中
flush  $file_wr_id   #刷新命令
close $file_wr_id   #关闭文件的命令,**一定要与打开文件的命令成对使用**#从文件中读取数据
set    DST             ""
set    file_rd_id     [open data.txt r]   #r表示读取
gets   $file_rd_id   $DST  #表示将字符$SRC存入文件中
echo "Data from file is {$DST}"
close $file_rd_id    #不能忘记关闭文件#子程序
proc max {a b} {  #proc为子程序关键字,max是程序名,a,b是程序变量if {$a > $b } {set y $a;} else {set y $b;}return $y;
} 
  相关解决方案