HDLBits (24) — 模块和向量
本题链接:
https://hdlbits.01xz.net/wiki/Module_shift8
此练习是module_shift的扩展。现在端口对应的不再是单个引脚,而是向量。与Verilog中的其他地方一样,端口的向量长度不必与连接到端口的线网匹配,但这将导致向量的缺位由零填充或纵横化。此练习不与端口长度不匹配的向量连接。
您将获得一个模块my_dff8,该模块具有两个输入和一个输出(可以实现8 D触发器)。实例化其中三个,然后将它们链接在一起,形成一个长度为3的8位宽移位寄存器。此外,需要创建一个4:1多路复用器(未提供),该多路复用器根据sel[1:0]:选择输出内容。在第一个,第二个和第三个D触发器都会输入D的值。(本质上,sel选择延迟输入的周期数,从零到三个时钟周期。)
你被提供了以下模块:
module my_dff8 ( input clk, input [7:0] d, output [7:0] q );
这里没有提供多路复用器。还有一种可行的编写方法是在always块中使用case语句。(参见 mux9to1v)


题目

答案

输出波形


模块是 Verilog 中基本单元的定义形式,是与外界交互的接口。
模块格式定义如下:
模块定义必须以关键字 module 开始,以关键字 endmodule 结束。
模块名,端口信号,端口声明和可选的参数声明等,出现在设计使用的 Verilog 语句(图中 Declarations_and_Statements)之前。
模块内部有可选的 5 部分组成,分别是变量声明,数据流语句,行为级语句,低层模块例化及任务和函数,如下图表示。这 5 部分出现顺序、出现位置都是任意的。但是,各种变量都应在使用之前声明。变量具体声明的位置不要求,但必须保证在使用之前的位置。

参考内容:
5.1 Verilog 模块与端口 | 菜鸟教程:
https://www.runoob.com/w3cnote/verilog-module-port.html