基于SparkRoad的《Verilog数字系统设计教程·第三版(夏宇闻)》学习(4)——第3章
思考题:
1.模块由几个部分组成?
描述接口、描述逻辑功能两部分组成。
2.端口分为几种?
3种,输入口、输出口、输入/输出口。
3.为什么端口要说明信号的位宽?
不说明信号位宽可能会在信号发生改变时发生错误,不容易看出接收信号的数据宽度,很难进行数据处理。
4.能否说模块相当于电路图中的功能模块,端口相当于功能模块的引脚?
可以,每个模块都有特定功能,功能的实现必须依靠具体电路,端口是信号传递通道,相当于功能模块引脚。
5.模块中的功能描述可以由哪几类语句或语句块组成?它们出现的顺序会不会影响功能的描述?
assign语句声明、实例元件、always块。出现顺序不影响功能描述。
6.这几类描述中的哪一种直接与电路结构有关?
实例元件直接与电路结构相关。
7.最基本的Verilog变量有哪几种类型?
wire、reg、memory。
8.reg型和wire型变量的差别是什么?
reg型是寄存器变量,相当于存储单元;wire型是线型变量,相当于物理连线。根本性差别在于reg型保持最后一次的赋值,wire型需要持续的驱动。
9.由连续赋值语句(assign)赋值的变量是否能是reg类型的?
不能,左侧必须是线网型数据(wire)。
10.在always模块中被赋值的变量能否是wire类型的?如果不能是wire类型的,那么必须是什么类型的?它们表示的一定是实际的寄存器吗?
always块中被赋值变量不能是wire型,必须是reg型,表示的不一定是实际的寄存器。
11.参数类型的变量有什么用处?
可以提高程序的可读性和可维护性。
12.Verilog语法规定的参数传递和重新定义功能有什么直接的应用价值?
可以用于定义延迟时间和变量宽度。
13.逻辑比较运算符小于等于“<=”和非阻塞赋值“<=”的表示是完全一样的,为什么Verilog在语句解释和编译时不会搞错?
逻辑比较时<=两边是两个操作数,是双目运算符;在非阻塞赋值时<=右边是操作数,是单目运算符。
14.是否可以说实例引用的描述实际就是严格意义上的电路结构描述?
不能,实例引用的描述是在门级电路上描述,和严格意义的电路结构仍有差距。