Verilog-层次化设计(全加器)

理论学习

层次化设计

数字电路中根据模块层次不同有两种基本的结构设计方法:自底向上、自顶向下的设计方法 。

自底向上(Buttom-Up)

一种传统设计方法,对设计进行逐次划分的过程是从存在的基本单元出发的,由基本单元构建高层单元,依次向上,直至构建系统。

自上而下(Top-Down)

从系统级开始,把系统分为基本单元,再对模块进行分解,一直向下,直到可以用EDA元件库中的元件来实现为止。

实际设计中两种方法混合使用,两种工作同时进行,在中间会和

实战演练

层次化框图

在这里插入图片描述

描述

顶层模块:full_adder.v

module  full_adder
(
    input   wire    in_1,
    input   wire    in_2,
    input   wire    cin,

    output  wire    sum,
    output  wire    count
);

wire    h0_sum;
wire    h0_count;
wire    h1_count;

half_adder  half_adder_inst0
(
	.in_1(in_1),
    .in_2(in_2),

    .sum(h0_sum),
    .count(h0_count)
); 

half_adder  half_adder_inst1
(
	.in_1(h0_sum),
    .in_2(cin),

    .sum(sum),
    .count(h1_count)
); 

assign  count = h0_count|h1_count;

endmodule

顶层模块实例化的半加器half_adder

module	half_adder
(
	input	wire			in_1,
	input	wire			in_2,

	output	wire			sum,
	output	wire			count
);

assign	{
    
    count,sum} = in_1 + in_2;

endmodule

TestBench:

`timescale 1ns/1ns
module  full_adder_tb();

reg     in_1;
reg     in_2;
reg     cin;

wire    sum;
wire    count;

initial
    begin   
        in_1    <= 1'b0;
        in_2    <= 1'b0;
        cin     <= 1'b0;
    end

initial
    begin
        $timeformat(-9,0,"ns",6);
        $monitor("@time %t:in_1=%b,in_2=%b,cin=%b,sum=%b,count=%b",$time,in_1,in_2,cin,sum,count);
    end

always  #10 in_1 <= {
    
    $random} % 2;
always  #10 in_2 <= {
    
    $random} % 2;
always  #10 cin  <= {
    
    $random} % 2;

full_adder  full_adder_inst
(
       .in_1(in_1),
       .in_2(in_2),
       .cin(cin),

       .sum(sum),
       .count(count)
);
endmodule

RTL综合:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/sllksllk/article/details/125780808