Verilog语言快速入门(一)

这篇具有很好参考价值的文章主要介绍了Verilog语言快速入门(一)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

组合逻辑的一般模板

verilog语言,Vivado,Verilog,fpga开发

时序电路的一般模板

verilog语言,Vivado,Verilog,fpga开发

模块总体结构

verilog语言,Vivado,Verilog,fpga开发

模块说明

verilog语言,Vivado,Verilog,fpga开发

 verilog语言,Vivado,Verilog,fpga开发

功能描述

1、assign语句

verilog语言,Vivado,Verilog,fpga开发 verilog语言,Vivado,Verilog,fpga开发

1)算数型

verilog语言,Vivado,Verilog,fpga开发

 2)逻辑型

verilog语言,Vivado,Verilog,fpga开发

3)关系运算符

verilog语言,Vivado,Verilog,fpga开发

4) 等价运算符

 verilog语言,Vivado,Verilog,fpga开发

 5)按位运算符

verilog语言,Vivado,Verilog,fpga开发

 6)缩减运算符

verilog语言,Vivado,Verilog,fpga开发

7) 移位运算符

verilog语言,Vivado,Verilog,fpga开发

8)拼接赋值运算符

verilog语言,Vivado,Verilog,fpga开发

9) 条件运算符

verilog语言,Vivado,Verilog,fpga开发

如果表达式1值为X,则结果为X。

 2、always

verilog语言,Vivado,Verilog,fpga开发

 激活条件由敏感信号条件表决定,当敏感条件满足时,过程块被激活。

敏感条件有两种,一种是边沿敏感,一种是电平敏感。
verilog语言,Vivado,Verilog,fpga开发

verilog语言,Vivado,Verilog,fpga开发

说明:

  • 过程块中的赋值目标必须是reg型的。
  • 由于always语句可以描述边沿变化,在设计时序电路中得到广泛应用。
  • always语句中还可以使用if  case  for循环等语句,其功能更加强大。

 assign语句和always语句的主要区别:

  • assign连续赋值语句总是处于激活状态,只要操作数有变化马上进行计算和赋值;
  • always过程赋值语句只有当激活该过程时,才会进行计算和赋值,如果该过程不被激活,即使操作数发生变化也不会计算和赋值。
  • verilog规定assign 中的赋值目标必须是wire型的,而always语句中的赋值目标必须是reg型的。

verilog语言,Vivado,Verilog,fpga开发

  • always语句块中除了可以使用表达式赋值以外,还可以使用if , case等行为描述语句,还能够描述边沿变化,因此其功能比assign语句更强大( assign语句不能使用if等语句,也不能描述边沿变化)

verilog语言,Vivado,Verilog,fpga开发

 always语句块中如果有多条赋值语句必须将其用begin    end包括起来, assign语句中没有begin end 

verilog语言,Vivado,Verilog,fpga开发

 begin end 之间的赋值语句有阻塞赋值非阻塞赋值之分·

verilog语言,Vivado,Verilog,fpga开发

 verilog语言,Vivado,Verilog,fpga开发

  • 阻塞赋值的实质:右边表达式的计算和对左边的赋值是一个统一操作,之间不能再插入其他任何动作,即马上赋值

赋值目标1=表达式1;
赋值目标2=表达式2 ;

  • 非阻塞赋值的实质:按顺序计算右边表达式的值,但是并马上赋值,而是要等到过程结束时再按顺序赋值

赋值目标1<=表达式1;
赋值目标2<=表达式2 ;

verilog语言,Vivado,Verilog,fpga开发

应用:

  • 设计组合电路时常用阻塞赋值;
  • 设计时序电路时常用非阻塞赋值;
  • 但不是绝对的
  • 不建议在一个always块中混合使用阻塞赋值非阻塞赋值

verilog语言,Vivado,Verilog,fpga开发

 verilog语言,Vivado,Verilog,fpga开发

verilog语言,Vivado,Verilog,fpga开发

 综合举例:        4位二进制加1计数器

verilog语言,Vivado,Verilog,fpga开发

     3、底层模块和门原语调用
verilog语言,Vivado,Verilog,fpga开发

verilog语言,Vivado,Verilog,fpga开发

端口映射有两种方法:

  • 端口名关联法(命名法)
  • 位置关联法(顺序法)

命名法格式:
 (.层端口名1(外接信号名1),.层端口名2(外接信号名2),...)

