跳到主要内容

1.3.5 模块和向量

本练习是“1.3.4 module_shift”的扩展。与之前模块端口仅为单个引脚不同,现在我们有了端口为向量的模块,您需要将向量线(wire vectors)连接到这些端口上,而非单纯的导线。与Verilog中的其他地方一样,端口的向量长度不必与连接到它的导线向量长度相匹配,但这会导致向量的高位补零或截断。本练习不涉及向量长度不匹配的连接。

您将获得一个名为my_dff8的模块,该模块有两个输入和一个输出(实现了一组8个D触发器)。需要实例化三个这样的模块,并将它们串联起来,以创建一个长度为3的8位宽移位寄存器。此外,创建一个4选1的多路复用器(未提供),根据sel[1:0]的值选择输出内容:直接从输入d输出,或经过第一个、第二个、第三个D触发器之后的输出。(实质上,sel选择输入延迟的周期数,从零到三个时钟周期。)

提供的模块如下所示:

The module provided to you is: module my_dff8 ( input clk, input [7:0] d, output [7:0] q );

多路复用器并未提供。实现多路复用器的一种可能方式是在一个always块内部使用case语句。(参见:2.1.2 第三小节9对1多路复用器)

alt text

模块声明

module top_module ( 
input clk,
input [7:0] d,
input [1:0] sel,
output [7:0] q
);

做题区