Verilog 语法

Verilog基础语法、

数据类型

wire型数据

  • 属于线网net型数据。

  • 数据驱动无存储

  • 输入到输出,建模组合逻辑

  • use assign

1
2
3
wire [31:2] a; //初始化a

a[7:4] //取出第7到4位数据
  • 位宽可以不从0开始

reg型数据

  • 是寄存器数据类型

  • 有存储功能

  • 标量/向量

  • can not use assign

  • 建模存储器、组合逻辑

1
2
reg [31:0] a,b,mem[20:0];
//声明了两个reg和一个memory

数字字面量

进制 代号
二进制 b/B
八进制 o/O
十进制 d/D
十六进制 h/H

use <位宽>'<进制><值>

  • 值之间可以加_
  • 进制和值之间不可以加_
  • 默认十进制、32位
  • 实数支持科学计数法如1_0001e4==100010000

special

  • x: 不定一位
  • z: 高阻

integer

  • 一般32位,默认有符号

real

  • 默认为0

parameter

  • 用于在编译时确认值得常量

time

1
2
3
4
5
time current;
initial begin
    #100;
    current=$time;
end

语法

有些模糊 正在尝试

注释

1
2
3
4
//no1
/*
aaa
*/

标识符

字母、下划线开头得字母、数字、$、_的区分大小写组合

关键字

所有关键字均为小写

数组、存储器

support reg wire integer time real

1
2
wire [31:0] wires [3:0];
//四个32位wire

赋值操作

  • 支持连续取赋值位
1
2
data[0][1][2][3][31:0] = 32'd233;
//将data的0、1、2、3下标处的31-0bit赋值为233
1
2
parameter data_par=32'd10;
//只能赋值一次,实例化除外
1
2
3
4
5
6
reg [0:8*100-1]str;
initial begin
    str="Hello World";
end
//字符串赋值
//\n,\t,%%,\\,\"

表达式

算数操作符

+、-、*、/、**、%

  • 若有一位是x,结果全是x

关系操作符

>、<、>=、<=

  • 结果为1或0

等价操作符

==和!=若带z、x则返回x

===和!==可以比较相同z、x

逻辑操作符

&&、||、!

  • 与c语言相似

按位操作符

  • 比c语言多同或~^

归约与(&),归约与非(~&),归约或(|),归约或非(~|),归约异或(^),归约同或(~^)。

移位操作符

三个为算数,两个为逻辑

拼接操作符

1
2
3
4
B = 1'b1;
A = 4'b1100
Y = {B, A[2:1], A[0], 4'h3, 3{1'b0}};
//Y==11'b1100_0011_000

条件操作符

(a==b)?c:d;

  • 与c语言相同

定义模块

1
2
3
4
5
6
7
8
module test(
    input [3:0] a,
    input [4:7] b,
    input [8:11] c,
    output reg [3:0] o1,
    output reg [4:7] o2
);
//input、output默认wire类型

两块

always

1
2
3
4
always @(poseedge clk)
begin
//sth
end

example

1
2
reg [0:9] a;
wire [9:0] b = a [9:0]; 

一些疑问

Licensed under CC BY-NC-SA 4.0
京ICP备2021032224号-1
Built with Hugo
主题 StackJimmy 设计
vi ./themes/hugo-theme-learn/layouts/partials/footer.html