HDLBits答案4-Modules:Hierarchy
2021/10/20 23:13:35
本文主要是介绍HDLBits答案4-Modules:Hierarchy,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
文章目录
- 1. Modules
- 2. Connecting ports by position
- 3.Connecting ports by name
- 4. Three modules
- 5.Modules and vectors
- 6. Add1
- 7. Add2
- 8. Carry-select adder
- 9.Adder-subractor
1. Modules
只要使用的所有模块都同属一个项目,就可以通过在模块内部实例化,来创建模块的层次结构。
两种方式分别是按位置和按名称连接,
按位置调(简洁但不稳,顺序不能乱),按名称调(顺序可变)
按位置:mod_a instance1 (wa, wb, wc )
按名称:mod_a instance2 (.out(wc), .in1(a), .in2(b))
module top_module (input a, input b, output out) mod_a inst1 (a,b,out); //mod_a inst2 (.out(out), .in1(a), .in2(b)); endmodule
2. Connecting ports by position
module top_module ( input a, input b, input c, input d, output out1, output out2); mod_a inst1(out1,out2,a,b,c,d); endmodule
3.Connecting ports by name
module top_module( input a, input b, input c, input d, output out1, output out2); mod_a inst1(.out1(out1), .out2(out2), .in1(a), .in2(b), .in3(c), .in4(d)); endmodule
4. Three modules
已有一个模块my_dff,其中有两个输入和一个输出(D触发器)。实例化三个D触发器然后将它们连接在一起,实现一个长度为3的移位寄存器。clk端口需要连接到所有my_dff实例。
module top_module(input clk, input d, output q); wire w1,w2; my_dff inst1(.clk(clk), .d(d), .q(w1)); my_dff inst2(.clk(clk), .d(w1), .q(w2)); my_dff inst3(.clk(clk), .d(w2), .q(q)); endmodule
5.Modules and vectors
已有一个模块my_dff8,它具有两个输入和一个输出(实现一组8位的D触发器)。实例化其中的三个,然后将它们连接在一起,实现一个长度为3的8位宽移位寄存器。另外,构造一个4-1多路选择器,根据sel[1:0]选择输出值。本质上,sel选择的是延迟输入的周期.
已有模块:module my_dff8 ( input clk, input [7:0] d, output [7:0] q )
module top_module( input clk, input [7:0] d, input [1:0] sel, output [7:0] q); wire [7:0] w1,w2,w3; my_dff8 inst1(.clk(clk), .d(d), .q(w1)); my_dff8 inst2(.clk(clk), .d(w1), .q(w2)); my_dff8 inst3(.clk(clk), .d(w2), .q(w3)); always@(*)begin case(sel) 2'b00:q = d; 2'b01:q = w1; 3'b10:q = w2; 4'b11:q = w3; endcase end endmodule
6. Add1
获得一个add16执行 16 位加法的模块。实例化其中两个以创建 32 位加法器。在从第一个加法器接收进位后,一个 add16 模块计算加法结果的低 16 位,而第二个 add16 模块计算结果的高 16 位。您的 32 位加法器不需要处理进位(假设为 0)或进位(忽略),但内部模块需要处理才能正常工作。
已有模块:module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
module top_module ( input [31:0] a, input [31:0] b, output [31:0] sum); wire [15:0] low_out; wire [15:0] high_out; wire count1,count2; add16 low (a[15:0], b[15:0], 0, low_out, count1); add16 high (a[31:16], b[31:16], count1, high_out, count2); assign sum = {high_out, low_out}; endmodule
7. Add2
在top_module中,实例化两个add16模块(已为您提供),每个add16中实例化16个add1实例(此模块需要您编写)。所以,需要描述两个模块:top_module和add1
已有模块:module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
全加器的逻辑表达式:
sum = a ^ b ^ cin; count = (a&b)|(a&cin)|(b&cin);
module top_module( input [31:0] a, input [31:0] b, input [31:0] sum); wire count; add16 low ( a[15:0], b[15:0], 0, sum[15:0], count ); add16 high ( a[31:16], b[31:16], count, sum[31:16]); endmodule module add1 (input a, input b, input cin, output sum, output cout); assign sum = a ^b ^ cin; assign cout = (a&b)|(a&cin)|(b&cin); endmodule
8. Carry-select adder
已有模块:module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
module top_module( input [31:0] a, input [31:0] b, output [31:0] sum); wire cout; wire [15:0] sum0,sum1; add16 low(a[15:0], b[15:0], 1'b0, sum[15:0], cout); add16 high1(a[31:16], b[31:16], 1'b0, sum0); add16 high2(a[31:16], b[31:16],1'b1, sum1); assign sum[31:16] = count?sum1:sum0; endmodule
9.Adder-subractor
当sub为1时,使用32位的异或门对B进行取反.
异或门也可以看作是可编程的非门,其中一个输入控制是否应该反转另一个.
已有模块:module add16 ( input[15:0] a, input[15:0] b, input cin, output[15:0] sum, output cout );
module top_module ( input [31:0] a, input [31:0] b, input sub, output [31:0] sum); wire carry; wire [31:0] b_n; assign b_n = b ^ {32{sub}}; add16 a0(a[15:0], b_n[15:0], sub, sum[15:0], carry); add16 a1(a[31:16], b_n[31:16], carry, sum[31:16]); endmodule
这篇关于HDLBits答案4-Modules:Hierarchy的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27Excel中实现拖动排序的简单教程
- 2024-11-27Rocket消息队列资料:新手入门指南
- 2024-11-27rocket消息队资料详解与入门指南
- 2024-11-27RocketMQ底层原理资料详解入门教程
- 2024-11-27RocketMQ项目开发资料:新手入门教程
- 2024-11-27RocketMQ项目开发资料详解
- 2024-11-27RocketMQ消息中间件资料入门教程
- 2024-11-27初学者指南:深入了解RocketMQ源码资料
- 2024-11-27Rocket消息队列学习入门指南
- 2024-11-26Rocket消息中间件教程:新手入门详解