Verilog HDL:第一个例子
模块,I/O端口,总线和分配
电路的Verilog模块将其功能描述封装为其输入-输出关系的结构或行为视图。结构视图可以简单到门的网表,也可以复杂到将电路划分为主要功能块的高级架构,如算术和逻辑单元(ALU)。行为视图可以是一个简单的布尔方程模型、一个寄存器传输级别(RTL)或一个算法。本节将介绍Verilog文件的基础知识。
一个简单的例子
模块
在原理图捕获环境中,图形符号通过显示一个“边界框”以及输入和输出连接来定义给定的逻辑电路。在Verilog中,使用了相同的概念,只有边界框必须显式地输入到文本编辑器中。边界框是用模块块和相应的端口语句定义的。模块块(如示例所示)给电路一个名称,并定义所有的输入和输出端口,因此在原理图环境中起着与符号相同的作用。模块由一个“endmodule”语句关闭,模块声明和“endmodule”之间的所有语句都描述了模块的功能,即模块的内部电路连接。
输入、输出和总线
无论何时编写Verilog模块,要做的第一件事就是定义输入和输出信号。在图1的例子中,有一个输入信号“sw”来自板上开关,一个输出信号“led”连接到LED0。但是,请注意,输入和输出也可以是一组连接。我们称这些分组为总线。为了将输入或输出声明为总线,我们需要向CAD工具提供总线的最高有效位(MSB)索引和总线的最低有效位(LSB)索引。例如,下面的代码定义了一个8位宽总线“sw”,其中最左边的位(MSB)的索引是7,最右边的位(LSB)的索引是0。
输入(7:0]西南
在Verilog中索引总线类似于在C语言中索引数组。例如,如果我们想索引上面声明的sw总线的第二个位,我们将使用sw[1]。
赋值语句
上面例子中的assign语句将网络“sw”上的信号值赋给网络“led”。在实现中,它创建了一个连接输入端口sw到输出端口的电线领导.
assign语句也可用于将总线的一个信号分配给另一个总线的一个信号。例如,如果我们声明sw为8位宽总线和领导作为一个8位宽总线,我们想用第二个开关来控制第四个领导,代码将是:
模块led_sw(输出(7:0]领导、输入(7:0]西南);分配了(3.]=西南(1];...endmodule
常量
你也可以给一个信号或总线分配一个常数,以将它们绑定到逻辑'1' (VDD)或逻辑'0' (接地).在Verilog中常量的基本语法是:
例如:
常数Verilog | 解释 | 在二进制值 |
---|---|---|
12 'h123 | 12位16进制123 | 0001 0010 0011 |
20 'd44 | 20位十进制44 | 0000 0000 0000 0010 1100 |
4 'b1010 | 4位二进制1010 | 1010 |
要将信号或总线绑定到常量,还可以使用assign语句。例如,如果我们要将一个8位总线“seg”连接到地面,我们将这样写:
模块上(...输出(7:0]赛格,……);分配赛格=8“d0;...endmodule
重要思想
-
Verilog HDL中的模块作用类似于电路原理图中的边界盒。
-
总线是一组信号(导线)。
-
赋值语句将一个信号/总线的值传递给另一个信号/总线。
-
常量在Verilog HDL中以。的形式表示
'