精华内容
下载资源
问答
  • 学习oracle约束

    千次阅读 2012-08-18 22:21:12
    管理数据完整性 一 学习目标 ... 1.实现数据完整性约束 ... 2.管理完整性约束 ... 3.从数据字典中获取约束信息 ...三 约束的类型 (见图)    1.not null (不能为空)  2.unique (值必须唯一)

    管理数据完整性


    一 学习目标


      1.实现数据完整性约束
      2.管理完整性约束
      3.从数据字典中获取约束信息

    二 保证数据完整性的方法


      1.应用程序代码控制
      2.触发器控制
      3.声明完整性约束

    三 约束的类型 (见图)

     

      1.not null    (不能为空)
      2.unique      (值必须唯一)
      3.primary key (not null + unique)
      4.foreign key (该表值必须在外键表中存在)
      5.check       (自己加的条件)
      6.ref         (不熟)

      注:Constraints不但可以建立在Table上,也可以建立在View上。 


    四 约束状态


      1.disable novalidate  既不会约束新增数据也不会验证已有数据,等同于disable
      2.disable validate   约束新增数据但不会验证已有数据,启用后禁止DML
      3.enable novalidate  约束新增数据但不会验证已有数据
      4.enable validate    约束新增数据并验证已有数据,等同于enable

      下面举例说明:

      

    SQL> create table dept2 as select * from scott.dept;
     
    Table created
     
    SQL> select * from dept2 order by deptno;
     
    DEPTNO DNAME          LOC
    ------ -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
     
    SQL> alter table dept2 add constraint dept2_u1 unique(deptno);
     
    Table altered
     
    SQL> select index_name,table_name,uniqueness from dba_indexes where index_name = 'DEPT2_U1';
     
    INDEX_NAME                     TABLE_NAME                     UNIQUENESS
    ------------------------------ ------------------------------ ----------
    DEPT2_U1                       DEPT2                          UNIQUE
     
    SQL> select constraint_name,status,validated from dba_constraints where constraint_name = 'DEPT2_U1';
     
    CONSTRAINT_NAME                STATUS   VALIDATED
    ------------------------------ -------- -------------
    DEPT2_U1                       ENABLED  VALIDATED
     
    SQL> insert into dept2(deptno) values(10);
     
    insert into dept2(deptno) values(10)
     
    ORA-00001: unique constraint (SYSTEM.DEPT2_U1) violated
     
    SQL> select * from dept2 order by deptno;
     
    DEPTNO DNAME          LOC
    ------ -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
     
    SQL> alter table dept2 modify constraint dept2_u1 disable novalidate;
     
    Table altered
     
    SQL> select index_name,table_name,uniqueness from dba_indexes where index_name = 'DEPT2_U1';
     
    INDEX_NAME                     TABLE_NAME                     UNIQUENESS
    
    ------------------------------ ------------------------------ ----------
    
    (disable自动移除索引)
    
     
    SQL> select constraint_name,status,validated from dba_constraints where constraint_name = 'DEPT2_U1';
     
    CONSTRAINT_NAME                STATUS   VALIDATED
    ------------------------------ -------- -------------
    DEPT2_U1                       DISABLED NOT VALIDATED
     
    SQL> insert into dept2(deptno) values(10);
     
    1 row inserted
     
    SQL> select * from dept2 order by deptno;
     
    DEPTNO DNAME          LOC
    ------ -------------- -------------
        10 ACCOUNTING     NEW YORK
        10                
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
     
    SQL> alter table dept2 modify constraint dept2_u1 enable novalidate;
     
    alter table dept2 modify constraint dept2_u1 enable novalidate
     
    ORA-02299: cannot validate (SYSTEM.DEPT2_U1) - duplicate keys found
     (因为enable会去创建唯一性索引,而已有数据deptno存在重复数据10,所以这里不能enable)
    
    SQL> delete from dept2 where deptno=10 and dname is null;
     
    1 row deleted
     
    SQL> alter table dept2 modify constraint dept2_u1 enable novalidate;
     
    Table altered
     
    SQL> select index_name,table_name,uniqueness from dba_indexes where index_name = 'DEPT2_U1';
     
    INDEX_NAME                     TABLE_NAME                     UNIQUENESS
    ------------------------------ ------------------------------ ----------
    
    DEPT2_U1                       DEPT2                          UNIQUE
    
    (enable会自动创建唯一性索引)
    
    
    SQL> select constraint_name,status,validated from dba_constraints where constraint_name = 'DEPT2_U1';
     
    CONSTRAINT_NAME                STATUS   VALIDATED
    ------------------------------ -------- -------------
    DEPT2_U1                       ENABLED  NOT VALIDATED
     
    SQL> insert into dept2(deptno) values(10);
     
    insert into dept2(deptno) values(10)
     
    ORA-00001: unique constraint (SYSTEM.DEPT2_U1) violated
     
    SQL> alter table dept2 modify constraint dept2_u1 disable validate;
     
    Table altered
     
    SQL> select index_name,table_name,uniqueness from dba_indexes where index_name = 'DEPT2_U1';
     
    INDEX_NAME                     TABLE_NAME                     UNIQUENESS
    ------------------------------ ------------------------------ ----------
     
    SQL> select constraint_name,status,validated from dba_constraints where constraint_name = 'DEPT2_U1';
     
    CONSTRAINT_NAME                STATUS   VALIDATED
    ------------------------------ -------- -------------
    DEPT2_U1                       DISABLED VALIDATED
     
    SQL> insert into dept2(deptno) values(10);
     
    insert into dept2(deptno) values(10)
     
    
    ORA-25128: No insert/update/delete on table with constraint (SYSTEM.DEPT2_U1) disabled and validated
    
    (disable validate后禁止DML)
    
    
    SQL> select * from dept2 order by deptno;
     
    DEPTNO DNAME          LOC
    ------ -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON
     
    SQL> alter table dept2 modify constraint dept2_u1 enable validate;
     
    Table altered
     
    SQL> select index_name,table_name,uniqueness from dba_indexes where index_name = 'DEPT2_U1';
     
    INDEX_NAME                     TABLE_NAME                     UNIQUENESS
    ------------------------------ ------------------------------ ----------
    DEPT2_U1                       DEPT2                          UNIQUE
     
    SQL> select constraint_name,status,validated from dba_constraints where constraint_name = 'DEPT2_U1';
     
    CONSTRAINT_NAME                STATUS   VALIDATED
    ------------------------------ -------- -------------
    DEPT2_U1                       ENABLED  VALIDATED
     
    SQL> insert into dept2(deptno) values(10);
     
    insert into dept2(deptno) values(10)
     
    ORA-00001: unique constraint (SYSTEM.DEPT2_U1) violated
     
    SQL> select * from dept2 order by deptno;
     
    DEPTNO DNAME          LOC
    ------ -------------- -------------
        10 ACCOUNTING     NEW YORK
        20 RESEARCH       DALLAS
        30 SALES          CHICAGO
        40 OPERATIONS     BOSTON

     

    五 推迟约束
     
     当前事务的Constraint Checks全部推迟

     SET CONSTRAINTS ALL DEFERRED;
     SET CONSTRAINT XXX DEFERRED;

     当前会话的Constraint Checks.

     ALTER SSSSION SET CONSTRAINTS ALL deferred;
     ALTER SSSSION SET CONSTRAINT xxx deferred;

      2.session级别修改约束检查项:
        ALTER SESSION
        SET CONSTRAINT[S] =
        {IMMEDIATE|DEFERRED|DEFAULT}

            SET CONSTRAINT | CONSTRAINTS
        {constraint |ALL }
        {IMMEDIATE|DEFERRED}

    六  创建约束


    1.建表时定义约束:
    例:sql
    约束类型 [CONSTRAINT constraint]
                {[NOT] NULL
                |UNIQUE      [USING INDEX index_clause]
                |PRIMARY KEY [USING INDEX index_clause]
                |REFERENCES  [schema.]table [(column)]
                         [ON DELETE CASCADE]
                |CHECK       (condition)
                }
                约束状态 :==
                [NOT DEFERRABLE|DEFERRABLE [INITIALLY             {IMMEDIATE|DEFERRED}]
                ]
                [DISABLE|ENABLE [VALIDATE|NOVALIDATE]]
    2.建表后增加约束:

    七  使用EXCEPTIONS  TABLE


    1. 如果异常未创建, 运行脚本 utlexcpt.sql:
       
    SQL> @ e:\oracle\rdbms\admin\utlexcpt.sql
    
    表已创建。
    
    SQL> desc exceptions
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ROW_ID                                             ROWID
     OWNER                                              VARCHAR2(30)
     TABLE_NAME                                         VARCHAR2(30)
     CONSTRAINT                                         VARCHAR2(30)
    


    2. 使用异常表

     

    SQL> alter table dept2 modify constraint dept2_u1 disable novalidate;
    
    表已更改。
    
    SQL> insert into dept2 (deptno) values(10);
    
    已创建 1 行。
    
    SQL> alter table dept2
      2  enable validate constraint dept2_u1
      3  exceptions into exceptions;
    alter table dept2
    *
    第 1 行出现错误:
    ORA-02299: 无法验证 (SCOTT.DEPT2_U1) - 找到重复关键字
    

    3. 使用子查询查找异常表记录的非法记录:
     
    SQL> select rowid,dept2.* from dept2
      2  where rowid in (select row_id from exceptions) for update;
    
    ROWID                  DEPTNO DNAME          LOC
    ------------------ ---------- -------------- -------------
    AAAMlpAAEAAAAHkAAA         10 ACCOUNTING     NEW YORK
    AAAMlpAAEAAAAHlAAB         10
    
    SQL> update dept2
      2  set deptno = 50
      3  where rowid='AAAMlpAAEAAAAHlAAB';
    
    已更新 1 行。
    
    SQL> commit;
    
    提交完成。

    4. How to Identify Row Violation (continued)
     
    5.  Truncate the EXCEPTIONS table and reenable the constraint:
    SQL> TRUNCATE TABLE exceptions;
    Statement processed.
    SQL> ALTER TABLE hr.employees
      2  ENABLE VALIDATE CONSTRAINT employee_dept_id_fk
      3  EXCEPTIONS INTO system.exceptions;
    Statement processed.

    八   从数据字典获取约束信息

    DBA_CONSTRAINTS
    DBA_CONS_COLUMNS

    SQL> SELECT constraint_name, constraint_type, deferrable,
      2         deferred, validated
      3  FROM   dba_constraints
      4  WHERE  owner='HR'
      5  AND    table_name='EMPLOYEE';
    CONSTRAINT_NAME   C     DEFERRABLE       DEFERRED    VALIDATED
    ----------------  -     ---------------  -----------    ----------
    EMPLOYEE_DEPT..   R     DEFERRABLE       DEFERRED    VALIDATED
    EMPLOYEE_ID_PK    P     DEFERRABLE       IMMEDIATE    VALIDATED
    SYS_C00565        C     NOT DEFERRABLE   IMMEDIATE    VALIDATED
    3 rows selected.



    要在HR下找到EMPLOYEE的外键以及关联的主键, 使用以下查询:

    SQL> SELECT c.constraint_name AS "Foreign Key",
      2         p.constraint_name AS "Referenced Key",
      3         p.constraint_type,
      4         p.owner,
      5         p.table_name
      6  FROM   dba_constraints c, dba_constraints p
      7  WHERE  c.owner='HR'
      8  AND    c.table_name='EMPLOYEE'
      9  AND    c.constraint_type='R'
      10 AND    c.r_owner=p.owner
      11 AND    c.r_constraint_name = p.constraint_name;
    Foreign Key       Referenced Key  C  OWNER       TABLE_NAME    
    ------------      --------------  -  ----------  ----------
    EMPLOYEES_DEPT..   DEPT_PK        P  HR          DEPARTMENT
    1 row selected.




    ------------------------------------

    made by dylan.


    展开全文
  • mysql数据完整性和约束

    千次阅读 2015-02-02 17:37:58
    2.域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则). 3.引用完整性:在删除输入记录时,引用完整性保持表之间已定义的关系.引用完整性确保...

    数据的完整性是指数据的可靠性和准确性.它分四类:

    1.实体完整性:实体的完整性强制表的标识符列或主键的完整性(通过索引,唯一约束,主键约束或标识列属性).

    2.域完整性:限制类型(数据类型),格式(通过检查约束和规则),可能值范围(通过外键约束,检查约束,默认值定义,非空约束和规则).

    3.引用完整性:在删除和输入记录时,引用完整性保持表之间已定义的关系.引用完整性确保键值在所有表中一致.这样的一致辞性要求不能引用不存在的值.如果一个键值更改了,那么在整个数据库中,对该键值的引用要进行一致的更改.

    4.自定义完整性:用户自己定义的业务规则.

    约束和数据完整性

    主键(Primary key

    外键(Foreign key

    唯一(unique

    检查(check:MySQL不支持。

    默认(default

    1、约束

    create table s(sno char(2) not null  primary key,

                   sname char(10)  null,   

                   sex char(2)  null default ''

                   check(sex='' or sex='')  ,                

                   birthday datetime  null,

                   id char(18) null unique);

     

    create table c (cno char(2) not null  primary key,

                    cname char(10)  null);

     

     

    create table sc(sno char(2)  not null references s(sno),(mysql不支持这样写)     

                    cno char(2)  not null references c(cno),   

                    score decimal(5,1) null check(score>=0 and score<=100),

                    primary key(sno,cno) );

    2、另一种约束

    create table s(sno char(2) not null ,

                   sname char(10)  null,   

                   sex char(2)  null default '',

                   birthday datetime  null,

                   id char(18) null , primary key(sno)unique(id),

                  check(sex='' or sex='')

                );

    create table c (cno char(2) not null  ,

                    cname char(10)  null, primary key(cno));

    create table sc(sno char(2)  not null ,     

                    cno char(2)  not null ,   

                    score decimal(5,1) null ,      primary key(sno,cno),

    foreign key(sno) references s(sno) on delete cascade on update cascade,

    foreign key(cno) references c(cno),

    check(score>=0 and score<=100)

                   );

    3、第三种约束

     

    create table s(sno char(2) not null ,

                   sname char(10)  null,   

                   sex char(2)  null default '' ,

                   birthday datetime  null,

                   id char(18) null

                );

     

    create table c (cno char(2) not null  ,

                    cname char(10)  null

                                );

     

    create table sc(sno char(2)  not null ,     

                    cno char(2)  not null ,   

                    score decimal(5,1) null             

                   );

    alter table s

    add constraint pk_sno primary key(sno),

    add constraint uq_id unique(id),

    add constraint ck_sex check(sex=‘男’ or sex=‘女’);

     

    alter table c

    add constraint pk_cno primary key(cno);

     

    alter table sc

    add constraint pk_sc primary key(sno,cno),

    add constraint ck_score check(score>=0 and score<=100),

    add constraint fk_sno foreign key(sno) references s(sno),

    add constraint fk_cno foreign key(cno) references c(cno);

    展开全文
  • 类型参数约束

    千次阅读 2015-10-09 20:39:50
    类型参数约束机制作用除了体现在JavaSE Tutorial 介绍的控制实例化过程外,还有如下主要事项: 当类成员使用相同类型参数时,该类型参数的约束也同样使用于成员。 设计每一个类型参数约束时,要反复思考,以满足...

    JAVA中泛型常常被使用,一般用寄存数据什么的,这里我就不再一一介绍了。

    这里介绍泛型的另一个很重要的用途是它的类型参数约束机制。类型参数约束机制作用除了体现在JavaSE Tutorial 介绍的控制实例化过程外,还有如下主要事项

    微笑当类成员使用相同类型参数时,该类型参数的约束也同样使用于成员。

    微笑设计每一个类型参数约束时,要反复思考,以满足客户的需求。

    微笑对于集合类型,尽可能不要在生成代码中出现无约束的类型参数。

    这里举一个类型参数约束的例子:

    定义一个简单的接口:

    <span style="font-size:12px;">package Test;
    
    public interface MyInterface {
    	public void say();
    }</span>
    

    实现这一接口的Dog类:

    package Test;
    
    public class Dog implements MyInterface {
    
    	@Override
    	public void say() {
    		System.out.println("Dog dog...");
    	}
    }

    测试代码:

    <span style="font-size:12px;">package Test;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Test <k,v extends MyInterface>{//约束条件为extends  MyInterface
    	private Map<k,v> map = new HashMap<>();
    	public Test<k,v> mapPut(k a,v b){
    		map.put(a, b);
    		map.get(a).say();
    		return this;
    	}
    	public static void main(String[] args) {
    		//由于约束条件使v 只能是实现了MyInterface接口的:
    		//Test<String,String> tt = new Test<String,String>();//出错
    		Test<String,Dog> t = new Test<String,Dog>();//进行了约束。
    		
    		Dog b = new Dog();
    		b.say();
    		t.mapPut("Dog", b);
    	}
    }</span>
    

    结果为:

    Dog dog...
    Dog dog...

    好了,自己感受下吧。

    展开全文
  • 时序约束

    千次阅读 2018-08-03 11:23:44
    一、在给FPGA做逻辑综合布局布线时,需要在工具中设定时序的约束。通常,在FPGA设计工具中都FPGA中包含有4种路径:从输入端口到寄存器,从寄存器到寄存器,从寄存器到输出,从输入到输出的纯组合逻辑。通常,需要...
    一、在给FPGA做逻辑综合和布局布线时,需要在工具中设定时序的约束。通常,在FPGA设计工具中都FPGA中包含有4种路径:从输入端口到寄存器,从寄存器到寄存器,从寄存器到输出,从输入到输出的纯组合逻辑。通常,需要对这几种路径分别进行约束,以便使设计工具能够得到最优化的结果。下面对这几种路径分别进行讨论。 
    1.从输入端口到寄存器:
        这种路径的约束是为了让FPGA设计工具能够尽可能的优化从输入端口到第一级寄存器之间的路径延迟,使其能够保证系统时钟可靠的采到从外部芯片到FPGA的信号。约束名称:input delay.   约束条件的影响主要有4个因素:外部芯片的Tco,电路板上信号延迟Tpd,FPGA的Tsu, 时钟延迟Tclk.  Tco的参数通常需要查外部芯片的数据手册。计算公式:input delay = Tco+Tpd+Tsu-Tclk.    FPGA的Tsu也需要查FPGA芯片的手册。 FPGA速度等级不同,这个参数也不同。 Tpd和Tclk需要根据电路板实际的参数来计算。通常,每10cm的线长可以按照1ns来计算.   例如:系统时钟100MHz,  电路板上最大延迟2ns, 时钟最大延迟 1.7ns, Tco 3ns, FPGA的Tsu(触发器固有的建立时间)为0.2ns. 那么输入延迟的值: max Input delay = 2+3+0.2-1.7=3.5ns.  这个参数的含义是指让FPGA的设计工具把FPGA的输入端口到第一级寄存器之间的路径延迟(包括门延迟和线延迟)控制在 10ns-3.5ns=6.5ns 以内。这个3.5ns在quartus timequest中的约束就是input delay。这个6.5ns在xilinx的约束中就是OFFSET IN。具体写法依约束参考对象不同有两种,NET DATA_IN OFFSET = IN 3.5ns AFTER CLK(这个clk是launch clk);NET DATA_IN OFFSET = IN 6.5ns BEFORE CLK(这个clk明显是latch clk了)。
    后记:关于这个约束,参考http://www.doc88.com/p-112663065567.html(偏移约束详解,王春平)。对于初始时钟沿的问题之前没有注意过,这个学习了,就是说你的offset是相对于初始时钟沿来说的。但是对于fpga来讲,就拿他的例子来说,外部芯片是下降沿出数据,相对于随路时钟的上升沿2ns之前数据准备好了,那么fpga是要控制它的delay在2ns之内还是12ns之内呢,或者说fpga是怎么知道它的采样沿是上升沿还是下降沿呢,代码里反映的吗?
    2.寄存器到寄存器: 
       这种路径的约束是为了让FPGA设计工具能够优化FPGA内寄存器到寄存器之间的路径,使其延迟时间必须小于时钟周期,这样才能确保信号被可靠的传递。由于这种路径只存在于FPGA内部,通常通过设定时钟频率的方式就可以对其进行约束。对于更深入的优化方法,还可以采用对寄存器的输入和寄存器的输出加入适当的约束,来使逻辑综合器和布线器能够对某条路径进行特别的优化。还可以通过设定最大扇出数来迫使工具对其进行逻辑复制,减少扇出数量,提高性能。 
    3.寄存器到输出:
       这种路径的约束是为了让FPGA设计工具能够优化FPGA内部从最后一级寄存器到输出端口的路径,确保其输出的信号能够被下一级芯片正确的采到。约束的名称: output delay,            约束条件的影响主要有3个因素:外部芯片的Tsu,电路板上信号延迟Tpd,时钟延迟Tclk.  Tsu的参数通常需要查外部芯片的数据手册。计算公式:output delay = Tsu+Tpd-Tclk.         例如:系统时钟100MHz,  电路板上最大延迟2ns, 时钟最大延迟 1.7ns, Tsu 1ns, 输出延迟的值: max output delay = 1+2-1.7=1.3ns .  这个参数的含义是指让FPGA的设计工具把最后一级寄存器到输出端口之间的路径延迟(包括门延迟和线延迟)控制在 10ns-1.3ns=8.7ns 以内。
    这个6.5ns在xilinx的约束中就是OFFSET OUT。同样有两种写法,NET DATA_OUT OFFSET = OUT 8.7ns AFTER CLK;NET DATA_OUT OFFSET = OUT 1.3ns BEFORE CLK。
    4.从输入端口到输出端口:
       这种路径是指组合逻辑的延迟,指信号从输入到输出没有经过任何寄存器。给这种路径加约束条件,需要虚拟一个时钟,然后通过约束来指定哪些路径是要受该虚拟时钟的约束。在Synplifypro和Precision中都有相应的约束来处理这种路径。
    二、分析时序
    不断学习,不断更新…
    1.通过creat timing constraints来建立约束,包括offset in、offset out和period,它们属于全局的约束,然后点valid constraints,设计的约束便自动生成在ucf文件里了,前提是之前得有ucf文件。
    2.经过布局布线以后,可以查看static timing,看设计的时序约束是否能满足。还看到说查看综合报告或映射后静态时序报告可以看到你的约束是否现实,这个要继续了解一下。
    3.通过这个analyze timing/floor plan design(plan ahead)可以查看各个约束的路径的实际位置。还可以看到具体到路径它的逻辑延时占多少时间,布线延迟占多少时间,一般来讲符合60/40原则,即逻辑延迟占到60%以下设计就很容易满足要求。
    4.周期约束覆盖同步单元之间的延时路径,如果系统有多个时钟,各自约束之,应该就可以了我理解。然而单纯的只使用全局约束往往会导致过约束,道理很简单,因为有的路径是不需要加上这个约束的(不需要加的加上了属于过约束),像多周期路径、跨时钟域的路径等。你如果加上了,只能让综合工具做一些无谓的努力(侵占了本应该属于其它逻辑的布局布线资源,反而可能造成其它关键路径时序的违规和时序余量变小)。所以这个时候就需要特定路径的时序约束,它的目的并不是给路径多大的优化,而是给你的综合工具更大的灵活性来满足你的时序要求。
    5.关于路径终点的定义:IO PADS、FF、FL、RAM。可以通过creat timing constraints来方便的将路径终点进行分组,从而进行组间的时序约束。全局约束默认是将所有的终点作为一个group。
    6.相关时钟域的约束:为一个时钟进行周期约束,以这个周期约束确定相关的时钟。像DCM有多个时钟输出,只需要确定输入时钟的周期约束,那么执行工具会自动推导出其它输出时钟的约束。
      不相关时钟域的约束:例如有clka和clkb两个时钟域,分别做了周期约束,那么它们之间的延时路径默认是没有覆盖到的,这个时候就可以在两个group之间做特定路径的约束(快速/慢速/例外),由于clka和clkb都分别做了约束,两个group已经被自动分好了,就以时钟为依据就行了。
    7.看到一段话,说的是附加时序约束的基本策略,很好,拿过来。附加时序约束的一般策略是先附加全局约束,然后对快速和慢速例外路径附加专门约束。附加全局约束时,首先定义设计的所有时钟,对各时钟域内的同步元件进行分组,对分组附加周期约束,然后对FPGA/CPLD输入输出PAD附加偏移约束、对全组合逻辑的PAD TO PAD路径附加约束。附加专门约束时,首先约束分组之间的路径,然后约束快、慢速例外路径和多周期路径,以及其他特殊路径。

    8.对自己在做的一个工程,原先什么约束都没有加,运行结果会偶尔出现读写SRAM出错的情况,有时候加上chipscope反而没错了,稍作改动综合之后结果也不一样。再遇到这样的情况,肯定就能知道是关键路径的时序问题。就加了一个全局时钟的约束,它是DCM的输入。经过PR以后,看它的STA,发现提示了几个路径的错误,其中有一条就是从PC104接口过来的地址送到我内部一个模块的时候路径的setup time不满足,slack为负。slack是时序余量,是用周期减去时序通路上消耗的时间,正的为满足时序要求,负的就表示不满足。有网友说了几个改正的方案:

    1)修改PR的布局布线策略,比如改成时间优化,允许duplication(禁止逻辑优化)等
    2) 加强placement constraint
    5)使用floorplanner
    以上几点不需要修改设计。如果还不行就要优化code了。
    3)减少fanout (尤其中间的组合逻辑)
    4)插入额外的flip-flop等。

    本项目实际的修改就是在中间将逻辑打断,加了一级flip-flop。然后就不报timing error了。

    9.一般同一个时钟域的话不用考虑hold time,因为tco+tdelay>t_hold肯定可以满足,就算是加上始终偏斜,那么应该满足tco+tdelay-tpd>t_hold也是没有问题的,因为tdelay跟tpd和thold比不一个等级的。

    三、详细看了一下ISE生成的timing report,做以下分析。

    1.只做了一个输入全局时钟的约束,经过DCM以后生成三个时钟,一个CLK0,一个八倍频的时钟和一个八分频的时钟。timing report以时钟为条件分了四个部分做分析。

    2.每一部分基本包括两个方面,一个是component switching limit,还有一个就是路径的分析。其中component switching limit是跟器件相关的,对输入时钟的占空比有一个容忍的范围,参数值包括低电平最低持续多长时间(low pulse limit)和高电平最低持续多长时间(high pulse limit),而这个两个值根据输入时钟的大小是有变化的,这个都是器件固有的特性。

    3.路径的分析呢,分为setup和holdup进行分析,如果有不满足时序要求的路径(slack为负)那么就列出来,如果这个时钟下没有不满足时序要求的路径,那么同样会列出三个最坏情况的路径,setup的三个,holdup的三个。



    展开全文
  • 约束理论

    千次阅读 2017-12-12 15:49:34
    M.Goldratt)在他开创的优化生产技术(Optimized Production Technology,OPT)基础上发展起来的管理哲理,该理论提出了在制造业经营生产活动中定义消除制约因素的一些规范化方法,以支持连续改进(Cont
  • VF控制和矢量控制的一些区别

    千次阅读 多人点赞 2015-05-03 17:30:41
    我是做变频器开发的一线人员,有过完整的针对三相异步电机...看到讨论比较热烈,也来发个言,谈谈对变频器VF控制、矢量控制的认识。  针对异步电机,为了保证电机磁通出力不变 ,电机改变频率时,需维持电压V
  • 尺寸约束 链(Chains) 虚拟辅助对象 Barrier Group Guideline Placeholder 优化 none standard direct barrier chain dimensions 相对定位 相对定位是在ConstraintLayout中创建布局的基本构建之一。这些约束...
  • Spine IK 约束

    千次阅读 2018-10-14 19:48:17
    Spine IK 约束 大家好,我是笨笨,笨笨的笨,笨笨的笨,谢谢! 欢迎加入专业Spine技术交流群 Spine2D骨骼动画 7708065 转载请保留原始链接:https://blog.csdn.net/jx520/article/details/83037050 【Spine 专业...
  • pgsql 约束

    千次阅读 2014-06-05 09:27:26
    数据类型是约束我们可以在表里存储什么类型的数据的一种方法。 不过,对于许多应用,它们提供的约束实在是太粗糙。比如, 一个包含产品价格的字段可能应该只接受正数。但是没有哪种标准数据类型只接受
  • React-约束组件及无约束组件详解

    千次阅读 2016-03-21 10:03:58
    React可以帮助管理应用中的状态,自然也包括表单在内,现在知道React组件的核心理念就是可预知性和可测试性,在React中,表单组件有两种类型:约束组件约束组件。   一、无约束组件 在HTML中表单组件与React...
  • DC 时序约束

    千次阅读 2017-10-16 19:40:18
    前面介绍的设计都不算很复杂,都是使用时钟的默认行为作为电路的约束,都存在有路径给你约束,即信号的变化要在一个时钟周期内完成,并达到稳定值,以满足寄存器的建立保持的要求。此外进行可测性设计(design for ...
  • MySQL创建表和约束条件(四)

    千次阅读 2019-11-15 14:09:16
    我们在创建表的命令时, 用这么两个东西, 列级别约束条件表级别约束条件。 约束条件是干什么用的呢? 用什么作用效果呢? 数据库是存储,管理操作数据的的仓库, 而表是真正存储数据的, 更准确的说,所有的...
  • JavaEE实战——XML语法和约束技术

    千次阅读 2016-06-20 15:11:54
    读者熟练JavaSEJava5的新特性之后,从本系列博客中可以了解掌握到JavaEE的精髓。JavaEE系列博客的基本路线我会按照Java并法库--XML技术--Java5特性回顾--Servlet技术--JSP技术--MySQL技术--JDBC编程--web开发实战-...
  • 数据的约束条件:完整性约束

    千次阅读 2017-12-14 23:11:44
     1. 域约束:对属性取值范围的约束 2. 键约束:每个关系必须要有主键,且每个主键必须不相同 3. 非空约束:属性值不能为NULL 4. 实体完整性约束:...插入操作:域约束、键约束、非空约束、实体完整性约束、参
  • ScrollView代码设置约束

    千次阅读 2016-07-26 17:25:48
    ScrollView代码设置约束
  • Android 约束布局(ConstraintLayout)详解

    万次阅读 多人点赞 2018-01-13 16:28:13
    约束概述 转换布局 开始 创建布局 添加约束 基线约束 Chains Properties 设置宽高比例 Guidelines 自动添加约束 参考 本篇 ConstraintLayout 讲解版本:1.0.2,1.1.x 版本开始新增功能在下篇进行讲解。 ...
  • 前言 ´・ᴗ・` 组合主键 组合唯一键 上一节的问题 外键补充 添加约束 删除约束 修改约束 总结 ´◡`
  • 纯代码使用Masonry进行子控件约束的时候(尤其是tableViewCell的子控件自动适应行高),经常会出现下面约束警告2017-12-29 16:24:42.645364+0800 project[3804:770025] [LayoutConstraints] Unable to simultaneously ...
  • 来自:http://xilinx.eetrend.com/article/7735上一篇《XDC约束技巧之时钟篇》介绍了XDC的优势以及基本语法,详细说明了如何根据时钟结构设计要求来创建合适的时钟约束。我们知道XDC与UCF的根本区别之一就是对跨...
  • 名言:内心驱动自己做正确的事情,心流控制你的行为。 1 引言 笔者最近做一个项目使用FPGA芯片为Xilinx spartan6,开发软件是ISE14.7。之前开发使用的芯片为Xilinx 7系列FPGA,有A7、K7、V7、Z7、K7U+等,开发软件...
  • Android 约束布局constrainLayout

    万次阅读 2016-05-30 13:57:39
    Android 约束布局constrainLayout 在google IO 2016 中发布了最新的android studio 2.2 预览版,同时介绍了最新的约束控件。...当然还是可以通过编写XML文件控制约束控件,但这已经不是必须的,我们可以windo
  • 第一章 访问控制的概念  访问控制分类  网络访问控制  主机/操作系统访问控制  应用程序访问控制  加密方式在访问控制系统中的应用 第二章 强制访问控制与自主访问控制  强制访问控制(MAC)  ...
  • 前言 ´・ᴗ・` 约束(constrain) 介绍常用六大约束 外键 foreign key 列级约束与表级约束 彩蛋 总结 ´◡`
  • 逻辑控制语句 begin-end --相当于{},既if,while内带多条语句的时候需要使用begin-end包含起来 if-else --C#内的用法一样 whlie --使用方法C#内一样,另不固定的循环次数可以使用(1=1) case when-then end --...
  • SQL 完整性约束

    千次阅读 2018-10-21 22:32:57
    完整性约束是保证用户对数据库所做的修改不会破坏数据的一致性,是保护数据正确性相容性的一种手段。 维护完整性 在一个DBMS之中,为了能够维护数据库的完整性,必须能够提供以下的几种支持: 提供定义完整性约束...
  • [亲测]Oracle数据库约束

    千次阅读 2019-01-08 20:25:34
    约束是可以更好的保证数据库数据的完整性一致性的一套机制。 约束可以限制加入表的数据的类型。 如果存在依赖关系,约束可以防止错误的删除数据,也可以级联删除数据。 数据库的约束可以认为是对表的数据的一种...
  • SQL 约束讲解

    千次阅读 2009-05-13 11:10:00
    SQL 约束讲解2009-04-27 09:29约束主要包括:NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK DEFAULT 1、not null :用于控制字段的内容一定不能为空(NULL)。 用法 :Create table MyTable ( 
  • xilinx时序约束

    千次阅读 2012-08-03 20:22:10
    前一段时间调试了xilinx的板子上跑代码,自己;UCF文件的语法为:{NET|INST|PIN};3.1管脚约束:最简单的应用主要是位置约束LOC;ns;定义主时钟clk0:TIMESPEC“TS01”;间差在有效时钟沿的前面还是后面,TIMEGRP...
  • (2)安卓手机与蓝牙模块联合调试(二)—— 单片机蓝牙控制LED灯亮灭(上) (3)安卓手机与蓝牙模块联合调试(三)—— 单片机蓝牙控制LED灯亮灭(下) (4)安卓手机与蓝牙模块联合调试(四)—— 单片机数据...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 153,588
精华内容 61,435
关键字:

怎样约束和控制自己