对DC中parallel_case的理解
来源:互联网 发布:3m平台 源码 编辑:程序博客网 时间:2024/06/15 12:04
synopsys parallel_case full_case
以前一直没弄懂,以为就是个简单的注释完事,原来还可以用来引导综合过程:
设计者在写设计代码时,有时可能针对仿真写一些语句,这些语句可能是不为DC所接受,也不希望DC接受;设计者如果不对这些语句进行特殊说明,DC读入设计代码时就会产生语法错误。
另一种情况是,设计者在写设计代码,有些设计代码是为专有的对象写的(如公司内部),这些专有的设计代码可能不希望被综合。
Synopsys提供了引导语句,设计者可以使用这些引导语句控制DC综合的对象。
在设计代码中,引导语句“// synopsys translate_off”后直到“// synopsys translate_on”之间的语句被DC忽略。下面的例子给出了这两个引导语句的用法。
举例:
// synopsys translate_off
`ifdef ZTEIC
// synopsys_translate_on
`define VENDOR_ID 16'h0083
// synopsys_translate_off
`else
`define VENDOR_ID 16'h0036
`endif
// synopsys_translate_on
举例:
always @(cs_state)
begin
case(cs_state) // synopsys parallel_case
2'b00: next_state = 2'b01;
2'b01: next_state = 2'b00;
2'b10: next_state = 2'b10;
default: next_state = 2'b00;
endcase
end
在case语句中,如果列举的条件不完全,DC将生成不必要的锁存单元。在状态机描述中,可能没有一些状态,此时如果不加声明,DC将认为条件没有完全列举。在这种情况下,设计者可以使用full_case引导语句。
举例:
always @(cs_state)
begin
case(cs_state) // synopsys full_case
2'b00: next_state = 2'b01;
2'b01: next_state = 2'b00;
2'b10: next_state = 2'b10;
endcase
end
parallel_case 和full_case引导格式
一般情况下,DC把case语句综合成选择器电路,但也可能把case语句综合成优先权译码电路。有时,优先权译码电路是不必要的,这是可以使用“// synopsys parallel_case”引导语句强迫DC把case语句综合成选择器电路。这种引导格式在case状态声明没有完全列举时应用较多。例3.2给出了这种引导格式。
Example
always @(cs_state)
begin
case(cs_state) // synopsys parallel_case
2’b00: next_state = 2’b01;
2’b01: next_state = 2’b00;
2’b10: next_state = 2’b10;
default: next_state = 2’b00;
endcase
end
在case语句中,如果列举的条件不完全,DC将生成不必要的锁存单元。在状态机描述中,可能没有一些状态,此时如果不加声明,DC将认为条件没有完全列举。在这种情况下,设计者可以使用full_case引导语句。见例3.3。
Example 3.2
always @(cs_state)
begin
case(cs_state) // synopsys full_case
2’b00: next_state = 2’b01;
2’b01: next_state = 2’b00;
2’b10: next_state = 2’b10;
endcase
end
以前一直没弄懂,以为就是个简单的注释完事,原来还可以用来引导综合过程:
设计者在写设计代码时,有时可能针对仿真写一些语句,这些语句可能是不为DC所接受,也不希望DC接受;设计者如果不对这些语句进行特殊说明,DC读入设计代码时就会产生语法错误。
另一种情况是,设计者在写设计代码,有些设计代码是为专有的对象写的(如公司内部),这些专有的设计代码可能不希望被综合。
Synopsys提供了引导语句,设计者可以使用这些引导语句控制DC综合的对象。
在设计代码中,引导语句“// synopsys translate_off”后直到“// synopsys translate_on”之间的语句被DC忽略。下面的例子给出了这两个引导语句的用法。
举例:
// synopsys translate_off
`ifdef ZTEIC
// synopsys_translate_on
`define VENDOR_ID 16'h0083
// synopsys_translate_off
`else
`define VENDOR_ID 16'h0036
`endif
// synopsys_translate_on
举例:
always @(cs_state)
begin
case(cs_state) // synopsys parallel_case
2'b00: next_state = 2'b01;
2'b01: next_state = 2'b00;
2'b10: next_state = 2'b10;
default: next_state = 2'b00;
endcase
end
在case语句中,如果列举的条件不完全,DC将生成不必要的锁存单元。在状态机描述中,可能没有一些状态,此时如果不加声明,DC将认为条件没有完全列举。在这种情况下,设计者可以使用full_case引导语句。
举例:
always @(cs_state)
begin
case(cs_state) // synopsys full_case
2'b00: next_state = 2'b01;
2'b01: next_state = 2'b00;
2'b10: next_state = 2'b10;
endcase
end
parallel_case 和full_case引导格式
一般情况下,DC把case语句综合成选择器电路,但也可能把case语句综合成优先权译码电路。有时,优先权译码电路是不必要的,这是可以使用“// synopsys parallel_case”引导语句强迫DC把case语句综合成选择器电路。这种引导格式在case状态声明没有完全列举时应用较多。例3.2给出了这种引导格式。
Example
always @(cs_state)
begin
case(cs_state) // synopsys parallel_case
2’b00: next_state = 2’b01;
2’b01: next_state = 2’b00;
2’b10: next_state = 2’b10;
default: next_state = 2’b00;
endcase
end
在case语句中,如果列举的条件不完全,DC将生成不必要的锁存单元。在状态机描述中,可能没有一些状态,此时如果不加声明,DC将认为条件没有完全列举。在这种情况下,设计者可以使用full_case引导语句。见例3.3。
Example 3.2
always @(cs_state)
begin
case(cs_state) // synopsys full_case
2’b00: next_state = 2’b01;
2’b01: next_state = 2’b00;
2’b10: next_state = 2’b10;
endcase
end
阅读全文
0 0
- 对DC中parallel_case的理解
- 对DC的一些理解
- 对Windows程序中设备上下文DC(device context)的理解
- 对Windows程序中设备上下文DC(device context)的理解
- MFC中对DC Client Area, Invalid area 的总结
- DC Motor 参数的理解
- 关于parallel_case和full_case的使用
- 关于parallel_case和full_case的使用
- 关于parallel_case和full_case的使用
- 关于parallel_case和full_case的使用
- MFC 中DC的解释
- C++中DC的含义
- 兼容位图和兼容DC的理解
- 数据中心操作系统 DC/OS的深入理解
- Vc中关于DC(设备环境函数(Device Context))的理解
- Vc中关于DC(设备环境函数(Device Context))的理解
- Vc中关于DC(设备环境函数(Device Context))的理解
- DC/DC转换器设计中接地线的布线技巧
- js中this的理解
- 印刻学院_SEO优化
- 第二十天网络编程
- get/set方法
- HDU 4424 Conquer a New Region——并查集
- 对DC中parallel_case的理解
- Linux 开启防火墙和开启指定端口命令
- 回文数
- Android Butterknife 8.4.0 使用方法总结
- 第四章例子程序
- node.js学习之调用函数
- 使用引用返回函数值
- NOI2016搞基记
- 希望能够坚持下去每一天