主线上的硬件描述语言有verilog 和 VHDL 两门, 由于 verilog 语法上比VHDL 语言灵活, 所以现在社区以 verilog 语言开发的项目占比更大。 但是相较于 现在流行的 java/python 计算机语言比起来, 其模块化管理要差很多, 所以现在社区有 类是 java 语言的 Chisel 设计。不过大部分FPGA厂家都只提供了 verilog/VHDL 两门语言的综合逻辑, 所以其他的语言都是最终要转换到 这两门语言上。 下面我们来看看流行的 verilog 语言的一些基本的知识。
Verilog HDL(Hardware Description Language)是在用途最广泛的 C 语言的基础上发展起来的一种硬件描述语言,具有灵活性高、易学易用等特点。Verilog HDL 可以在较短的时间内学习和掌握,目前已经在 FPGA 开发/IC 设计领域占据绝对的领导地位。
Verilog 的特点:
- 能形式化的抽象表示电路的行为和结构;
- 支持逻辑设计中层次与范围的描述;
- 可借用高级语言的精巧结构来简化电路行为和结构;
- 支持电路描述由高层到低层的综合转换;
- 硬件描述和实现工艺无关。
Verilog 的语法:
-
verilog 命名和 c/c++ 基本相似, 但是命名里面多两个一个$字符
-
由于 verilog 的数字更多考虑的是逻辑门, 所以通常以 直观的 二进制表示, 而且位数是有效必须指定的, 格式 <位数>'b<二进制数> 如 8’b00000001. 有时候也用 10 进制,16 进制, 格式如 8’d1, 8’ha (8’b00001010), 8 表示的是转换为 2 进制的位数. 16 进制中的加入了 ABCDEF 子母.
-
verilog 有 3 大数据类型: 寄存器类型(reg), 线网类型(wire)和参数类型(parameter). 下面是其定义方式:
//reg 定义 reg [31:0] delay_cnt; //延时计数器 reg key_flag; //按键标志 //wire 定义 wire data_en; //数据使能信号 wire [7:0] data; //数据 //parameter 定义 parameter DATA_WIDTH = 8; //数据位宽为8位
-
算术运算 ±* / %, 关系运算 > < >= <= == !=, 逻辑运算 ! && ||, 条件运算符 ? :, 位运算符 & | ^ ~, 移位运算 &