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;可以根据血缘关系重新…

JavaScript实现粒子数字倒计时效果附完整注释

<!DOCTYPE html> <html lang="en"><head><meta charset

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

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

股票买卖II

股票买卖II 时间限制&#xff1a;1秒 内存限制&#xff1a;128M 题目描述 给定一个长度为N的数组&#xff0c;数组中的第i个数字表示一个给定股票在第i天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票…

解析Java中1000个常用类:Readable类,你学会了吗?

在 Java 编程中,处理输入流是一个常见的需求。Java 提供了多种方式来处理输入流,例如 InputStream、Reader 等类和接口。 而 Readable 接口是 Java 提供的一个简单而强大的接口,用于表示可读的字符序列。 本文将详细介绍 Readable 接口的用途、实现原理、应用场景,并通过…

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

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

QT之全局忽略编译警告QMAKE_CXXFLAGS

全局忽略编译警告QMAKE_CXXFLAGS 这个是Qt中用来给编译器传递开关的&#xff0c;常写在’pro’文件或’pri’文件中。 将所有的警告当成错误处理 QMAKE_CXXFLAGS -Werror return-type //函数有返回值 QMAKE_CXXFLAGS -Werror return-local-addr //返回局部变量地址 QMAKE…

Dubbo架构概览:服务注册与发现、远程调用、监控与管理

Dubbo 是一个成熟的、高性能的、基于 Java 的微服务开发框架&#xff0c;它主要用于解决分布式系统中的服务治理问题&#xff0c;包括服务的注册与发现、远程过程调用&#xff08;RPC&#xff09;、服务监控与管理等多个关键环节。以下是Dubbo架构概览的详细介绍&#xff1a; …

3种使用OpenCV进行图像合成的技巧

准备好探索图像世界的魔法了吗&#xff1f;今天&#xff0c;我们将用Python和OpenCV库&#xff0c;一起解锁三种超炫的图像合成技巧&#xff0c;让你的照片变得与众不同&#xff01;&#x1f308; 1. 图像融合&#xff1a;让风景与梦境交织 想象一下&#xff0c;把日出的辉煌…

【前端每日基础】day33——响应式布局

响应式布局是一种网页设计的方法&#xff0c;它可以使网站在不同的设备上&#xff08;如桌面电脑、平板电脑、手机等&#xff09;以及不同的屏幕尺寸上呈现出最佳的显示效果。响应式布局的目标是使用户在任何设备上都能够方便地访问和浏览网站&#xff0c;而不需要使用不同版本…

ios v品会 api-sign算法

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

PH编程入门:从基础到实践的全方位解析

PH编程入门&#xff1a;从基础到实践的全方位解析 PH编程&#xff0c;作为一种独特而强大的编程语言&#xff0c;正逐渐在各个领域展现其巨大的潜力。对于初学者来说&#xff0c;如何快速入门并掌握PH编程的精髓&#xff0c;是一个既充满挑战又充满机遇的过程。本文将从四个方…

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

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

Ubuntu Linux 24.04 使用certbot生成ssl证书

设置域名 1. 将需要生成SSL证书的域名解析到IP地址 idealand.xyz <> 64.176.82.190 检查防火墙的设置 1. 首先查看防火墙的状态&#xff1a; # ufw status 2. 如果防火墙开启了&#xff0c;要开放80和443端口用于certbot验证 # ufw allow 80 # ufw allow 443 生…

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法则营销商用跑步机 一家高端健身器材公司的销售代表正在向一家新开的健身房推销他们的商用跑步机。以下…

数控切割编程:探索精密制造的奥秘与挑战

数控切割编程&#xff1a;探索精密制造的奥秘与挑战 在现代化制造领域&#xff0c;数控切割编程以其高精度、高效率的特性&#xff0c;成为众多行业不可或缺的工艺手段。然而&#xff0c;对于初学者或外行人来说&#xff0c;数控切割编程往往显得神秘且复杂。本文将从四个方面…

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

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