Verilog HDL基础知识(二)

引言:本文继续介绍Verilog HDL基础知识,重点介绍赋值语句、阻塞与非阻塞、循环语句、同步与异步、函数与任务语法知识。

1. 赋值语句

在Verilog中,有两种进行赋值的方法,即连续赋值语句和过程赋值语句(块)。

1.1 连续赋值语句

连续赋值用于表示组合逻辑。左侧必须是Net数据类型即wire和tri类型。

连续赋值始终处于活动状态,这意味着,对右侧值的任何更改都会导致赋值左侧值被更新。

//连续赋值方法1    
wire [15:0] adder_out = mult_out + out;     
//连续赋值方法2    
wire [15;0] adder_out;     
assign adder_out = mult_out + out;

在仿真测试中,可以对连续赋值语句分配延迟,但在综合时,该延迟被忽略。

assign #5 adder_out = mult_out + out; //延迟5ns
1.2  过程赋值语句(块)

过程赋值语句包括initial和always两种。intial语句用于初始化仿真使用,always使用行为功能描述电路功能。

每个always和initial块都是并行运行的,但每个块内部是顺序执行的。

图片

图1:过程赋值语句示例

2. 阻塞赋值和非阻塞赋值

always和initial过程块有种类型赋值即阻塞赋值(=)和非阻塞赋值(<=)。

过程赋值的左侧必须是变量数据类型,可以是reg、integer、real或time或realtime。赋值的右侧可以是任何有效的表达式或信号。

阻塞赋值和非阻塞赋值示例如下图所示。

图片

图2:阻塞赋值和非阻塞赋值示例

如图2左侧阻塞赋值,两条语句同时执行,延迟#5时,a=b=2,再延迟#10时,c=a=2,即赋值语句立即执行,执行完毕后才执行下一条语句,左侧值在赋值语句执行完后立即改变。如图2右侧非阻塞赋值,延迟#5时,a=b=2,而再延迟#5时,c=a=1,即c值并未立即为a的新值。

图3展示了阻塞赋值和非阻塞赋值综合后的RTL电路举例。

图片

图3:阻塞赋值和非阻塞赋值综合后的RTL电路举例

 阻塞赋值和非阻塞赋值使用规则

组合电路一般使用阻塞赋值,时序电路使用非阻塞赋值,这可以避免混淆,提高代码可读性。

3. 两种类型RTL处理

组合逻辑处理:对所有输入列表信号敏感,用于组合逻辑。

图片

图4:组合逻辑处理

时序逻辑处理:对时钟信号或者控制信号沿敏感(通过添加posedge或者negedge关键字),用于时序逻辑。

图片

图5:时序逻辑处理

4. 过程块语句

initial和always过程块中有三种常用语句:if-esle、case和循环语句。

4.1 if-else语句

语句以关键字if开头,后跟一个条件,然后是条件为true时要执行的语句序列。else子句(如果存在)将在条件为false时执行。

图片

图6:if-else示例

可以看到if语句合成为两个输入复用器。可以看到,多个if语句会导致多个复用,从而产生优先级。如果不需要在你的电路中进行优先级排序,case语句会更有效率。

4.2 case语句

在case语句中,所有条件都将根据表达式进行检查。这导致一个多路复用器具有多个输入。

图片

图7:case语句示例

casez语句将表达式或条件中的所有'z'值视为不关心。

casex语句将所有“x”和“z”值视为不关心,而不是逻辑值。

图片

图片

图8:casez和casex语句示例

4.3 循环语句

(1)forever循环语句示例

initial begin        clk = 0;    forever #25 clk= ~clk;   
end

以上示例为周期为#50的clk时钟,注意该语句不可综合,只能用于仿真。

(2)repeat循环语句

if(rotate == 1)  repeat(8) begin //循环8次  temp = data[15];  data = {data <<1,temp};  end  

repeat语句可以设置循环的次数,该语句可以用于综合,要具有明确的循环表达式和循环条件。

(3)while循环语句

initial begin      cnt = 0;while(cnt < 101) begin  $display("cnt = %d",cnt); cnt = cnt + 1;   end   
end 

cnt循环计数100次,在cnt为101时退出循环,该语句可以用于综合,要具有明确的循环表达式和循环条件。

(4)for循环语句

integer i;    
always @(inp,cnt) begin    result[7:4] = 0;  result[3:0] = inp;  if (cnt == 1) begin  for (i=4;i<=7; i=i+1) begin  result[i] = result[i-4];  end     end     
end

以上for循环语句实现4bit左移位功能,for语句可以进行综合,实现硬件电路。

5. 同步逻辑和异步逻辑

图片

图9:同步逻辑及异步逻辑

