HDL

硬件描述语言(Hardware Description Lagnuage,HDL)通过描述硬件的实现方法,来 产生与之对应的真实的硬件电路,最终实现所设计的预期功能。

Verilog HDL 和 C 语言的比较

C 语言所描述的代码功能在执行时都是一行 一行顺序执行的,而 Verilog 语言在设计完成后执行时则是并行执行的,C 语言所描述的代 码功能并不会真实的映射成最后的硬件,只是对内存的操作和进行数据的搬移,而用 Verilog 语言所描述的代码功能则会真真正正的生成所对应的硬件电路

Verilog HDL 语言基础语法

所有的 Verilog 代码都以 module(模块)的方式存在,一个简单的逻辑可以由一个 module 组成,复杂的逻辑可以包含多个 modules,每个 module 有独立的功能,并可通过输 入、输出端口被其它 module 调用(实例化)。通过 module 的方式可以将一些比较独立、 可以复用的功能进行模块化,代码阅读起来也比较直观。

Verilog 语法是有很多的,而且分为可综合(综合后可以生成对应的硬件电路)的语法 和不可综合(综合后不可以生成对应的硬件电路)的语法。

标识符

标识符用于定义常数、变量、信号、端口、子模块或参数名称。

逻辑值

在二进制计数中,单比特逻辑值只有“0”和“1”两种状态,而在 Verilog 语言中,为 了对电路了进行精确的建模,又增加了两种逻辑状态,即“X”和“Z”。

当“X”用作信号状态时表示未知,当用作条件判断时(在 casex 或 casez)表示不关 心;“Z”表示高阻状态,也就是没有任何驱动,通常用来对三态总线进行建模。在综合 工具眼中,或者说在实际实现的电路中,并没有什么 X 值,只存在 0、1 和 Z 三种状态。 在实际电路中还可能出现亚稳态,它既不是 0,也不是 1,而是一种不稳定的状态。

常量

常量是 Verilog 中不变的数值,Verilog 中的常量有三种类型 (1) 整数型; (2) 实数型; (3) 字符串型。

整数型常量也可以采用基数表示法表示。

变量

Verilog 语言中主要的两种变量类型

1. 线网型:表示电路间的物理连接;凡是在 always 或 initial 语句中被赋值的变量(赋值号左边的变量),不论表达的是组合逻辑还是时序逻辑, 都一定是 reg 型变量

2. 寄存器型:Verilog 中一个抽象的数据存储单元。凡是在 assign 语句中被赋值的变量,一定是 wire 型变量。

参数

参数是一种常量,通常出现在 module 内部,常被用于定义状态机的状态、数据位宽和 计数器计数个数大小等

parameter IDLE = 3'b001;
parameter CNT_1S_WIDTH = 4'd15

parameter 是出现在模块内部的局部定义,只作用于声明的那个文件,可以被灵活改 变,这是 parameter 的一个重要特征。

赋值语句

赋值语句的赋值方式有两种,分别为“<=”(非阻塞赋值)和“=”(阻塞赋值)。

以赋值操作符“<=”来标识的赋值操作称为“非阻塞型过程赋值”,非阻塞赋值的特点:

  1. 在 begin-end 串行语句块中,一条非阻塞过程语句的执行不会阻塞下一语句的执行,也 就是说在本条非阻塞型过程赋值语句对应的赋值操作执行完之前,下一条语句也可以 开始执行;
  2. 仿真过程在遇到非阻塞型过程赋值语句后首先计算其右端赋值表达式的值,然后等到 仿真时间结束时再将该计算结果赋值变量。也就是说,这种情况下的赋值操作是在同 一仿真时刻上的其他普通操作结束后才得以执行。

以 赋 值 操 作 符 “ = ” 来 标 识 的 赋 值 操 作 称 为 “ 阻 塞 型 过 程 赋 值,阻塞赋值的特点:

  1. 在 begin-end 串行语句块中的各条阻塞型过程赋值语句将以它们在顺序块后排列次序依 次得到执行;
  2. 阻塞型过程赋值语句的执行过程是:首先计算右端赋值表达式的值,然后立即将计算 结果赋值给“=”左端的被赋值变量。

阻塞型过程赋值语句的这两个特点表明:仿真进程在遇到阻塞型过程赋值语句时将计 算表达式的值并立即将其结果赋给等式左边的被赋值变量;在串行语句块中,下一条语句 的执行会被本条阻塞型过程赋值语句所阻塞,只有在当前这条阻塞型过程赋值语句所对应 的赋值操作执行完后下一条语句才能开始执行。

关系运算符

(1) a < b,a 小于 b
(2) a > b,a 大于 b
(3) a <= b,a 小于或者等于 b
(4) a >= b,a 大于或者等于 b

归约运算符、按位运算符和逻辑运算符

归约运算符和按位运算符

