FPGA第七篇:模块的结构、数据类型、变量和基本运算符

来源:互联网 发布:乔治亚当斯基事件知乎 编辑:程序博客网 时间:2024/06/05 22:58

第三章《模块的结构、数据类型、变量和基本运算符》

一、概念:


1、Verilog程序包含几个部分?

(1)端口定义 (2)I/O说明 (3)内部信号声明  (4)功能定义

2、模块的端口描述

将端口定义、I/O说明、类型说明在module block(端口1,...,端口n)一句话里面说明清楚。

3、功能描述

(1)assign:持续赋值语句,组合逻辑,阻塞赋值

(2)用实例元件:要求每个实例元件的名字必须唯一

(3)always块:组合或时序。其内部“顺序执行”。

付哥说:不要在always里面写组合逻辑。

4、与C语言相比,有哪些不同?

如果要用Verilog模块实现一定的功能,首先应该清楚哪些是同时发生的,哪些是顺序发生的。

(1)在Verilog模块中所有过程块(如:initial块、always块)、连续赋值语句(assign)、实例引用都是并行的;

(2)它们表示的是一种通过变量名互相连接的关系;

(3)在同一模块中这三者出现的先后顺序没有关系;

(4)只有连续赋值语句(assign)和实例引用语句(即用已定义的模块名引出的语句)可以独立于过程快而存在于模块的功能定义部分。

5、四个基本的数据类型之“常量数据类型”

定义:在程序运行过程中,其值不能被改变的量。

(1)数字

整数、x和z值、负数、下划线

注意:当常量不说明位数时,默认值是32位(这里指比特位),每个字母用8位的ASSIC码表示。

(2)参数(parameter)型

参数型常量经常用于定义延迟时间和变量宽度。

6、变量

(1)网络数据类型

a、网络数据类型的变量表示结构实体之间的物理连接

b、网络数据类型的变量不能存储值,而且它必须受到驱动器(门或assign)的驱动

c、若没有驱动器连接到网络数据类型的变量上,则该变量的值就是高阻态,其值为z。

d、wire型变量:

1)通常是用来表示单个门驱动或连续赋值语句驱动的网络型数据

2)表示用以assign关键字指定的逻辑符号

3)是默认的输入输出信号类型

4)wire型信号可以用做任何方程式的输入,也可以用作“assign”语句的或实例元件的输出

tri型变量:表示多驱动器驱动的网络型数据。

e、真值表(略)

(2)reg型

a、常用来表示always模块内的指定信号,常代表触发器。

b、always块内被赋值的每一个信号都必须定义为reg型。

c、reg型数据的默认初始值是不定值。

d、当reg型数据是一个表达式中的操作数时,它的值被当作是无符号值,即正值。

(3)memory型

用来描述RAM存储器、ROM存储器、reg文件。

7、位运算

不同长度的数据进行位运算:右端对其,位数少的高位用0填满。


二、疑问

1、一个.v文件中可以包含多个“module......endmodule”吗?

分开放,这是verilog coding style的一种良好习惯,每个文件里面只包含一个独立的module,把所有这些文件放在同一个目录下,在top文件里实例化这些module就可以调用了 。

2、always@(a or b or c)表示的含义是什么?

敏感信号为a或b或c,没有指定上升沿还是下降沿触发,所以默认为只要任一信号发生变化(上升沿或下降沿)就触发。


三、课后问题

1、模块有几部分组成?

2、端口分为几种?

3、为什么端口要说明信号的位宽?

4、能否说模块相当于电路图中的功能模块,端口相当于功能模块的引脚?

5、模块中的功能描述可以有哪几类语句或语句块组成?先后顺序?

6、这几类描述中哪一种直接与电路结构有关?

实例元件。

7、最基本的Verilog变量有几种类型?

8、reg和wire型的差别是什么?

wire型变量的值不是确定的值(有一个逻辑强度的概念),,reg型变量的值存储在寄存器中,其中的值在变量发生改变时才会改变。

9、由连续赋值语句assign赋值的变量能否是reg类型的?

可以的。

10、略

11、参数类型的变量有什么用处?

12、Verilog语法规定的参数传递和重新定义功能有什么直接的应用价值?





0 0
原创粉丝点击