因为有名字对应,不必按底层模块的端口信号列表顺序

DFF dff1(.CLK(clk),.D(d1),.Q(q1));     底层

verilog语言,Vivado,Verilog,fpga开发

 顺序法格式:
(外接信号名1,外接信号名2,..….)

DFF dff2(q1,d,q);   
verilog语言,Vivado,Verilog,fpga开发

 必须严格按照底层模块的端口信号列表顺序书写

 门原语调用

Verilog语言提供已经设计好的门,称为门原语(primitive,共12个),这些门可直接调用,不用再对其进行功能描述。

门原语调用格式:        门原语名     实例名    (端口连接)
其中实例名可省略(和模块调用不同),端口连接只能采用顺序法,输出在前,输入在后。

 verilog语言,Vivado,Verilog,fpga开发

 端口连接中第一个是输出,其余是输入,输入个数不限。

常见门

and
or
not
与非 nand
同非 nor
异或 xor
同或 xnor
缓冲器 buf

verilog语言,Vivado,Verilog,fpga开发

 端口列表中前面是输出,最后一个是输入,输出个数不限。

模块的特点:

  • 模块是以关键词module开始,以关键词endmodule结束的一段程序。
  • 模块的实际意义是代表硬件电路的逻辑实体(即实现一定逻辑功能的电路)。
  • 每个模块都实现特定的功能,范围可以从一个简单的门到整个大的系统。
  • 模块的描逑方式有行为建模和结构建模(或两者结合)之分。
     

Verilog中的数据类型

Verilog中的数据类型分为两大类

  • 线网类( net类)
  • 变量类( variable类)

连续赋值语句过程赋值语句的激活特点不同,故赋值目标特点也不同,前者不需要保存,后者需要保存,因此规定两种数据类型;

  • net型用于连续赋值的赋值目标或门原语的输出,且仿真时不需要分配内存空间;
  • variable型用于过程赋值的赋值目标,且仿真时需要分配内存空间
net类中的数据类型
wire(线性) tri(三态) tri0(下拉电阻) supply0(地)
wand(线与) triand(三态与) tri1(上拉电阻) supply1(电源)
wor(线或) wrior(三态或) trireg(电容性线网)
variable类中的数据类型
reg(寄存器型)
integer(整型) time(时间型)
real(实型) realtime(实时间型)

将一个信号定义成net型还是varible型,由以下两方面决定:

  1. 使用何种赋值语句对该信号进行赋值,如果是连续赋值门原语赋值例化语句赋值,则定义成net型如果是过程赋值则定义成variable型
  2. 对于端口信号来说,input信号inout信号必须定义成net 型的; output信号可以是net型的也可以是variable型的,决定于如何对其赋值(同1) 

verilog语言,Vivado,Verilog,fpga开发

 verilog语言,Vivado,Verilog,fpga开发

verilog语言,Vivado,Verilog,fpga开发

  •  对于端口信号来说,input信号inout信号必须定义成net型的;
  • output信号可以是net型的也可以是variable型的,决定于如何对其赋值

 verilog语言,Vivado,Verilog,fpga开发

  • c决定于如何对其赋值;
  • d 如果是端口信号,则必须是net型的;如果来自其它驱动源则决定于如何对其赋值
  • e 、f 、g 、h必须是net型例化语句赋值,则定义成net型;

Verilog中数字的表示格式
verilog语言,Vivado,Verilog,fpga开发

注意有符号数是按照补码表示的,即第一位是符号位
比较: 8'b10111011 →(187)10  有区别
 

 逻辑值

Verilog语言中的逻辑值有四种
1 逻辑1,高电平,数字1
0 逻辑0,低电平,数字0

x

不确定
z 高阻态

Verilog中的顺序语句

 1、if语句

verilog语言,Vivado,Verilog,fpga开发

if语句---举例
verilog语言,Vivado,Verilog,fpga开发

 verilog语言,Vivado,Verilog,fpga开发

 在用if语句设计“组合电路”时要注意,如果条件不完整,会综合出寄存器

 使条件完整的两种方法:

verilog语言,Vivado,Verilog,fpga开发

 条件表达式格式         (计算表达式)

计算表达式:
条件表达式的结果只有0和1两种,如果计算表达式的值为0,则条件表达式的值为0,否则为1 。
verilog语言,Vivado,Verilog,fpga开发

