HDLBits练习汇总-03-Verilog语言--模块层次结构(一)

简介: HDLBits练习汇总-03-Verilog语言--模块层次结构

Module


到目前为止,您已经熟悉了模块,它是一种通过输入和输出端口与外部交互的电路。更大、更复杂的电路是由更小的模块组成更大的模块,并将其他部分(如赋值语句和always块)连接在一起来构建的。这形成了一个层次结构,因为模块可以包含其他模块的实例。

下图显示了一个非常简单的带有子模块的电路。在本练习中,创建模块mod_a的一个实例,然后将模块的三个引脚(in1、in2和out)连接到顶层模块的三个端口(连接a、b和out)。模块mod_a是为你提供的-你必须实例化它。

连接模块时,只有模块上的端口是重要的。您不需要知道模块内部的代码。模块mod_a的代码如下所示:

image.png

module mod_a ( input in1, input in2, output out );
    // Module body
endmodule

模块的层次结构是通过在另一个模块中实例化一个模块来创建的,只要所有使用的模块都属于同一个项目(这样编译器就知道在哪里可以找到这个模块)。一个模块的代码不写入另一个模块的内部(不同模块的代码不嵌套)。

您可以通过端口名称或端口位置将信号连接到模块。对于额外的练习,两种方法都试试。

image.png

连接信号到模块端口有两种常用的方法将导线连接到端口:按位置按名称

按位置连接


按照位置将连线连接到端口的语法应该很熟悉,因为它使用类似于c的语法。当实例化一个模块时,端口根据模块的声明从左到右连接。

例如:Mod_a instance1 (wa, wb, wc);

这将实例化一个mod_a类型的模块,并给它一个实例名“instance1”,然后将信号wa(新模块外部)连接到新模块的第一个端口(in1), wb连接到第二个端口(in2), wc连接到第三个端口(out)。这种语法的一个缺点是,如果模块的端口列表改变了,模块的所有实例化也需要被找到并改变以匹配新的模块。

按名字连接


通过名称将信号连接到模块的端口,这样即使端口列表发生变化,线路也能保持正确连接。但是,这种语法更加冗长。

mod_a instance2 (.out (wc) .in1 (wa) .in2 (wb));

上面这行代码实例化了一个名为“instance2”的mod_a类型的模块,然后将信号wa(模块外部)连接到名为in1的端口,wb连接到名为in2的端口,wc连接到名为out的端口。请注意,端口的顺序在这里是不相关的,因为无论它在子模块的端口列表中的位置如何,都将连接到正确的名称。还要注意此语法中紧邻端口名的句点。

module top_module ( input a, input b, output out );

通过端口名称或端口位置将信号连接到模块。

答案:

通过位置连接

通过名字连接

module top_module ( input a, input b, output out );
    mod_a instance2 ( 
        .out(out), 
        .in1(a), 
        .in2(b) 
    );
endmodule

按位置进行模块连接


这个问题类似于上一个。给定一个名为mod_a的模块,该模块按此顺序有2个输出和4个输入。您必须按位置将6个端口连接到顶级模块的端口out1、out2、a、b、c和d,按此顺序。

你会得到以下模块:

module mod_a ( output, output, input, input, input, input );

image.png

Module Declaration

module top_module ( 
    input a, 
    input b, 
    input c,
    input d,
    output out1,
    output out2
);

答案:

module top_module ( 
    input a, 
    input b, 
    input c,
    input d,
    output out1,
    output out2
);
    mod_a inst1_mod_a( out1, out2, a, b, c, d );
endmodule

按名字进行模块连接


这个问题类似前两个。给定一个名为mod_a的模块,该模块按一定顺序有2个输出和4个输入。你必须将这6个端口按名称连接到你的顶级模块的端口:

image.png

你会得到以下模块:

module mod_a ( output out1, output out2, input in1, input in2, input in3, input in4);

image.png

Module Declaration

module top_module ( 
    input a, 
    input b, 
    input c,
    input d,
    output out1,
    output out2
);

