用一个简单的例子来介绍verilog的用法
目录
- TOC {:toc}
verilog概述#
Verilog能够在多种抽象级别对数字逻辑系统进行描述,Verilog的设计初衷是成为一种基本语法与C语言相近的硬件描述语言。当前广泛使用的硬件描述语言包括VHDL以及Verilog HDL(VHSIC Hardware Description Language);同时verilog还衍生出了一些变种语言如System Verilog、Verilog-AMS等等,丰富了Verilog语言的应用场景。

不同语言在芯片设计上的主流场景
verilog语言和VHDL语言功能基本相同,在目前的项目上可以支持混用,但是VHDL的语法上更加严格一些,verilog语言更倾向于C语言,如果是入门学习,作者个人认为学习verilog语言就足够了,学完了Verilog语言基本就能看懂VHDL程序的意思。
实例#
话不多说,先看看verilog程序整什么样: Verilog程序一般分为程序和测试程序(一般习惯叫Testbench),测试程序会依据程序的功能尽可能的覆盖多的场景。
verilog程序实例#
// and2x模块:实现两个输入信号的与逻辑
module and2x(
input a, // 输入信号a
input b, // 输入信号b
output r // 输出信号r,等于a和b的与逻辑结果
);
// 由于a和b已经定义为input,这里不需要再次定义wire
// wire a, b, r; 这行代码是多余的,应该删除
// assign语句将a和b的与逻辑结果赋值给输出r
assign r = a & b;
endmoduleverilog testbench程序实例#
再看看verilog程序的测试程序长什么样子
`timescale 1ns / 1ps
module tb_and2x;
// 定义信号
reg a;
reg b;
wire r;
// 实例化 and2x 模块
and2x uut (
.a(a),
.b(b),
.r(r)
);
// 测试过程
initial begin
// 初始化输入
a = 0;
b = 0;
#10; // 等待 10ns
// 测试第一个条件
a = 1;
b = 0;
#10; // 等待 10ns
// 测试第二个条件
a = 0;
b = 1;
#10; // 等待 10ns
// 测试第三个条件
a = 1;
b = 1;
#10; // 等待 10ns
// 测试结束
$finish;
end
// 监控输出
//end
initial begin
$dumpfile("out.vcd");
// This will dump all signal, which may not be useful
//$dumpvars;
// dumping only this module
//$dumpvars(1, testbench);
// dumping only these variable
// the first number (level) is actually useless
$dumpvars(0, testbench);
end
endmoduleverilog有什么用#

数字芯片设计流程
Verilog 语法篇
verilog语法的基本认识
目录
- TOC {:toc}
前言#
verilog的语法入门篇
数据类型#
reg(寄存器):
用于存储逻辑电路中的状态变量,可以通过赋值操作进行更新。其用法类似于其他编程语言中的变量,但不同的是,在 Verilog 中,reg类型的变量可以不仅可以存储数字和布尔值,还可以存储多位二进制数(也可以存储 ASCII 字符)。integer(整数):
用于存储整数类型的变量,可以进行加减乘除等基本算术运算。其范围为 -2^31 到 2^31 - 1。real(实数):
用于存储浮点数类型的变量,可以进行基本的算术运算和一些特殊的数学函数运算。其精度和范围可能因实现而异。time(时间):
用于存储时间类型的变量,可以表示电路中的时间间隔,通常以纳秒为单位。在仿真过程中,时间变量可以用于控制模拟过程的进行。event(事件):
用于在电路中表示事件,可以通过事件触发器(Event Trigger)来控制模块的行为。parameter(参数):
用于在模块内部定义常量,其值在模块实例化时被确定。在模块中,参数可以用于配置模块的行为。
除了上述的变量类型之外,Verilog 中还有其他一些变量类型,如bit、byte、logic等,它们的具体用法和特点可能略有不同。在实际设计中,可以根据需要选择和使用适当的变量类型来实现设计。
数值表示#
verilog是面向数字电路的编程语言,数值的表示更侧重于二进制的方式,和C语言会有一些区别。
数据种类#
Verilog HDL 有下列四种基本的值来表示硬件电路中的电平逻辑:
0:逻辑 0 或 “假”
1:逻辑 1 或 “真”
x 或 X:未知
z 或 Z:高阻
- x 意味着信号数值的不确定,即在实际电路里,信号可能为 1,也可能为 0。
- z 意味着信号处于高阻状态,常见于信号(input, reg)没有驱动时的逻辑结果。例如一个 pad 的 input 呈现高阻状态时,其逻辑值和上下拉的状态有关系。上拉则逻辑值为 1,下拉则为 0 。
数字声明时,合法的基数格式有 4 中,包括:十进制(’d 或 ‘D),十六进制(‘h 或 ‘H),二进制(‘b 或 ‘B),八进制(‘o 或 ‘O)。数值可指明位宽,也可不指明位宽。