verilog之不常用语句

前言

verilog是硬件描述语言,其主要特点是针对硬件逻辑的描述;在FPGA上实现时,常用的语句往往和硬件有直接的关联。比如assign,原理图上的连线,如果不省略,应该是最频繁的语句。再如always,寄存器的驱动逻辑,作为时序的主要描述方式,成为verilog最有效的代码。然后是条件语句,完成各种控制结构。其次是计算结构,实现数据的数学转化。前面四个语法,基本占据了verilog的绝大部分的工作。在熟练掌握这四类语法后,如何熟悉应用其他语法以提高效率是需要考虑的。最好的方法就是熟悉不常用的语法,为设计提供备选项。

generate  | endgenerate

verilog中压缩代码的利器,尤其是和for配合使用时,能够起到事半功倍的效果。对于generate,需要注意的是,这个关键字声明了一个可以使用genvar驱动的结构的区域。作为变量,genvar可以驱动各种条件和循环结构。目前支持的if和for是使用较多的。其中generate if和ifdef的功能基本重叠(效率可能低于预编译),使用频率略低。generate for实际上是对某个模块或功能进行重复声明,这在硬件电路中是非常重要的。使用genvar描述模块的变化,如位宽,可以实现动态的位宽调整。这只是最初级的应用。实际上,generate结构中包含always时,条件结构可以嵌入其中,这个时候提供了一个genvar和reg变量交互的空间,可以实现寄存器根据参数实现最大化的合并。

function | endfunction

和C中函数遍地走不同,verilog中函数出现的比例十分低。这里最大的原因是函数内不能包含时序逻辑,也就是函数只能输出组合逻辑所能实现的功能。而受制于FPGA的硬件特性,组合逻辑是不能过于复杂的,否则时序会十分紧张。这就导致verilog的函数无法像C中代码逐条执行一样实现函数的反复调用。不过,函数可以作为内部计算模块,用于实现参数的自动计算。这样就不需要考虑硬件特性,只需要完成参数的计算结果输出即可。也就是说,将verilog的函数用于常量的计算可能是最好的使用方式。尤其是函数内部支持interger形式的计算,可以方便地实现某些固定公式的参数转化。如log2,exp2等函数都可以使用函数在verilog忽略硬件实现参数计算。

task | endtask

task和函数类似,不过内部可以支持时序逻辑,所以使用频率略高。在不使用参数时,task就是一段代码的换个区域书写。task内部使用的左变量和task的应用环境相关。在使用参数时,task可以实现多环境调用。task作为一段特殊的区域,可以实现function所无法实现的功能。一方面,task内部支持for结构,不过需要使用interger作为驱动变量;另一方面,支持always的赋值语句(在always内部调用)。这就提供了一种可能,在always内部使用for循环实现代码的精简。不过,这种精简必须满足硬件特性,因为task在always内部时使用的是时序逻辑。

小结

这里介绍了verilog中使用较少的三种语法。这三种语法有一定的共同处,即都支持与条件结构和循环结构的嵌入。同时也可以嵌入assign和always或者被嵌入。为了方便理解,可以将其理解为区域。generate是genvar的区域。function和task都是interger的区域。三者的区别和共同点有很多,这里只是简单列举了比较突出的点。实际应用中,需要考虑的往往是使用情景。一般在代码精简中,function用于常量计算,generate用于控制结构近似的情况,task用于参数形式近似的情况。

