1.模块的基本组成部分有哪些?哪几个部分必须出现?
答:模块的基本组成部分包括:关键字module,模块名、端口列表、端口声明和可选的参数声明,模块内部还有5个基本组成部分是:变量声明、数据流语句、低层模块实例、行为语句块以及任务和函数。
在模块的所有组成部分中,只有module、模块名和endmodule必须出现,其他部分都是可选的,用户可以根据设计的需要随意选用。
2.一个不与外部环境交互的模块是否有端口?模块定义中是否有端口列表?
答:严格意义上讲,一个模块如果与外界没有任何交互,那么自然是不需要有而且是不可能有端口的。在没有端口的情况下,端口列表自然也是不存在的。
3.一个4位并行移位寄存器的I/O引脚如下图所示。写出模块shift_reg的定义,只需写出端口
列表和端口定义,不必写出模块的内部结构。
reg_in [3:0]
移位 寄存器 shift_reg (4位) reg_out [3:0]
clock
答:模块代码如下:
module shift_reg(clock,reg_in,reg_out); input clock; input [3:0] reg_in;
output [3:0] reg_out;
//********XXXXXXX**************
endmodule
4.定义一个顶层模块stimulus,在其中声明reg变量REG_IN(4位)和CLK(1位)以及wire
变量REG_OUT(4位)。在其中调用(实例引用)模块shift_reg,实例名为sr1,使用顺序端口连接。 答:模块代码如下 module stimulus(); reg CLOCK; reg [3:0] REG_IN; wire [3:0] REG_OUT;
//*******connect in order************ shift_reg sr1(CLOCK,REG_IN,REG_OUT);
endmodule
32
Verilog HDL数字设计与综合(第二版)
5.将上题的端口连接方法改为命名连接。 答:模块代码如下 module stimulus(); reg CLOCK; reg [3:0] REG_IN; wire [3:0] REG_OUT;
//*******connect by name************
shift_reg sr1(.clock(CLOCK),.reg_in(REG_IN),.reg_out(REG_OUT));
endmodule
6.写出REG_IN,CLK和REG_OUT的层次名。 答:分别是:stimulus.REG_IN stimulus.CLK stimulus.REG_OUT
7.写出模块实例sr1及其端口clock和reg_in的层次名。 答:分别是:stimulus.sr1 stimulus.sr1.clock stimulus.sr1.reg_in
stimulus.sr1.reg_out