always敏度列表表达方式将导致控制信号是同步的或异步的。上图中左侧代码具有同步预置和触发器清除功能,该代码仅在时钟上升沿敏感,右侧代码敏感列表包含时钟和异步清除信号,如果aclr上升沿触发,就会引起q清零,不受时钟控制。

6. 函数(function)和任务(task)

Verilog HDL有两种子程序,函数和任务。它们都必须在模块中定义。函数根据其输入返回一个值。函数通常产生组合逻辑,并用于assign表达式中。

任务和函数对于模块中的重复代码非常有用。它们提高了代码的可读性。

图片

 

图片

图10:function示例

图片

图11:task示例

function和task的异同点

相同点:

(1)任务和函数必须在模块内定义,其作用范围仅适用于该模块,可以在模块内多次调用;

(2)任务和函数中可以声明局部变量,如寄存器,时间,整数,实数和事件,但是不能声明线网类型的变量;

(3)任务和函数中只能使用行为级语句,但是不能包含always和initial块,设计者可以在always和initial块中调用任务和函数。

差异点:

(1)函数能调用另一个函数,但是不能调用任务,任务可以调用另一个任务,也可以调用函数;

(2)函数总是在仿真时刻0开始 ,任务可以在非零时刻开始执行;

(3)函数一定不能包含任何延迟,事件或者时序控制声明语句,任务可以包含延迟,事件或者时序控制声明语句;

(4)函数至少要有一个输入变量,也可以有多个输入变量,任务可以没有或者有多个输入,输出,输入输出变量;

(5)函数只能返回一个值,函数不能有输出或者双向变量,任务不返回任何值,或者返回多个输出或双向变量值。  

延伸阅读:Verilog HDL基础知识(一)

图片

欢迎关注FPGA技术实战公众号,喜欢就多多转发吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/20339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java数据结构-二叉搜索树

目录 1. 概念2. 二叉搜索树的操作2.1 查找2.2 插入2.3 删除 3. 全部代码 1. 概念 二叉搜索树是特殊的二叉树,也叫二叉排序树,它的特点是:每个结点的左子树上的所有结点的值都小于这个结点的值,右子树上的所有结点的值都大于这个结点的值,另外所有的左子树和右子树也分别为二叉…

详解 Spark 编程之 RDD 依赖关系

一、依赖与血缘关系 依赖&#xff1a;两个相邻 RDD 之间的关系血缘关系&#xff1a;多个连续的 RDD 的依赖由于 RDD 不会保存数据&#xff0c;为了提高容错性&#xff0c;每个 RDD 都会保存自己的血缘关系&#xff0c;一旦某个转换过程出现错误&#xff0c;可以根据血缘关系重新…

随身wifi网络卡顿怎么解决?随身WiFi哪个牌子的最好用?排名第一名的随身WiFi!

对于随身wifi靠不靠谱这个问题&#xff0c;网上一直存在争议。很多人的随身wifi网速不稳定&#xff0c;信号看着满格就是上不了网。关于随身wifi卡顿到底该怎么解决呢&#xff1f; 1.如果是设备网络在一个地方上网速度很快&#xff0c;换一个地方网络就不行了&#xff0c;很可能…

Linux学习笔记(清晰且清爽)

本文首次发布于个人博客 想要获得最佳的阅读体验&#xff08;无广告且清爽&#xff09;&#xff0c;请访问本篇笔记 Linux安装 关于安装这里就不过多介绍了&#xff0c;安装版本是CentOS 7&#xff0c;详情安装步骤见下述博客在VMware中安装CentOS7&#xff08;超详细的图文教…

ios v品会 api-sign算法

vip品会 api-sign算法还原 ios入门案例 视频系列 IOS逆向合集-前言哔哩哔哩bilibili 一、ios难度与安卓对比 这里直接复制 杨如画大佬的文章的内容&#xff1a; ios难度与安卓对比 很多人说ios逆向比安卓简单&#xff0c;有以下几个原因 1 首先就是闭源&#xff0c;安卓开源…

vscode过滤器@modified(查看配置了哪些设置)

文档 visualstudio•docs•getstarted•settingshttps://code.visualstudio.com/docs/getstarted/settings 说明 使用modified可以过滤出&#xff1a; 配置过的设置&#xff08;和默认值不同&#xff09;&#xff1b; 在 settings.json 文件中配置了值的设置 步骤 1.打开…

Vue3实战笔记(53)—奇怪+1,VUE3实战模拟股票大盘工作台

文章目录 前言一、实战模拟股票大盘工作台二、使用步骤总结 前言 实战模拟股票大盘工作台 一、实战模拟股票大盘工作台 接上文&#xff0c;这两天封装好的组件直接应用,上源码&#xff1a; <template><div class"smart_house pb-5"><v-row ><…

