full_case & parallel_case

case中的full_case与parallel_case讨论:

1)术语介绍: 整个case模块叫做:case_statement,注释部分叫做case_statement_header

case (case_expression)  //synopsys full_case/parallel_case

case_item1 :case_item_statement1;

case_item2 :case_item_statement2;

case_item3 :case_item_statement3;

case_item4 :case_item_statement4;

endcase

casez,使用“?”来表示任意值。

casex,使用“?,z”来表示任意值,不建议使用。

2)如果使用full_case显式表示not_full_case,其他的没有的case_item值,not care。

full_case下也可能会出现latch,not_full_case下也可能不会出现latch(可以通过赋初值来避免)

module addrdecode (m0,m1,ce,addr);                                                                         module addrdecode (m0,m1,ce,addr);

output  m0,m1,ce;                                                                                                     output  m0,m1,ce;

input [31:0]addr;                   //产生3个latch                                                                input [31:0]addr;                   //无latch

reg m0,m1,ce;                                                                                                           reg m0,m1,ce;

always @(addr)                                                                                                          always @(addr)

casez(addr) // synopsys full_case                                                                                {m0,m1,ce} = 3‘b111;

2‘b10: {m0,m1} = 2‘b10;                                                                                        casez(addr) // synopsys full_case

2‘b11: {m0,m1} = 2‘b01;                                                                                             2‘b10: {m0,m1} = 2‘b10;

2‘b0?: {ce} = 1‘b0;                                                                                                      2‘b11: {m0,m1} = 2‘b01;

endcasez                                                                                                                         2‘b0?: {ce} = 1‘b0;

endmodule                                                                                                                              endcasez

endmodule

3)如果使用parallel_case显式表示not_parallel_case,可能有一些值会over_lap。

parallel_case用在not_parallel的case中,其中overlap的部分如果有效,会导致gate_level电路工作异常。

建议尽量不显式使用full_case和parallel_case来进行建模,对于平行结构多使用case,有优先级的结构多使用if-else。

时间: 2024-10-22 20:24:34

full_case & parallel_case的相关文章

Verilog case coding style

1.一般情况下,综合器将case语句综合成多路选择器,但也可能综合成优先级译码器. 2.case语句中,如果条件列举不完全,将综合出不必要的锁存器. 综合器指令://synopsys parallel_case & //synopsys full_case 使用//synopsys parallel_case可以引导综合器生成多路选择器. 1 always @(cs_state) 2 begin 3 case(cs_state) // synopsys parallel_case 4 2'b00

simple_spi_top

///////////////////////////////////////////////////////////////////// //// //// //// OpenCores MC68HC11E based SPI interface //// //// //// //// Author: Richard Herveille //// //// [email protected] //// //// www.asics.ws //// //// //// /////////////

Altera的几个常用的Synthesis attributes(转载)

各厂商综合工具,对HDL综合时都定义了一些综合属性这些属性可指定a declaration,a module item,a statement, or a port connection 不同的综合方式. 语法为: /* synthesis, <any_company_specific_attribute = value_or_optional_value */ 下面就是Altera的几个常用的Synthesis attributes Noprune A Verilog HDL synthesi

RTL 编码指南

1 使用函数,减少代码的书写量. 2 使用有意义的变量名. 3 不要使用立即数. 4 使用工艺无关库. 5 避免使用混合时钟沿.如果必须使用上升沿和下降沿进行触发,则必须保证综合和时序分析后该模块的时序周期在最坏的情况下也是正确的.且必须给出文档说明. 6 如果需要使用门控时钟或内部时钟,或者Reset信号,应把内部时钟产生电路或者Reset电路分离出来.Reset信号的功能是直接清除所有寄存器. 7 避免产生锁存器,在使用case 以及if else 时可能引入锁存器. 8 避免产生组合电路的

转载 关于case语句的优先级

对于这样的组合逻辑电路 [email protected](X) case(X) X1: X2: …… endcase 如果分支项包含变量X的所有取值情况,并且互相不重复,那么这样的情况,其实没有必要使用综合指令. (一)“//synthesis parallel_case” 有一些书在介绍case语句时(例如<verilog HDL综合实用教程>)说“case语句的verilog HDL语义表明了选取case分支的优先顺序.case表达式首先与第一个分支项进行比较,依次类推……”但在Quar

FPGA综合编码

1 判决树 在FPGA中判断使用if else语句以及case实现. a) if else 是有特权的,类似于优先编码(当两个条件同时成立,仅判断条件靠前的成立),所以当有特权条件时应该采用if else结构,对于并行的if条件语句其特权顺序恰好与if else 相反. b) case 语句常常(不总是)用在所有条件互不相容的条件下进行的.但是默认条件下case依然是有特权的,编译器会选择附加逻辑产生特权逻辑.如果我们确定条件是互斥的,那么我们可以利用编译伪指令'parallel_case'来实

FPGA小白学习之路(1) System Verilog的概念以及与verilog的对比

转自CSDN:http://blog.csdn.net/gtatcs/article/details/8970489 SystemVerilog语言简介 SystemVerilog是一种硬件描述和验证语言(HDVL),它基于IEEE1364-2001 Verilog硬件描述语言(HDL),并对其进行了扩展,包括扩充了C语言数据类型.结构.压缩和非压缩数组. 接口.断言等等,这些都使得SystemVerilog在一个更高的抽象层次上提高了设计建模的能力.SystemVerilog由Acceller

OR1200处理器的可编程中断控制器PIC分析

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 16.3可编程中断控制器PIC分析 16.3.1 PIC介绍 可编程中断控制器Programmable Interrupt Controller(PIC)用来响应各种中断事件,如:键盘事件.串口数据到达等,PIC收集所有的中断,并通知CPU中断到达,后者转入到中断处理例程进行处理.OR1200最多支持32个中断.其功能实现主要依靠两个特殊寄存器:中断屏蔽寄存器PICMR.中断状态寄存器PICSR.通过PICMR可以设置是否屏蔽某些中断,通

OR1200处理器的计时器模块TT介绍

以下内容摘自<步步惊芯--软核处理器内部设计分析>一书 16.2.1 TT介绍 计时器模块(Tick Timer:TT)一般用在操作系统的进程调度.用户程序的定时参考等.TT内部会对时钟周期计数,当计数值达到一个预设值时,会产生中断,通知处理器进行处理.其实现的主体是两个特殊寄存器:计时器单元计数寄存器TTCR.计时器单元模式寄存器TTMR,通过这两个SPR的不同配置,实现不同的工作模式,以及计时中断的产生.TTCR.TTMR是第10组特殊寄存器,如表16.4所示.TTCR.TTMR的格式分别