verilog之不常用语句的更多相关文章

  1. SQL server 常用语句

    SQL Server中常用的SQL语句   1.概述 2.查询概述 3.单表查询 4.连接查询 5.带有exists的相关子查询 6.SQL的集合操作 7.插入操作 8.删除操作 9.修改操作 10. ...

  2. mysql常用语句总结

    1.创建语句 CREATE DATABASE database_name //创建数据库 //删表 DROP TABLE IF EXISTS `t_social_user_extend`; //建表C ...

  3. JS常用语句

    JavaScript常用语句 1.document.write("");    输出语句 2.JS中的注释为   // 3.传统的HTML文档顺序是:     document-& ...

  4. velocity常用语句速查表

    velocity常用语句 * 变量定义 #set($directoryRoot = "www" ) * #if($!list.size() != 0) //判断list不为空 #f ...

  5. MySQL 常用语句 (汇集)

    原文地址:MySql常用语句作者:wuyanle 一.mysql常用语句 创建,删除和最基本查询: 显示数据库  mysql->show databases; 创建数据库  mysql-> ...

  6. mysql数据库常用语句2

    关于mysql常用语句的整理,上一篇涉及到ddl.dml以及一些简单的查询语句. 1:mysql分页查询 select * from table_name limit 5,10;   从下标为5元素查 ...

  7. mysqldump的常用语句及各参数详解

    mysqldump的常用语句及各参数详解 分类: MySQL 2011-01-11 17:55 1368人阅读 评论(0) 收藏 举报 数据库mysql服务器tableinsertdatabase m ...

  8. mysql学习一 常用语句

    操作系统为windows  1 启动关闭mysql服务 //windows mysqld --console //开启mysql服务 mysqladmin -uroot shutdown //关闭my ...

  9. mo系统常用语句

    mo系统常用语句 一.总结 一句话总结: 1.语言:双语设置(繁体,英语)语句? {:chooseLanguage("確定要刪除么","Are you sure you ...

  10. MySQL 常用语句大全

    MySQL 常用语句大全 一.连接 MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例 1:连接到本机上的 MYSQL. 首先在打开 DOS 窗口,然后进入目录 my ...

随机推荐

  1. GCC项目的文件组织和编译步骤分解

    C项目的文件组织和编译 C项目的代码, 由头文件(.h后缀)和C文件(.c后缀)组成 C语言的函数和变量, 分声明和定义两个阶段 头文件和C文件是等价的, 相当于C文件的一部分, 其功能由人为划分, ...

  2. STC系列8位MCU在Windows下的开发

    STC系列 MCS-51 8位MCU 简介 STC的8位MCU有89/90/10/11/12/15/8(A/F/G/H)这几个大系列, 都是8051衍生的8位单片机, 每个系列的特点如下 STC89系 ...

  3. Oracle Linux6下安装Oracle 12c实战

    经过N次安装尝试吐血总结,希望对大家有所帮助,同时做下记录备忘: 总结:安装前的准备工作是关键!!!Check and recheck! 参考:http://docs.oracle.com/cd/E1 ...

  4. Python之初级RPG小游戏

    在国外网站上找到一个练习Python的小游戏感觉不错,自己实现了一下. 通过该练习你能学到: 元组 字典 简单定义函数和封装 条件控制语句 游戏说明 以下是3个房间和1个花园: Hall 客厅 有一把 ...

  5. Java并发编程实例--2.获取和设置线程信息

    常用线程属性 ID: 每个线程的唯一标识: Name: 线程名称: Priority: 线程优先级,从1-10,数字越大优先级越高:不推荐改变线程优先级: Status: 线程状态,包含6种状态:ne ...

  6. Redis能保证数据不丢失吗?

    大家即使没用过Redis,也应该都听说过Redis的威名. Redis是一种Nosql类型的数据存储,全称Remote Dictionary Server,也就是远程字典服务器,用过Dictionar ...

  7. [攻防世界][Web]PHP2

    打开靶机对应的url 就一行字 Can you anthenticate to this website? 第一感觉就需要做目录文件扫描 使用御剑和dirsearch进行扫描,发现一个文件 index ...

  8. git回退至指定版本,并更新远程仓库

    1. git log   查到commit记录 2.复制 commit 后面的id 3. git reset --hard  commit 后面的id   // 回退 4. 强制更新远程仓库  git ...

  9. WSL2镜像文件压缩

    WSL2的镜像文件(*.vhdx)支持自动扩容,但是一般不会自动缩容.一旦某次存放过大文件以后,即使后续删除,镜像文件体积仍然不会缩小,导致大量磁盘空间浪费.因此,可以定期对镜像文件进行手动压缩. 镜 ...

  10. Kotlin 协程三 —— 数据流 Flow

    目录 一.Flow 的基本使用 1.1 Sequence 与 Flow 1.2 Flow 的简单使用 1.3 创建常规 Flow 的常用方式: 1.4 Flow 是冷流(惰性的) 1.5 Flow 的 ...