东莞三合一网站制作,建设银行网络学习网站,精美静态网站源码,嘉兴网站建设方案优化改进的if…else判断语句
SystemVerilog的判断修饰符unique和priority可以和if…else一起使用。使用这些修饰符不仅可以减少此类判断语句的不确定性#xff0c;还可以在建模早期发现潜在的设计错误。 1、unique if…else判断语句 unique if…else可以并行求值 修饰符unique表示…改进的if…else判断语句
SystemVerilog的判断修饰符unique和priority可以和if…else一起使用。使用这些修饰符不仅可以减少此类判断语句的不确定性还可以在建模早期发现潜在的设计错误。 1、unique if…else判断语句 unique if…else可以并行求值 修饰符unique表示条件排列的顺序并不重要。软件工具会将推断出的判断顺序优先级优化掉。
logic[2:0] sel;
always_comb
beginunique if(sel3b001) mux_out a;else if(sel3b010) mux_out b;else if(sel3b100) mux_out c;
endunique条件检查 unique if…else不能包含重叠的条件 软件工具会对unique if判断语句进行检查以确保在一连串if…else…if的所有判定条件都是互斥的。这允许判断语句并行执行而不需要优先级编码。若软件工具发现有多条判定条件为真则产生运行期警告。这样的警告信息可以在编译或运行期出现。这种附加的检查会帮组工程人员在模块验证的早期发现建模的错误。 防止无意产生锁存逻辑 unique if…else对未指明状态进行警告 当if语句指定了unique修饰后如果软件工具发现if语句执行时没有一条分支语句执行就会报告一条运行期警告。 这种运行期的语法检查确保了在执行过程中实际出现的所有判定条件都全部指明了。当判断序列执行时总会有一个分支执行。这样也保证了用纯粹的组合逻辑实现而不需要锁存器。 2、priority if判断语句 priority if…else必须按顺序进行求值 修饰符priority表示分支的次序是重要的。软件工具必须按照原有次序进行计算。
always_comb
beginpriority if(irq0) irq4b0001;else if(irq1) irq4b0010;else if(irq2) irq4b0100;else if(irq3) irq4b1000;
end因为模块本身已经显式地说明了上面的判断序列必须按照次序进行求值因此所有的软件工具都会保持推断出的优先级编码。 防止无意中产生锁存逻辑 priority if…else必须指定所有条件 和使用unique修饰一样当if语句中指定了priority修饰符后软件工具会在运行期检查if…else…if序列每次都会执行一个分支。