2、case语句

 格式

verilog语言,Vivado,Verilog,fpga开发

功能

  • 如果表达式的值=取值1,则执行语句1;
  • 如果表达式的值=取值2,则执行语句2 ;
  • 如果表达式的值=取值3,则执行语句3 ;
  • 如果表达式的值和上述取值都不相等,则执行默认语句。default语句可以不带。

 verilog语言,Vivado,Verilog,fpga开发

 Verilog语言的描述风格

 三种描述方式

  • 结构化描述(也称门级描述) (全部用门原语底层模块调用
  • 数据流级描述(全部用assign语句
  • 行为级描述(全部用always语句配合if 、 case语句等)

vivado中提到另外一种描述方式:RTL级描述方式

  • RTL级描述(数据流级+行为级+结构化描述三种混合的,可综合)

举例:用门级描述、数据流描述、行为描述分别设计数据选择器


        多路选择器Verilog门级描述

verilog语言,Vivado,Verilog,fpga开发

 例        多路选择器Verilog数据流级描述

verilog语言,Vivado,Verilog,fpga开发

 例        多路选择器Verilog行为级描述

verilog语言,Vivado,Verilog,fpga开发

 其它规定

(1)关键字

  • 关键字即Verilog语言中预定义的有特殊含义的英文词语

(2)标识符

  • 标识符即用户自定义的信号名﹑模块名等等;
  • 注意关键字不能作标识符;
  • Verilog区别大小写(关键字都是小写)。

(3)文件取名和存盘

  • Verilog文件扩展名为.v 
  • verilog不要求文件名和模块名一致,但最好是一致

(4)注释

  •   //   单行注释
  •   /*  */  多行注释
     

测试模块

如果设计阶段占用了20%的研发时间,那么需要花费80%的研发时间用于调试,才能使系统正常工作

编写测试文件(testbench)

  • 产生激励波形
  • 将输入加到测试模块并收集其输出响应
  • 将响应输出与期望值进行比较
     

Verilog HDL提供了一种灵活有效的产生输入信号波形的方式---写测试程序( test bench), 就是用一段程序产生激励信号,用语言描述信号的变化。
Test bench应当是被测模块的高层模块,它没有IO端口,而且内部有被测模块的实例。
verilog语言,Vivado,Verilog,fpga开发

 用Verilog HDL代码生成输入激励码test bench

 注意事项:

  • 时钟信号﹑置/复位信号与其它信号分开并分别加以处理

  • 注意各种(各组)输入信号的时序关系

  • 注意所采用的延时表示方式(绝对延时/相对延时)

  • 注意各种输入激励与时钟信号的关系

输入激励码产生方式:

  • 用单独的always语句assign赋值语句产生时钟信号
  • 用简单的initial语句块产生置/复位信号的激励
  • 在initial语句块中用循环语句块产生按一定规律变化的信号的激励码
  • 用Task过程产生特殊信号的输入激励; 

1、用单独的always语句或assign赋值语句产生信号
verilog语言,Vivado,Verilog,fpga开发

2、用简单的initial语句块产生置/复位信号的激励
verilog语言,Vivado,Verilog,fpga开发

非中文形式的符号

大小写要区分       clk

3、在initial语句块中用循环结构描述具有一定变化规则的输入激励信号
verilog语言,Vivado,Verilog,fpga开发

test bench程序结构

 test bench仿真文件样例

 verilog语言,Vivado,Verilog,fpga开发文章来源地址https://www.toymoban.com/news/detail-792507.html

到了这里,关于Verilog语言快速入门(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vivado开发FPGA使用流程、教程 verilog(建立工程、编译文件到最终烧录的全流程)

    目录 一、概述 二、工程创建 三、添加设计文件并编译 四、线上仿真 五、布局布线 六、生成比特流文件 七、烧录 一、概述 vivado开发FPGA流程分为创建工程、添加设计文件、编译、线上仿真、布局布线(添加约束文件)、生成比特流文件、烧录等步骤,下文将按照这些步骤讲

    2024年02月09日
    浏览(36)
  • Verilog语言快速入门(一)

        1)算数型  2)逻辑型 3)关系运算符 4) 等价运算符    5)按位运算符  6)缩减运算符 7) 移位运算符 8)拼接赋值运算符 9) 条件运算符 如果表达式1值为X,则结果为X。  激活条件由敏感信号条件表决定,当敏感条件满足时,过程块被激活。 敏感条件有两种,一种

    2024年01月16日
    浏览(34)
  • 基于FPGA的数字电子琴——数电小系统设计【数字电子技术】(使用Vivado中的verilog语言)含piano代码文件(全)

    目录 一、电路功能描述 二、方案设计 1. 总体设计方案 2. 对原理框图或程序流程图做出简单解释 3. 各模块介绍 3.1 音频驱动模块 3.2 LED显示模块 3.3 数码管显示模块 3.4 矩阵键盘模块 3.5 PS2机械键盘模块 3.6 时钟分频模块 3.7 曲谱生成模块 三、总结 数码管和LED显示模块 矩阵键盘

    2024年02月06日
    浏览(53)
  • 基于Verilog 语言开发的FPGA密码锁工程

    基于Verilog 语言开发的FPGA密码锁工程。 通过矩阵键盘输入按键值。 输入12修改密码,13清除密码,可以修改原来默认的密码,修改时首先要输入当前密码进行验证,正确后才能更新当前密码,否则修改不成功。 修改结束后按键15,确认修改成功。 也直接使用默认密码作为最终

    2024年02月10日
    浏览(53)
  • FPGA 驱动数码管动态显示(Verilog&Vivado)

    应用实例: (1)使用串口发送实现ACX720开发板时钟显示 本章将实现 FPGA 驱动数码管动态显示并提取出实现的电路结构,从电路结构入手编写代码,仿真对设计进行验证。最终板级调试时使用 Virtual Input/Output(VIO,虚拟输入/输出端口工具),输入需要显示的数据,数码管则显

    2023年04月12日
    浏览(52)
  • 【FPGA协议篇】UART通信及其verilog实现(代码采用传参实现模块通用性,适用于快速开发)

    ​ 即通用异步收发器(Universal Asynchronous Receiver/Transmitter),是一种 串行、异步、全双工 的通信协议。特点是通信线路简单,适用于远距离通信,但传输速度慢。 数据传输速率:波特率(单位:baud,波特) 常见波特率有:1200、2400、4800、19200、38400、57600等,最常用的是9600和11520

    2024年02月05日
    浏览(46)
  • 【FPGA】Verilog设计入门——时序模块及其Verilog表述

    目录 1.边沿触发型触发器及其Verilog表述 2.电平触发型锁存器及其Verilog表述  3.含异步复位/时钟使能型触发器及其Verilog表述 4.同步复位型触发器及其Verilog表述  5.异步复位型锁存器及其Verilog表述 6.Verilog的时钟过程表述的特点和规律   7.异步时序模块的Verilog表述  8.4位二进制

    2024年02月07日
    浏览(39)
  • 【FPGA/verilog -入门学习4】verilog 实现多路脉冲计数

    设计一个脉冲计数器,其功能如下 输入脉冲:4路脉冲信号,分别对每路进行脉冲检测并计数 使能信号:高电平进行计数,低电平清零计数器 计数器:在使能信号高电平期间,对脉冲信号的上升沿进行检测并递增计数值 编写测试脚本,进行仿真验证 使用上一章的一路脉冲检

    2024年02月04日
    浏览(49)
  • 【FPGA/verilog -入门学习2】verilog 生成上升沿下降沿脉冲

    使用脉冲边沿检测法设计一个上下降沿检测功能 preg1 =pluse preg2=preg2 preg1 比pluse 晚一个时钟, preg2比preg1晚一个时钟 在利用 与/非指令合并,生成上升沿的一个脉冲的 r_pluse = {r_pluse[0],pulse}; //等效于 r_pluse[0] =pluse r_pluse[1] =r_pluse[1] vlg_design testbench_top 3次测试中,测试1,测试2 ,

    2024年02月04日
    浏览(37)
  • 学号滚动显示verilog代码vivado软件ego1开发板

    名称:学号滚动显示verilog代码vivado软件ego1开发板 软件:VIVADO 语言:Verilog 代码功能: 学号滚动显示 Course Outline实验要求  》用EGO1实验板卡上的8个7段数码管滚动显示你的学号;  》例如:李佳一(LJY)学号2019040509;  》滚动显示16个字符为: HEULJY2019040509HEULJY201904. 》实验提示  》

    2024年02月03日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包