“&”操作符有两种用途,既可以作为一元运算符(仅有一个参与运算的量),也可 以作为二元运算符(有两个参与运算的量)。

当“&”作为一元运算符时表示归约与。&m 是将 m 中所有比特相与,最后的结果为 1bit

&4’b1111 = 1&1&1&1 = 1’b1
&4’b1101 = 1&1&0&1 = 1’b0

当“&”作为二元运算符时表示按位与。m&n 是将 m 的每个比特与 n 的相应比特相 与

4’b1010&4’b0101 = 4’b0000
4’b1101&4’b1111 = 4’b1101

逻辑运算符

m&&n 是判断 m 和 n 是否都为真,最后的结果只有 1bit,如果都为真则输出 1’b1,如果不都为真则输出 1’b0。

移位运算符

移位运算符是二元运算符,左移符号为“<<”,右移符号是’>>‘,将运算符左边的 操作数左移或右移指定的位数,用 0 来补充空闲位。如果右边操作数的值为 x 或 z,则移 位结果为未知数 x。

4'b1000 >> 3 后的结果为 4'b0001,4'b1000 >> 4 的结果为 4'b0000。

移位运算符在使用时,左移一位可以看成是乘以 2,右移一位可以看成是除以 2。所以 移位运算符用在计算中,代替乘法和除法。尤其是除法,使用移位的方式,可以节省资 源。但使用的前提是数据位宽要进行拓展,否则就会出现移位后全为 0 的情况。

条件运算符

由条件运算符组成的条件表达式的一般形式为:表达式 1 ? 表达式 2 : 表达式 3

执行过程是:当表达式 1 为真,则表达式 2 作为条件表达式的值,否则以表达式 3 作 为条件表达式的值。

if-else 只能在 always 块中使用, 不能在 assign 中使用,如果我们想在 assign 中使用就需要用到条件运算符

优先级

总的优先级关系为:归约运算符 > 算数运算符 > 移位运算符 > 关系运算符 > “= =” 和“!=”> 按位运算符 > “&&”和“||”> 条件运算符,总的来说是一元运算符 > 二元运 算符 > 三元运算符。

位拼接运算符

位拼接运算符由一对花括号加逗号组成“{ , }”,拼接的不同数据之间用“,”隔 开。

实现增长位宽的作用

如果需要将 8bit 的 a、3bit 的 b、5bit 的按顺序拼接成一个 16 位的 d,表示方法为

wire [15:0] d;
d = {a, b, c}

实现移位的作用

if-else 与 case

if(<条件表达式 1>)
语句或语句块 1;
else if(<条件表达式 2>)
语句或语句块 2;
………
else
case(<控制表达式>)
<分支语句 1> : 语句块 1;
<分支语句 2> : 语句块 2;
<分支语句 3> : 语句块 3;
………
<分支语句 n> : 语句块 n;
default : 语句块 n+1;
endcase

inout 双向端口

在定义端口列表的时候我们知道输入用 input,输出用 output,其实还有一种双向端 口,我们定义时使用 inout。

定义为 inout 的端口表示该端口是双向口,既可以作为数据的输入端口也可以作为 数据的输出端口

Verilog 语言中的系统任务和系统函数

Verilog 语言中预先定义了一些任务和函数,用于完成一些特殊的功能,它们被称为系 统任务和系统函数,这些函数大多数都是只能在 Testbench 仿真中使用的

`timescale 1ns/1ns //时间尺度预编译指令 时间单位/时间精度

仿真中使用“#数字”表示延时相应时间单位的时间,例#10 表示延时 10 个单位的时间, 即 10ns。

`timescale 1ns/10ps 精度 0.01,#10.11 表示延时 10110ps。

(1秒(s) =1000毫秒(ms)
1毫秒(ms)=1000微秒 (us)
1微秒(us)=1000纳秒 (ns)
1纳秒(ns)=1000皮秒 (ps))

$display 用于输出、打印信息

$display("%b+%b=%d",a, b, c);//格式“%b+%b=%d” 格式控制,未指定时默认十进

$write 用于输出、打印信息

$write("%b+%b=%d\n",a, b, c); //“%b+%b=%d\n” 格式控制,未指定时默认十进制
%h 或%H //以十六进制的形式输出
%d 或%D //以十进制的形式输出
%o 或%O //以八进制的形式输出
%b 或%B //以二进制的形式输出

$strobe 用于输出、打印信息

$strobe("%b+%b=%d",a,b,c); //“%b+%b=%d” 格式控制,未指定时默认十进制

$monitor 用于持续监测变量

$monitor("%b+%b=%d",a,b,c); //“%b+%b=%d” 格式控制,未指定时默认十进制

$readmemb 用于读二进制文件函数 ,$readmemh 用于读十六进制文件函数

$readmemb("<数据文件名>",<存贮器名>);
$readmemh("<数据文件名>",<存贮器名>);

