自学数字设计,针对《数字系统设计教程》中部分思考题做整理
第3章思考题
1.模块由几个部分构成
2.端口分为几种
3.为什么端口要说明信号的位宽?
4.能否说模块相当于电路图中的功能模块,端口相当于功能模块的引脚
5.模块的功能描述可以由哪几类语句或语句块构成?他们出现的顺序会不会影响功能的描述?
6.这几类描述中哪一种直接与电路结构有关?
7.最基本的verilog变量类型有几种?
8.reg型与wire型的差异是什么
9.由连续赋值语句assign 赋值的变量能否是reg类型的?
10.在always模块中被赋值的变量能否是wire类型?如果不是那必须是什么?他们表示的一定是实际的寄存器吗?
11.参数类型的变量有什么作用
12.verilog语法规定的参数传递和重新定义功能有什么直接的应用价值?
13.逻辑比较运算符<=与非阻塞赋值<=的表示完全一样,为什么verilog在语句解释以及编译时不会搞错?
14.是否可以说实例引用的描述实际上就是严格意义上的电路结构的描述?
答:
1.两部分,分别是描述接口和描述逻辑功能。或者说四个部分,分别是端口定义,i/o说明,内部信号声明与功能定义。
2.input output inout
3.如果不说明信号的位宽就会在信号发生改变时产生错误,不容易看出接收到的信号的数据位宽,就很难进行数据处理
4.可以
5.assign语句,用实例原件,用always块;出现顺序不会影响到功能的描述。
6.用实例原件与电路结构直接相关;
7.基本变量类型:reg型以及wire型 memory型;其中reg型数据是一个操作数时,他的值只能表示为一个无符号数,既正值; reg [ 宽] mema [ 深 ]
基本数据类型:reg wire integer(整数,可综合) parameter(定义参数 修改参数时可使用defparam 和 例如 Decode #(4,0)D1 (A4, F16) 引用并定义参数);
常量不说明位数时默认是32位
8.一个表示连线型变量,一个表示寄存器型变量;根本差别在于reg型有个寄存器可以来存放改变值,这个值只有在变量发生改变时才会改变,否则保持原来的值不变,而wire型变量的值是不确定的值
9.由连续赋值语句assign 赋值的变量可以是reg类型的
10.用always赋值的语句一定是寄存器类型,他们表述不一定是实际的寄存器
11.提高程序的可读性以及可维护性
12.可以用于定义延迟时间和变量宽度
13.逻辑比较时,<=两边时两个操作数,此时是双目操作符;而在非阻塞赋值时,只有右边是操作数,是单目运算符;
14.不可以说实例引用的描述实际上就是严格意义上的电路结构的描述,还有点差距。