verilog之不常用语句
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之不常用语句的更多相关文章
- SQL server 常用语句
SQL Server中常用的SQL语句 1.概述 2.查询概述 3.单表查询 4.连接查询 5.带有exists的相关子查询 6.SQL的集合操作 7.插入操作 8.删除操作 9.修改操作 10. ...
- mysql常用语句总结
1.创建语句 CREATE DATABASE database_name //创建数据库 //删表 DROP TABLE IF EXISTS `t_social_user_extend`; //建表C ...
- JS常用语句
JavaScript常用语句 1.document.write(""); 输出语句 2.JS中的注释为 // 3.传统的HTML文档顺序是: document-& ...
- velocity常用语句速查表
velocity常用语句 * 变量定义 #set($directoryRoot = "www" ) * #if($!list.size() != 0) //判断list不为空 #f ...
- MySQL 常用语句 (汇集)
原文地址:MySql常用语句作者:wuyanle 一.mysql常用语句 创建,删除和最基本查询: 显示数据库 mysql->show databases; 创建数据库 mysql-> ...
- mysql数据库常用语句2
关于mysql常用语句的整理,上一篇涉及到ddl.dml以及一些简单的查询语句. 1:mysql分页查询 select * from table_name limit 5,10; 从下标为5元素查 ...
- mysqldump的常用语句及各参数详解
mysqldump的常用语句及各参数详解 分类: MySQL 2011-01-11 17:55 1368人阅读 评论(0) 收藏 举报 数据库mysql服务器tableinsertdatabase m ...
- mysql学习一 常用语句
操作系统为windows 1 启动关闭mysql服务 //windows mysqld --console //开启mysql服务 mysqladmin -uroot shutdown //关闭my ...
- mo系统常用语句
mo系统常用语句 一.总结 一句话总结: 1.语言:双语设置(繁体,英语)语句? {:chooseLanguage("確定要刪除么","Are you sure you ...
- MySQL 常用语句大全
MySQL 常用语句大全 一.连接 MySQL 格式: mysql -h 主机地址 -u 用户名 -p 用户密码 1.例 1:连接到本机上的 MYSQL. 首先在打开 DOS 窗口,然后进入目录 my ...
随机推荐
- Typora 快捷方式给字体设置颜色
1.下载并安装 AutoHotkey (具体步骤可自行百度) 访问 AutoHotkey 主页: https://autohotkey.com/ 点击下载: https://autohotkey.co ...
- 【Unity3D】伽马校正
1 伽马相关概念 1.1 人眼对亮度变化的感知 人眼对亮度变化的感知不是线性的,如下图,人眼对亮区的亮度变化不太敏感,对暗区的亮度变化较敏感.另外,我们可以想象一下,在一个黑暗的房间里,由 1 根 ...
- Swoole从入门到入土(9)——TCP服务器[协程风格]
上一篇,我们一起初步接触了协程.我相信只有一节的讨论,很多小伙伴对于"协程"与"线程"的区分可能还有点模糊.我们这里以两者的比较作为本篇开头,进行一番比较. 首 ...
- dp题单——区间dp
一.基本概念 1.链式区间dp for(int len = 2; len <= n; len++){ //枚举区间长度 for(int i = 1; i + len - 1 <= n; i ...
- JavaScript 的新数组分组方法
对数组中的项目进行分组,你可能已经做过很多次了.每次都会手动编写一个分组函数,或者使用 lodash 的 groupBy 函数. 好消息是,JavaScript 现在有了分组方法,所以你再也不必这样做 ...
- Go语言并发编程(3):sync包介绍和使用(上)-Mutex,RWMutex,WaitGroup,sync.Map
一.sync 包简介 在并发编程中,为了解决竞争条件问题,Go 语言提供了 sync 标准包,它提供了基本的同步原语,例如互斥锁.读写锁等. sync 包使用建议: 除了 Once 和 WaitGro ...
- 常用SQL语句备查
查询表中某一列是否有重复值 SELECT bizType, COUNT(bizType) FROM Res GROUP BY bizType HAVING COUNT(bizType) > 1 ...
- 使用paramiko模块远程连接遇到paramiko.ssh_exception.NoValidConnectionsError的解决办法
连接时报错paramiko.ssh_exception.NoValidConnectionsError, 解决办法 首先在ubuntu终端上输入:cat /etc/ssh/ssh_config,查看端 ...
- 【Azure 事件中心】Azure Event Hub中的数据能不能存储大于7天呢?如果7天之后是不是会自动删除呢?
问题描述 Event Hub中有个retention的设置为7天,有没有办法增大这个Retention的时间? 如果没办法,是不是超过7天的数据就会被删除? 问题解答 因为Azure Event Hu ...
- 【Azure 应用服务】添加自定义域时,Domain ownership 验证无法通过
问题描述 在Azure App Service添加自定义域名时,遇见了Domain ownership 验证无法通过的问题? 问题解决 因为DNS中配置App Service默认域名和自定义域名的CN ...