HDLBits(1)——Modules:Hierarchy(上)

简介: 目录HDLBits——Modules:Hierarchy问题19 Module将信息连接到端口By positionBy name问题20 Connecting ports by position(Module pos)问题21 Connecting ports by name(Module name)问题22 Three modules(Module shift)问题23 Modules and vectors(Module shift8)问题24 Adder 1(Module add)问题25 Adder 2(Module fadd)问题26 Carry-selec

问题19 Module

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

将信息连接到端口

将物理电线连接到端口有两种常用的方法: by position or by name. 按位置或按名称。

By position

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

mod_a instance1 (wa,wb,wc);

这会实例化一个 mod_a 类型的模块,并给它一个实例名称“instance1”,然后将信号 wa(在新模块外部)连接到新模块的第一个端口(in1),将 wb 连接到第二个端口(in2),然后wc 到第三个端口(out)。

By name

按名称将信号连接到模块的端口可以使电线保持正确连接,即使端口列表发生更改。然而,这种语法更加冗长。

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 );
    mod_a instance2 (.out(out),
                     .in1(a),
                     .in2(b)
                    );
endmodule

问题20 Connecting ports by position(Module pos)

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

您将获得以下模块:

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

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


问题21 Connecting ports by name(Module name)

您将获得一个名为 mod_a 的模块,该模块按某种顺序具有 2 个输出和 4 个输入。您必须按名称将 6 个端口连接到顶层模块的端口:


您将获得以下模块:

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

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


问题22 Three modules(Module shift)

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

提供给你的模块是:

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

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

module top_module ( input clk, input d, output q );
    wire w1_2;
    wire w2_3;
    my_dff dff1(
        .clk(clk),   
        .d(d),
        .q(w1_2)
    );
    my_dff dff2(
        .clk(clk),
        .d(w1_2),
        .q(w2_3)
    );
    my_dff dff3(
        .clk(clk),
        .d(w2_3),
        .q(q)
    );
endmodule


问题23 Modules and vectors(Module shift8)

本练习是 module_shift 的扩展。模块端口不再只是单个引脚,我们现在有带有向量作为端口的模块,您将连接线向量而不是普通线。与 Verilog 中的其他任何地方一样,端口的向量长度不必与连接到它的导线相匹配,但这会导致向量的零填充或截断。本练习不使用向量长度不匹配的连接。

您将获得一个带有两个输入和一个输出的模块 my_dff8(实现一组 8 个 D 触发器)。实例化其中三个,然后将它们链接在一起,形成一个长度为3的8位宽移位寄存器。此外,创建一个4对1多路复用器(未提供),该多路复用器根据sel[1:0]:输入d处、第一个d触发器之后、第二个d触发器之后或第三个d触发器之后的值来选择要输出的内容。(本质上,sel选择延迟输入的周期数,从零到三个时钟周期。)


提供给你的模块是:

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

未提供多路复用器。一种可能的编写方法是在一个带有 case 语句的 always 块中。 (另见:mux9to1v)

module top_module ( 
    input clk,             //clock signal
    input [7:0] d,         //Enter 8 groups of data
    input [1:0] sel,       //2-bit selector
    output [7:0] q         //8-bit output
);
    wire [7:0] w1_1,w1_2,w1_3;   //8-bit output
    my_dff8 my_dff81(
        .clk(clk),
        .d(d),
        .q(w1_1)
    );
    my_dff8 my_dff82(
        .clk(clk),
        .d(w1_1),
        .q(w1_2)
    );
    my_dff8 my_dff83(
        .clk(clk),
        .d(w1_2),
        .q(w1_3)
    );
    always @(*) begin
        case(sel)
            0: begin q <= d; end
            1: begin q <= w1_1; end
            2: begin q <= w1_2; end
            3: begin q <= w1_3; end
    endcase
    end
endmodule


相关文章
|
网络协议 机器人 Python
关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
关于运行robot framework 报错解决方法,ModuleNotFoundError: No module named 'robot'
|
7月前
|
JavaScript 前端开发
ES modules: A cartoon deep-dive
ES modules: A cartoon deep-dive
66 1
|
Python
spyder下报错ModuleNotFoundError: No module named
spyder下报错ModuleNotFoundError: No module named
429 0
codeforces 344B - Simple Molecules
题意就是给出3个原子的化学价,然后组成一个分子,要保证这个分子是稳定的,如果你还记得高中化学知识的话这个很容易理解,然后让你求出1-2 2-3 1-3 号原子之间有几条键, 这里我分别用ta tb tc 表示, 用数学的方法表示出来的话就是a = tc + tb; b = ta+tc; c = ta + tb;可能有多种情况,只要输出一种即可。
43 0
|
异构计算
ModuleNotFoundError: No module named ‘mmcv._ext‘
最近想将mmsegmentation打包成exe进行使用,但是遇到了一个问题,在打包的过程中不会显示报错信息,但是在执行exe程序之后,exe会出现ModuleNotFoundError: No module named 'mmcv._ext'的报错,导致软件崩溃。
1031 0
|
TensorFlow 算法框架/工具 Python
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
成功解决ModuleNotFoundError: No module named '_pywrap_tensorflow_internal'
|
决策智能
运筹优化25:ModuleNotFoundError: No module named ‘docplex‘
运筹优化25:ModuleNotFoundError: No module named ‘docplex‘
运筹优化25:ModuleNotFoundError: No module named ‘docplex‘
|
机器学习/深度学习 算法 安全
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本
1184 0
解决ModuleNotFoundError: No module named ‘dlib‘问题-提供3.7x与3.9两个版本
HDLBits(1)——Modules:Hierarchy(下)
目录 HDLBits——Modules:Hierarchy 问题19 Module 将信息连接到端口 By position By name 问题20 Connecting ports by position(Module pos) 问题21 Connecting ports by name(Module name) 问题22 Three modules(Module shift) 问题23 Modules and vectors(Module shift8) 问题24 Adder 1(Module add) 问题25 Adder 2(Module fadd) 问题26 Carry-selec
132 0
HDLBits(1)——Modules:Hierarchy(下)
HDLBits(1)——Modules:Hierarchy(中)
目录 HDLBits——Modules:Hierarchy 问题19 Module 将信息连接到端口 By position By name 问题20 Connecting ports by position(Module pos) 问题21 Connecting ports by name(Module name) 问题22 Three modules(Module shift) 问题23 Modules and vectors(Module shift8) 问题24 Adder 1(Module add) 问题25 Adder 2(Module fadd) 问题26 Carry-selec
117 0
HDLBits(1)——Modules:Hierarchy(中)