参考

  《手把手教你设计CPU——RISC-V处理器篇》

先给出不用if-else和case的原因

  Verilog中的if-else和case语法存在两大缺点:
  • 不能传播不定态X;
  • 会产生优先级的选择电路而非并行选择电路,从而不利于时序和面积;

情况一

  Verilog 的if-else 不能传播不定态,以如下代码片段为例。假设 a 的值为X不定态,按照Verilog语法会将其等效于 a == 0,从而让 out 输出值等于in2 最终没有将X不定态传播出去。这种情况可能会在仿真阶段掩盖某些致命的 bug,造成芯片功能错误:

if(a)
  out = in1;
else
  out = in2;

  而使用功能等效的 assign 语法,如下所示,假设 a 的值为X不定态,按照 Verilog 语法,则会将X不定态传播出去,从而让out 输出值也等于X。通过X不定态的传播,可以在仿真阶段将 bug彻底暴露出来

assign out = a ? inl : in2;

  虽然现在有的 EDA 工具提供专有选项(例如 Synopsys VCS 提供 xprop 选项)可以将 Verilog 原始语法中定 义的"不传播不定态"的情形强行传播出来,但是一方面不是所有的 EDA 工具均支持此功能;另一方面在操作中此选项也时常被忽视,从而造成疏漏。

情况二

  Verilog 的 case 语法也不能传播不定态,与情况一中的if-else 同理。而使用等效的 assign 语法即可规避此缺陷。

情况三

  verilog 的 if-else 语法会被综合成为优先级选择的电路,面积和时序均不够优化,如下所示∶

if(sel1)
  out = in1 [3:0];
else if (sel2)
  out = in2 [3:0];
else if (sel3)
  out = in3[3:0];
else
  out = 4'b0;

  如果此处确实是希望生成一种优先级选择的逻辑,则推荐使用 assign 语法等效地编写成如下形式,以规避 X 不定态传播的问题∶

assign out = sel1 ? in1 [3:0]:
        sel2 ? in2 [3:0]:
        sel3 ? in3 [3:0]:
              4' b0;

  而如果此处本来是希望生成一种并行选择的逻辑,则推荐使用 assign 语法明确地使用"与"-"或"逻辑,编写如下∶

assign out = ({4{sel1}} & in1[3:0])
| ({4{sel2}} & in2[3:0])
| ({4{sel3}} & in3[3:0]);

  使用明确的 assign 语法编写的"与"-"或"逻辑一定能够保证综合生成并行选择的电路

情况四

  与情况三同理,verilog 的 case 语法也会被综合成为优先级选择的电路,面积和时序均不够优化。有的EDA综合工具可以提供指引注释(例如 synopsys parallel case 和 full case)来使得综合工具能够综合出并行选择逻辑,但是这样可能会造成前后仿真不一致的严重问题,从而产生重大的bug。因此,在实际的工程开发中∶
● 应该明令禁止使用 EDA 综合工具提供的指引注释(例如 synopsys parallel case 和 full case)。
● 应该使用情况三推荐的等效 assign 语法编写电路。