JS对象由浅入深

对象 对象&#xff08;Object&#xff09;&#xff1a;JavaScript里的一种数据类型&#xff08;引用类型&#xff09;&#xff0c;也是用于存储数据的 好处&#xff1a;可以用来详细的描述某个事物&#xff0c;是用键值对形式存储语义更明了 特点&#xff1a;对象数据是无序的&…

模型 FABE(特性 优势 好处 证据)法则

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。特性、优势、好处、证据&#xff0c;一气呵成。 1 FABE法则的应用 1.1 FABE法则营销商用跑步机 一家高端健身器材公司的销售代表正在向一家新开的健身房推销他们的商用跑步机。以下…

【数据分享】中国电力年鉴(2004-2022)

大家好&#xff01;今天我要向大家介绍一份重要的中国电力统计数据资源——《中国电力年鉴》。这份年鉴涵盖了从2004年到2022年中国电力统计全面数据&#xff0c;并提供限时免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 自1993年首次出版以来&#xf…

【数据结构】链表与顺序表的比较

不同点&#xff1a; 顺序表和链表是两种常见的数据结构&#xff0c;他们的不同点在于存储方式和插入、删除操作、随机访问、cpu缓存利用率等方面。 一、存储方式不同: 顺序表&#xff1a; 顺序表的存储方式是顺序存储&#xff0c;在内存中申请一块连续的空间&#xff0c;通…

Java运算符及程序逻辑控制

&#x1f389;welcome to my blog 请留下你宝贵的足迹吧(点赞&#x1f44d;评论&#x1f4dd;收藏⭐&#xff09; &#x1f493;期待你的一键三连&#xff0c;你的鼓励是我创作的动力之源&#x1f493; &#x1f423;目录 &#x1f340;运算符&#x1f4da;1.算术运算符&#x…

python判断文件是否存在

import os test_path "/Users/yxk/Desktop/test/GrayScale.tif" if(os.path.exists(test_path)):print(文件存在&#xff01;&#xff01;&#xff01;&#xff01;) else:print("文件不存在&#xff01;&#xff01;&#xff01;&#xff01;")结果如下 …

RabbitMQ(四)事务消息,惰性队列,优先队列

文章目录 事务消息概念配置 惰性队列概念应用场景 优先队列概念配置 事务消息 仅在生产者端有效&#xff0c;消费端无效 概念 总结&#xff1a; 在生产者端使用事务消息和消费端没有关系在生产者端使用事务消息仅仅是控制事务内的消息是否发送提交事务就把事务内所有消息都发送…

Java面试——专业技能

优质博文&#xff1a;IT-BLOG-CN 一、简单讲下 Java 的跨平台原理 由于各个操作系统&#xff08;Windows&#xff0c;Linux等&#xff09;支持的指令集不是完全一致的。就会让我们程序在不同的操作系统上要执行不同的程序代码。Java 开发了适用于不同操作系统及位数的 Java 虚拟…

【教程】自监督 对比学习,代码,爽学一波

from&#xff1a; https://docs.lightly.ai/self-supervised-learning/examples/simclr.html

代码随想录第22天|回溯part2 组合总和III电话号码的字母组合

216.组合总和III 当组合的数量为k就判断和&#xff0c;并且返回。 在枚举的时候可以进行剪枝&#xff0c;如果总和已经超过了n&#xff0c;那么就没必要继续递归下去了 class Solution { public:vector<int> path;vector<vector<int>> res;void backTrackin…

Java版本家政上门系统源码,自主研发、安全可控,支持任意二次开发

家政上门系统源码&#xff0c;Java版本&#xff0c;自主研发、安全可控。支持任意二次开发、有丰富合作案例。多端管理&#xff1a;管理端、用户端、服务端。 技术参数&#xff1a; 技术架构&#xff1a;springboot、mysql 、Thymeleaf 开发语言&#xff1a;java1.8、vue 开…

软件开发步骤详解

一、引言 随着信息技术的迅猛发展&#xff0c;软件已成为现代社会不可或缺的一部分。无论是企业运营、个人生活还是科学研究&#xff0c;都离不开各种软件的支持。因此&#xff0c;掌握软件开发的步骤和技巧对于IT从业者来说至关重要。本文旨在详细介绍软件开发的整个流程&…

计算机网络期末复习(1)计算机网络在信息时代对的作用 计算机网络的定义和分类 三种交换方法

计算机网络在信息时代扮演着至关重要的角色&#xff0c;它极大地改变了我们生活、工作和学习的方式。 计算机网络在信息时代的作用 信息共享与传播&#xff1a;计算机网络使全球范围内的信息快速共享成为可能&#xff0c;无论是新闻、学术研究还是娱乐内容&#xff0c;都可以…