Verilog HDL

简介

硬件描述语言,使用文本来描述数字系统的硬件和行为,可以表示逻辑电路图、逻辑表达式,所有逻辑功能。

Verilog HDL 和 VHDL 是两种语言。

Verilog HDL 和 C 比较像。好上手,语法和 C 类似,但是和思路不同。

C 程序生成的可执行文件描述的是过程,数据的搬动,Verilog 最终有硬件实体对应,跑起来也是并行在运行。

基础语法

逻辑值

  • 0 假

  • 1 真

  • z 高阻态,无驱动

  • x 未知逻辑电平

关键字

module example      /* 模块名 */
(
    input   wire    sys_clk     ,   /* 输入信号 */
    input   wire    sys_rst_n   ,   /* 输入信号 */
    inout   wire    sda         ,   /* 出入 */

    output  wire    po_flag         /* 输出 */
)

/* 线网型变量,真实存在的物理连线 */
wire    [0:0]   flag    ;

/* 寄存器型变量,真实的物理寄存器 */
reg     [7:0]   cnt     ;

/* 参数 */
parameter   CNT_MAX = 100;
localparam  CNT_MAX = 100;

常量

基数表示法

[二进制位宽长度]'[进制符号][数值]

举例

  • 8'd171 8bit 10 进制 171

    • b 二进制

    • o 八进制

    • d 十进制

    • h 十六进制

可以使用下划线分割,位宽和数值存在补0和截断的情况。如果直接写参数,则默认 32bit 的数。

赋值

阻塞赋值

结果为 a=2,c=2 赋值语句,每条执行完之后,才可以执行下一条。

非阻塞赋值,并行执行

结果为 a=2,c=1

赋值语句,每条执行完之后,才可以执行下一条。

行为描述

算术运算符

  • +assign c = a + b

  • -assign c = a - b

  • *assign c = a * b

  • /assign c = a / b

  • %assign c = a % b

规约运算符、按位运算

&m 将 m 的所有比特与,结果为 1bit,如

  • &4'b1111 = 1'b1

m&n 作为二元运算符,按位与,要保证两个数的比特数相同

  • 4'b1010 & 4'b0101 = 4'b0000

其他运算符同理

  • ~&

  • ^

  • |

逻辑运算符

  • &&

  • ||

  • ==

  • !=

关系运算符

< > <= >=

移位运算符

<< >>

位拼接运算符

把 8bit 的 a,3bit 的 b,5bit 的 c 拼接成 16bit 的数据

d = {a,b,c};

条件运算符

三目运算符

? :

系统函数

完成特殊功能,大多在仿真里使用

最后更新于