答案:

module top_module ( 
    input a, 
    input b, 
    input c,
    input d,
    output out1,
    output out2
);
    mod_a u_mod_a( 
        .out1(out1), 
        .out2(out2),
        .in1(a), 
        .in2(b),
        .in3(c), 
        .in4(d)
    );
endmodule

Module shift(移位寄存器)


你会得到一个模块my_dff,它有两个输入和一个输出(它实现了D触发器)。实例化它们中的三个,然后将它们链在一起,生成一个长度为3的移位寄存器。clk端口需要连接到所有实例。

 module my_dff ( input clk, input d, output q );

注意,要建立内部连接,需要声明一些连接。在命名连线和模块实例时要小心:名称必须唯一。

image.png

Module Declaration

module top_module ( input clk, input d, output q );

答案:

按位置:

module top_module ( input clk, input d, output q );
    wire q1,q2;
    my_dff u1_my_dff( clk, d, q1 );
    my_dff u2_my_dff( clk, q1, q2 );
    my_dff u3_my_dff( clk, q2, q );
endmodule

按名字:

module top_module ( input clk, input d, output q );
    wire q1,q2;
    my_dff u1_my_dff( .clk(clk), .d(d),  .q(q1) );
    my_dff u2_my_dff( .clk(clk), .d(q1), .q(q2) );
    my_dff u3_my_dff( .clk(clk), .d(q2), .q(q ));
endmodule
目录
相关文章
|
6月前
|
存储 编译器 索引
Verilog基础【一】
Verilog基础【一】
214 0
|
存储 开发工具 异构计算
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(下)
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑
912 0
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(下)
|
5月前
|
开发框架 监控 .NET
【学习笔记】Verilog之三:行为建模方法
Verilog是一种硬件描述语言,用于模拟电子系统的结构和行为。行为建模是Verilog的一种方法,分为数据流行为建模和顺序行为建模。 数据流行为建模主要使用`assign`语句,它描述了电路的功能而不涉及具体结构。连续赋值语句(`assign`)用于给线网分配值,当右端表达式发生变化时,新值会立即赋给线网。此外,还有时延的概念,可以指定赋值或事件发生的延迟时间。
|
5月前
|
C语言
【学习笔记】Verilog之四:结构建模方法
Verilog 提供两种建模方法:行为建模和结构建模。行为建模专注于电路功能描述,类似高级编程语言,不涉及底层实现。数据流建模使用 `assign` 进行连续赋值,适合描述组合逻辑。线网可以在声明时直接赋值。顺序行为建模通过 `initial` 和 `always` 语句实现,`initial` 用于一次性初始化,`always` 则用于响应特定事件的重复执行。时序控制包括时延和事件控制,用于精确控制电路行为。阻塞和非阻塞赋值决定了语句执行的顺序和并发性。过程性连续赋值如 `assign-deassign` 和 `force-release` 提供了更多灵活性。
|
6月前
|
存储 人工智能 安全
Verilog基础【二】
Verilog基础【二】
203 1
|
6月前
|
存储 数据安全/隐私保护 芯片
基于VHDL语言的8路彩灯控制器的设计_kaic
基于VHDL语言的8路彩灯控制器的设计_kaic
|
开发工具 芯片 异构计算
Verilog 设计方法
Verilog 的设计多采用自上而下的设计方法(top-down)。即先定义顶层模块功能,进而分析要构成顶层模块的必要子模块;然后进一步对各个模块进行分解、设计,直到到达无法进一步分解的底层功能块。这样,可以把一个较大的系统,细化成多个小系统,从时间、工作量上分配给更多的人员去设计,从而提高了设计速度,缩短了开发周期。
166 1
|
异构计算
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(中)
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑
302 0
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(中)
|
算法 芯片 计算机视觉
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(上)
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑
883 0
第三章 硬件描述语言verilog(二) 功能描述-组合逻辑(上)
下一篇
无影云桌面