Verilog RTL优化策略(一):推荐使用assign语法替代if-else和case语法的更多相关文章

  1. PHP中的数据库一、MySQL优化策略综述

    前些天看到一篇文章说到PHP的瓶颈很多情况下不在PHP自身,而在于数据库.我们都知道,PHP开发中,数据的增删改查是核心.为了提升PHP的运行效率,程序员不光需要写出逻辑清晰,效率很高的代码,还要能对 ...

  2. Hibernate查询以及优化策略04

    一. HQL查询 1. HQL(hibernate query language)单表查询 1.1 准备项目 创建项目: hinernate-03-query 引入jar,同前一个项目 复制实体(订单 ...

  3. 90 % Java 程序员被误导的一个性能优化策略

    我们经常看到一些 Java 性能优化的书或者理念,说不要在循环内定义变量,这样会占用过多的内存影响性能,而要在循环外面定义.接触 Java 这么久以来,相信很多 Java 程序员都被这种代码性能优化策 ...

  4. Day7:掌握APICloud应用管理相关服务的配置使用和相关API,包括:应用发布、版本管理、云修复、闪屏广告等。理解APICloud APP优化策略和编码规范;了解APICloud多Widget管理机制和SuperWebview的使用

    主要内容: 1. 应用发布 1.1 云编译 1.2 全包加密 网页全包加密:对网页中全包的html,css,javascript代码进行加密,加密后的网友代码都是不可读的,并且不能通过常用的格式化工具 ...

  5. Hive(六)hive执行过程实例分析与hive优化策略

    一.Hive 执行过程实例分析 1.join 对于 join 操作:SELECT pv.pageid, u.age FROM page_view pv JOIN user u ON (pv.useri ...

  6. hive作业的优化策略

    Mapreduce自身的特点: 1.IO和网络负载大:优化策略:减少IO和网络负载. 2.内存负载不大.优化策略:增大内存使用率: 3.CPU负载不大.优化策略:增大CPU使用率: (hive的优化应 ...

  7. 详解服务器性能测试的全生命周期?——从测试、结果分析到优化策略(转载)

    服务器性能测试是一项非常重要而且必要的工作,本文是作者Micheal在对服务器进行性能测试的过程中不断摸索出来的一些实用策略,通过定位问题,分析原因以及解决问题,实现对服务器进行更有针对性的优化,提升 ...

  8. Vue项目上线环境部署,项目优化策略,生成打包报告,及上线相关配置

    Node.js简介 Node.js是一个基于Chrome V8引擎的JavaScript运行环境,用来方便快速地搭建易于扩展的网络应用.Node.js使用了一个事件驱动.非阻塞式I/O的模型,使其轻量 ...

  9. 52 条 SQL 语句性能优化策略,建议收藏

    本文会提到 52 条 SQL 语句性能优化策略. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的列上建立索引. 2.应尽量避免在where子句中对字段进行nul ...

随机推荐

  1. C语言复习(六)----typedef 的作用

    typedef的作用 重命名变量:typedef unsigned int Uint;//可以使用Uint代替unsigned int 定义新的数据类型 typedef struct Books{ c ...

  2. BUU八月份水题记录

    目录 [BJDCTF 2nd]fake google(SSTI) [BJDCTF2020]Easy MD5(md5注入) [ZJCTF 2019]NiZhuanSiWei(反序列化) [BJDCTF ...

  3. postman怎么调中文

    事先准备 1 安装好postman. 下载网址:https://www.postman.com/downloads/ 2 下载好app.zip中文压缩包,下载地址:https://wws.lanzou ...

  4. Speed up Downloading Files on Linux

    Compared aria2c, axel and wget, aria2c is the best. It support multi-thread download (with "-s ...

  5. 你认为的.NET数据库连接池,真的是全部吗?

    一般我们的项目中会使用1到2个数据库连接配置,同程艺龙的数据库连接配置被收拢到统一的配置中心,由DBA统一配置和维护,业务方通过某个字符串配置拿到的是Connection对象. DBA能在对业务方无侵 ...

  6. 用华为云cli,管理华为云服务器的,安全组端口

    ---[前言]--- 关键字 hcloud 华为 命令行 linux windows powershell 前些天,大家因为华为云,是否应该默认开启端口,大家吵起来了,所以我抽空写了此文.解决问题,缓 ...

  7. Spring的@PropertySource注解使用

    @PropertySource注解是Spring用于加载配置文件,默认支持.properties与.xml两种配置文件.@PropertySource属性如下: name:默认为空,不指定Spring ...

  8. OSPF的Router-Id

    一.实验拓扑 二.实验编址 三.实验步骤: 1.设置PC的IP等信息 2.启动设备(全选) 3.根据实验编址配置路由器端口IP(先不设置lookback端口) R1: R2: R3: R4: 看一下r ...

  9. S3C2440—9.复制程序到SDRAM中执行

    文章目录 一.S3C2440的启动方式 二.代码 一.S3C2440的启动方式 S3C2440的MMU有一种"steppingstone".技术,是协助MCU从无法执行程序的NAN ...

  10. 51单片机—使用PWM对直流电机调速

    文章目录 - 什么是PWM - PWM是怎么对直流电机进行调速的 - 通过定时器中断实现PWM调速 - 上代码 - 什么是PWM PWM(脉宽调制),是靠改变脉冲宽度来控制输出电压,通过改变周期来控制 ...