Verilog HDL 硬件描述语言基础相关推荐

  1. 中国澳门sinox很多平台CAD制图、PCB电路板、IC我知道了、HDL硬件描述语言叙述、电路仿真和设计软件,元素分析表...

    中国澳门sinox很多平台CAD制图.PCB电路板.IC我知道了.HDL硬件描述语言叙述.电路仿真和设计软件,元素分析表,可打开眼世界. 最近的研究sinox执行windows版protel,powe ...

  2. 汉澳sinox平台的大量CAD制图、PCB电路板、IC集成电路、HDL硬件描述语言、电路仿真和元素分析等设计软件一览表

    汉澳sinox平台的大量CAD制图.PCB电路板.IC集成电路.HDL硬件描述语言.电路仿真和元素分析等设计软件一览表,让你大开眼界. 最近研究在sinox运行windows版的protel,powe ...

  3. 数字电子钟设计制作——数字逻辑课程设计 Verilog HDL CPLD

    目的: 1.进一步掌握数字电子技术的理论知识,培养工程设计能力和综合分析问题.解决问题的能力: 2.基本掌握常用电子电路的一般设计方法,提高电子电路的设计和实验能力: 3.掌握复杂可编程逻辑器件CPL ...

  4. Verilog HDL 语法学习笔记

    今天给大侠带来Verilog HDL 语法学习笔记,话不多说,上货. 关于详细的VHDL语法以及Verilog HDL语法可参见往期文章. 一周掌握 FPGA VHDL Day 7 暨汇总篇 一周掌握 ...

  5. 【连载】【FPGA黑金开发板】Verilog HDL那些事儿--听听低级建模的故事(五)

    声明:本文转载于http://www.cnblogs.com/kingst,版权归akuei2及黑金动力社区(http://www.heijin.org)共同所有. 有. 2.4 听听低级建模的故事 ...

  6. 硬件描述语言(HDL)基础——运算符

    第1关:位运算和逻辑运算 任务描述 本关任务:采用硬件描述语言对输入信号a和b进行按位或(out_or_bitwise)和逻辑或(out_or_logical)运算.此外,再将a和b按位取反,其中a取 ...

  7. 爆肝4万字❤️零基础掌握Verilog HDL

    文章目录 0.前言 1.Verilog HDL简介 1.1 什么是Verilog HDL 1.2 verilog发展历史ㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤㅤ 1.3 为什么要使用verilog ...

  8. 硬件描述语言(HDL)

    硬件描述语言(HDL) 1 HDL基本介绍 2 VHDL语言 库和实体 数据对象和数据类型: 操作符: 结构体之进程: VHDL语法 : VHDL语法规则及注意事项: 3 Verilog语言 基本: ...

  9. 数字集成电路设计(二、Verilog HDL基础知识)

    文章目录 1. 语言要素 1.1 空白符 1.2 注释符 1.3 标识符 1.3.1 转义标识符 1.4 关键字 1.5 数值 1.5.1 整数及其表示方式 1.5.2 实数及其表示方式 1.5.3 ...

最新文章

  1. 简单介绍.Net性能测试框架Crank的使用方法
  2. linux用户变量设置位置,linux---位置参数
  3. 第13天:提取方法对象
  4. php实现 明明的随机数
  5. 瑞文标准推理测试软件,瑞文标准推理测验标准答案表
  6. SAP and ABAP Memory总结
  7. 数字后端——布图规划
  8. Icon+启动图尺寸
  9. Visual C++线程同步技术
  10. 嵌入式 U 盘自动挂载
  11. 用LVM在VMware中的Linux硬盘扩容
  12. linux上dig命令,Linux中dig命令起什么作用呢?
  13. 电脑自带的edge浏览器无法访问解决问题
  14. STACEY矩阵-0114
  15. 【UOJ】#246. 【UER #7】套路
  16. vue 使用echarts 进行简单封装统一使用
  17. KE-之单机案例分析
  18. python实现图片拼接(项目界面展示图合并)
  19. 周围剃光头顶留长发型_为什么很多秃头的人宁可留周围一圈头发也不剃成光头?...
  20. Oracle数据库之同义词(SYNONYM)使用(转)

热门文章

  1. 浪潮服务器账号,浪潮云云服务器配置
  2. PPO Algorithm
  3. 我和明星有个“约会”
  4. 学子论文:Digg.com:投票的动力因素分析
  5. 云南三校生计算机专业250,云南三校生计算机专业2019年本科录取分数线
  6. COMSOL案例学习(3):保温杯中的温度分布(含调用.m文件提示“matlab function is not found.“解决办法)
  7. 2021-12-06 自动化专业C语言上机作业参考答案04
  8. 北京等一线城市租房通鉴
  9. 牛多年研发电源问题汇总
  10. 30种常用管理工具模型整理分享(上)