set_include_path()与get_include_path()

本文介绍了如何在PHP中设置包含路径以加载类库,并通过具体示例展示了如何使用set_include_path()函数来添加自定义目录,从而实现对Zend Framework等第三方库的有效管理。

当我们使用require()、require_once()、__autoload()和

spl_autoload_register() 等语句装载外部文件时,可以使用当前

目录引用已经设置在set_include_path()目录下的文件。

string set_include_path ( string $new_include_path )
$new_include_path是以“;”分隔的引用文件目录列表。
 
get_include_path()
查看当前系统引用文件的目录列表。 

例如,我要设置zend framework的引用目录并且调用Zend_Acl()类


//DIRECTORY_SEPARATOR当前系统的目录分隔符
if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
}
//定义站点根目录
if (!defined('WEB_DIR')) {
    define('WEB_DIR', dirname(__FILE__) . DS);
}
//定义引入类库目录
if (!defined('LIBRARY_DIR')) {
    define('LIBRARY_DIR', str_replace("ftest1", "library",

WEB_DIR));
}
//设置引用目录
set_include_path(get_include_path

().PATH_SEPARATOR.LIBRARY_DIR);
//使用当前目录引用文件
require_once 'Zend/Acl.php';
//创建引用文件的分类
$acl = new Zend_Acl();

<think>我们正在处理一个关于Synopsys Design Compiler (DC) 中Tcl命令的问题。用户指出`set_false_path`命令不支持在Verilog文件中内嵌使用。我们需要解释为什么以及在什么情况下使用内嵌约束,以及替代方案。 ### 关键点: 1. **`set_false_path`命令的作用**:在静态时序分析中,用于指定不需要检查时序的路径(例如,跨时钟域路径)。 2. **Verilog内嵌约束的局限性**:某些DC命令(如`set_false_path`)不能在Verilog文件中通过`// synopsys dc_script_begin ... // synopsys dc_script_end`嵌入使用。 3. **原因**:这些命令属于SDC(Synopsys Design Constraints)格式,通常写在单独的约束文件中(.sdc或.tcl),而不是内嵌在Verilog中。 ### 详细解释: - **内嵌约束支持的命令**:DC支持在Verilog文件中内嵌一些简单的编译指令(如`full_case`和`parallel_case`),但复杂的时序约束(如`set_false_path`)必须在单独的约束文件中指定。 - **为什么`set_false_path`不能内嵌**:该命令需要设计已经加载到DC的内存中,并且当前设计已经设置好。内嵌在Verilog中的约束在读取Verilog文件时就会被解析,此时设计可能尚未完全加载,导致命令执行失败。 ### 替代方案: 1. **单独的约束文件**:将`set_false_path`命令写入一个.tcl或.sdc文件,然后在综合时通过DC的`source`命令读取。 ```tcl # constraints.tcl current_design top_module set_false_path -from [get_clocks clk1] -to [get_clocks clk2] ``` 综合脚本中: ```tcl read_verilog design.v source constraints.tcl compile ``` 2. **使用`dc_shell`脚本**:在综合脚本中直接包含约束命令。 3. **内嵌约束的适用场景**:仅适用于编译指令(如`translate_off`/`translate_on`)和简单的属性(如`full_case`)。 ### 示例: 假设有一个跨时钟域路径,我们希望设置false path: - **错误的内嵌方式(不支持)**: ```verilog module top(input clk1, clk2, ...); // synopsys dc_script_begin // set_false_path -from [get_clocks clk1] -to [get_clocks clk2] // 不支持,会报错 // synopsys dc_script_end endmodule ``` - **正确做法**:在单独的约束文件中指定。 ### 注意事项: - DC在读取Verilog文件时,内嵌的dc_script区块会被提取并执行,但此时设计可能还没有完全链接(link),因此像`get_clocks`这样的命令可能无法获取到时钟对象。 - 内嵌约束通常用于具体实例相关的编译指令,而不是全局的时序约束。 ### 结论: `set_false_path`不能在Verilog文件中内嵌使用,因为它需要设计已经加载并链接,且通常需要引用设计中的对象(如时钟、端口等)。正确的做法是在单独的约束文件中使用该命令,并在综合过程中在合适的时机(如链接设计后)加载该约束文件。 §§相关问题§§ 1. 除了`set_false_path`,还有哪些常用的时序约束命令不能内嵌在Verilog文件中? 2. 在DC综合流程中,应该在哪个阶段加载包含`set_false_path`的约束文件? 3. 如何验证`set_false_path`约束在综合后是否生效? 4. 对于跨时钟域路径,除了使用`set_false_path`,还有哪些时序约束方法? 5. 如果尝试在内嵌脚本中使用`set_false_path`,DC会报什么错误信息?</think>### `set_false_path`不支持Verilog内嵌的原因解决方案 #### 1. **根本原因分析** - **命令性质**:`set_false_path`是**SDC(Synopsys Design Constraints)命令**而非Verilog语法 - **作用阶段**:仅在综合/时序分析阶段生效(DC/PT工具) - **语法冲突**:Verilog解析器无法识别SDC命令语法 - **工具限制**:Synopsys官方明确禁止在`dc_script`区块内使用时序约束命令 #### 2. **错误用法示例** ```verilog module cross_clock_domain( input clkA, input clkB, input data_in, output reg data_out ); // synopsys dc_script_begin // set_false_path -from [get_clocks clkA] -to [get_clocks clkB] // 非法!将导致DC报错 // synopsys dc_script_end always @(posedge clkB) begin data_out <= data_in; // 跨时钟域传输 end endmodule ``` **报错信息**: `Error: SDC commands are not allowed in dc_script blocks (SEL-005)` #### 3. **正确实现方案** ##### 方案1:单独SDC约束文件 ```tcl # constraints.sdc current_design cross_clock_domain create_clock -name clkA -period 10 [get_ports clkA] create_clock -name clkB -period 15 [get_ports clkB] set_false_path -from [get_clocks clkA] -to [get_clocks clkB] # 合法路径约束 ``` 综合脚本调用: ```tcl read_verilog cross_clock_domain.v source constraints.sdc ``` ##### 方案2:Tcl综合脚本控制 ```tcl # run.tcl analyze -format verilog cross_clock_domain.v elaborate cross_clock_domain create_clock -name clkA -period 10 [get_ports clkA] create_clock -name clkB -period 15 [get_ports clkB] set_false_path -from [get_clocks clkA] -to [get_clocks clkB] # 正确位置 compile ``` #### 4. **替代内嵌方案** 仅支持**编译指示指令**(非时序约束): ```verilog // synopsys dc_script_begin // set_flatten true -design cross_clock_domain // 允许的DC命令 // set_structure -boolean true // synopsys dc_script_end ``` #### 5. **跨工具兼容性** | 工具 | 内嵌支持类型 | 禁用命令示例 | |---------------|---------------------------|-----------------------------| | Design Compiler| 编译优化指令 | `set_false_path`, `set_input_delay` | | PrimeTime | 无内嵌支持 | 所有SDC命令 | | VCS | 仿真控制指令 | `$sdc_command` | #### 6. **调试技巧** 1. 检查约束位置: ```tcl report_sdc_placement -file sdc_check.rpt ``` 2. 约束有效性验证: ```tcl check_timing -include {false_paths} ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值