0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Verilog HDL的基础知识

FPGA技术实战 来源:FPGA技术实战 2024-10-24 15:00 次阅读

引言:本文继续介绍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#5adder_out=mult_out+out;//延迟5ns

1.2 过程赋值语句(块)

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

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

wKgZoWcZ8KuAR2-wAAEJRNCEn98019.png

图1:过程赋值语句示例

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

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

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

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

wKgaoWcZ8KuAIZBMAADs0kYMPg0368.png

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

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

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

wKgZoWcZ8KqAXzMsAAED48L7ro0164.png

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

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

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

3. 两种类型RTL处理:组合逻辑处理和时序逻辑处理

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

wKgaoWcZ8KqAB7j3AACTCQixCCU843.png

图4:组合逻辑处理

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

wKgZoWcZ8KqAVqEdAAC4GIn5Aa0223.png
图5:时序逻辑处理

4. 过程块语句

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

4.1 if-else语句

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

wKgaoWcZ8KqAAalXAAEU_wwMuGY855.png

图6:if-else示例

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

4.2 case语句

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

wKgaoWcZ8KuAOuvoAAFKvljPJ48953.png

图7:case语句示例

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

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

wKgZoWcZ8KqAZhPyAAClsurGxns223.png

wKgaoWcZ8KqATY5XAACmUsAeoXI001.png

图8:casez和casex语句示例

4.3 循环语句

(1)forever循环语句示例

initialbegin     
  clk = 0;    
forever#25clk=~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. 同步逻辑和异步逻辑

wKgaoWcZ8MiANRunAAFFIQkBijQ280.png

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

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

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

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

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

wKgaoWcZ8MiAZjlbAAE75heiNDg598.png

wKgZoWcZ8MiAasp6AAC6_PxNQuo382.png

图10:function示例

wKgZoWcZ8MiAXn1mAAEGxIwwbQg249.png

图11:task示例

function和task的异同点

相同点:

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

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

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

差异点:

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

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

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

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

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    50

    文章

    4003

    浏览量

    133248
  • Verilog
    +关注

    关注

    28

    文章

    1339

    浏览量

    109881
  • HDL
    HDL
    +关注

    关注

    8

    文章

    325

    浏览量

    47288
  • 循环语句
    +关注

    关注

    0

    文章

    9

    浏览量

    4851

原文标题:Verilog HDL基础知识(二)

文章出处:【微信号:FPGA技术实战,微信公众号:FPGA技术实战】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Verilog HDL练习题和Verilog基础知识适合verilog新人

    Verilog HDL练习题和Verilog基础知识适合verilog新人Verilog
    发表于 08-15 15:08

    FPGA就业培训

    的设计流程;使学员掌握FPGA设计流程,对FPGA设计有一个宏观认识。模块二 Verilog HDL 基础知识[size=12.0000pt]Verilog
    发表于 09-29 16:33

    FPGA就业培训班

    的设计流程;使学员掌握FPGA设计流程,对FPGA设计有一个宏观认识。模块二 Verilog HDL 基础知识[size=12.0000pt]Verilog
    发表于 09-30 10:36

    【妖精分享】Verilog HDL基础知识

    欢迎下载
    发表于 02-03 10:43

    【干货】史上最全的硬件描述语言Verilog学习资料(FPGA工程师进阶必学)

    硬件描述语言Verilog,西安科大教学课件,总共包括完整八个章节学习内容。具体每章节内容如下第一章:Verilog HDL数字集成电路设计方法概述第二章:Verilog
    发表于 03-30 14:31

    Verilog数字系统设计教程(第3版)

    Verilog HDL 基础知识。按照书上的步骤,可以使大学电子类及计算机工程类本科及研究生,以及相关领域的设计工程人员在半年内掌握Veri log HDL 设计技术。
本书可作为
    发表于 03-21 13:46

    Verilog HDL基础知识

    Verilog HDL基础知识:硬件描述语言是硬件设计人员和电子设计自动化工具之间的界面。其主要目的是用来编写设计文件,建立电子系统行为级的仿真模型即利用计算机的巨大能力对用
    发表于 05-31 19:33 49次下载

    Verilog HDL综合实用教程

    Verilog HDL 综合实用教程第1章 基础知识第2章 从Verilog结构到逻辑门第3章 建模示例第4章 模型的优化第5章 验证附录A 可综合的语言结构附录B 通用库
    发表于 07-20 11:21 86次下载
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>综合实用教程

    Verilog HDL华为入门教程

    Verilog HDL 华为入门教程 本文主要介绍了Verilog HDL 语言的一些基本知识,目的是使初学者能够迅速掌握
    发表于 02-11 08:35 140次下载

    Verilog HDL基础知识

    发表于 02-19 19:29 21次下载

    Verilog_HDL基础知识非常好的学习教程

    这是我个人整理的资料,希望大家有兴趣的选择性下载:FPGA系列
    发表于 01-08 17:39 125次下载

    Verilog_HDL基础知识非常好的学习教程 (1)

    Verilog_HDL基础知识非常好的学习教程 (1)
    发表于 01-04 12:33 0次下载

    Verilog HDL基础知识详细说明

    硬件描述语言基本语法和实践 (1)VHDL 和Verilog HDL的各自特点和应用范围 (2)Verilog HDL基本结构语言要素与语法规则 (3)
    发表于 07-03 17:36 54次下载
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的<b class='flag-5'>基础知识</b>详细说明

    Verilog教程之Verilog HDL数字集成电路设计方法和基础知识课件

    本文档的主要内容详细介绍的是Verilog教程之Verilog HDL数字集成电路设计方法和基础知识课件
    发表于 12-09 11:24 53次下载
    <b class='flag-5'>Verilog</b>教程之<b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>数字集成电路设计方法和<b class='flag-5'>基础知识</b>课件

    Verilog HDL基础知识详细概述

    计算机的巨大能力对用Ⅴ Verilog Hdl或ⅥHDL建模的复杂数字逻辑进行仿真然后再自动综合以生成符合要求且在电路结构上可以实现的数字逻辑网表( Netlist),根据网表和某种工艺的器件自动生成具体电路,然后生成该工艺条件
    发表于 02-02 16:19 18次下载
    <b class='flag-5'>Verilog</b> <b class='flag-5'>HDL</b>的<b class='flag-5'>基础知识</b>详细概述