Skip to content

一、Verilog 概述

字数
1329 字
阅读时间
6 分钟

1.1 Verilog 简介

Verilog:硬件描述语言 描述数字系统硬件的结构和行为的语言 可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能

1.2 为什么需要Verilog

简单直观:原理图设计方式、编写描述语言(代码)等方式 复杂逻辑:Verilog 语言

1.3 Verilog 和 VHDL 区别

共同特点:

  1. 能形式化地抽象表示电路的行为和结构;
  2. 支持逻辑设计中层次与范围的描述;
  3. 可借用高级语言的精巧结构来简化电路行为和结构;
  4. 支持电路描述由高层到低层的综合转换;
  5. 硬件描述和实现工艺无关。 区别: Verilog:资源成熟、接近C、上手易 VHDL:不直观,设计较难 Verilog 和 VHDL 的比率是 80%和 20%

1.4 Verilog 和 C 的区别

Verilog 是硬件描述语言:会生成电路,并行处理与运行。 C 语言是软件语言:是软件指令,需要取址、译码、执行, 是串行执行的。

二、Verilog 基础知识

2.1 Verilog 的逻辑值

逻辑电路中有四种状态: 逻辑 0:表示低电平,也就是对应我们电路的 GND; 逻辑 1:表示高电平,也就是对应我们电路的 VCC; 逻辑 X:表示未知,有可能是高电平,也有可能是低电平; 逻辑 Z:表示高阻态,外部没有激励信号是一个悬空状态。

2.2 Verilog 的标识符

  • ==标识符是区分大小写的==
  • ==不建议大小写混合使用==
  • ==普通内部信号建议全部小写==
  • ==参数定义建议大写==
  • ==信号命名体现信号的含义== 第一个字符必须是字母或者下划线,可以是任意一组字母、数字、 (线)CountCOUNT//CountR5668FIVE推荐写法: count fifo_wr 规范建议:
  1. 用有意义的名字,如 sum、 cpu_addr 。
  2. 下划线区分词语组合,如 cpu_addr。
  3. 采用前后缀,如:时钟clk前缀:clk_50m,clk_cpu;低电平采用_n后缀:enable_n;
  4. 统一缩写,如全局复位信号rst。
  5. 同一信号在不同层次保持一致性。
  6. 自定义的标识符不能与保留字(关键词)同名。
  7. 参数统一采用大写,如定义参数使用 SIZE。

2.3 Verilog 的数字进制格式

  • 二进制: 4’b0101 表示 4 位二进制数字 0101;
  • 十进制: 4’d2 表示 4 位十进制数字 2(二进制 0010);
  • 十六进制: 4’ha 表示 4 位十六进制数字 a(二进制 1010)。

代码中没有指定数字的位宽与进制时,默认为 32 位的十进制 如 100,实际上表示的值为32’d100

2.4 Verilog 的数据类型

三大类数据类型:

  • 寄存器类型
  • 线网类型
  • 参数类型

1. 寄存器类型

表示一个==抽象的数据存储单元== ==只能在 always 语句和 initial 语句中被赋值,并且值从一个赋值到另一个赋值过程中被保存下来。== 过程语句描述的是时序逻辑, 即 always 语句带有时钟信号,则该寄存器变量对应为寄存器; 过程语句描述的是组合逻辑, 即 always 语句不带有时钟信号,则该寄存器变量对应为硬件连线; 寄存器类型的缺省值是 x(未知状态)

寄存器数据类型:reg、 integer、 real

verilog
//reg define
reg [31:0] delay_cnt; 
reg        key_flag ;

2. 线网类型

线网表示 Verilog 结构化元件间的==物理连线==。 值由驱动元件的值决定,例如连续赋值或门的输出。 没有驱动元件连接到线网,线网的缺省值为 z(高阻态)。

线网类型:tri 、 wire

verilog
//wire define
wire       data_en;
wire [7:0] data   ;

3. 参数类型

常量,常被用于定义

  • 状态机的状态
  • 数据位宽
  • 延迟大小 参数的定义是==局部的==,只在当前模块中有效
verilog
//parameter define
parameter DATA_WIDTH = 8; //数据位宽为8位

2.5 Verilog 的运算符

1. 算术运算符

==乘除比较浪费组合逻辑资源,尤其是除法。一般不用== 可用移位运算来完成运算

2. 关系运算符

声明的关系是假,则返回值是 0, 声明的关系是真,则返回值是 1

3. 逻辑运算符

4. 条件运算符

==位运算符一般用在信号赋值上==

5. 位运算符

==逻辑运算符一般用在条件判断上==

6. 移位运算符

==用 0 来填补移出的空位==

7. 拼接运算符

8. 运算符的优先级

贡献者

The avatar of contributor named as dz13718198068 dz13718198068

文件历史

撰写