首页 Verilog 正文

层次化设计

yummy头像 yummy Verilog 2022-04-01 21:04:43 0 224
导读:数字电路中根据模块层次不同有两种基本的结构设计方法:自底向上的设计方法和自顶向下的设计方法。自底向上自底向上的设计是一种传统的设计方法,对设计进行逐次划分的过程是存在的基本单元出发...

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

自底向上

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

自顶向下

从系统级开始,把系统分为基本单元,然后再把每个单元划分为下一层次的基本单元,一直这样做下去,直到直接可以用EDA元件库的原件来实现为止。

实验实现全加器

实验框图

image.png

代码部分

// Filename﹕ full_adder.v
// Author﹕YMY
// Description﹕全加器模块
// Calledby﹕/
// RevisionHistory﹕22-04-01
// Revision1.0
// Email﹕
// Company﹕  
// Copyright(c) YMY, All right reserved
module full_adder(
    input  wire   in_1   , //输入到全加器信号1
    input  wire   in_2   , //输入到全加器信号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    ), //输入信号1
    . in_2          (in_2    ), //输入信号2
 
    . sum           (h0_sum  ), //结果位
    . count         (h0_count)  //进位
);

half_adder      half_adder_inst1
(
    . in_1          (h0_sum  ), //输入信号1
    . in_2          (cin     ), //输入信号2
 
    . sum           (sum     ), //结果位
    . count         (h1_count)  //进位
);

assign count = (h0_count | h1_count);//两个半加器只要有一个进位,全加器就进位

endmodule

测试代码

// Filename﹕ full_adder.v
// Author﹕YMY
// Description﹕全加器模块
// Calledby﹕/
// RevisionHistory﹕22-04-01
// Revision1.0
// Email﹕
// Company﹕  
// Copyright(c) YMY, All right reserved
`timescale 1ns/1ns
module  tb_full_adder();
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

//产生随机数
always #10 in_1 = {$random}%2;
always #10 in_2 = {$random}%2;
always #10 cin  = {$random}%2;

initial begin
    //设置时间格式的系统函数
    $timeformat(-9,0,"ns",6);
    //检测打印函数
    $monitor("@time,in_1=%b,in_2=%b,cin=%b,sum=%b,count=%b",$time,in_1,in_2,cin,sum,count);
end

full_adder    full_adder_inst
(
    . in_1                (in_1 ), //输入到全加器信号1
    . in_2                (in_2 ), //输入到全加器信号2
    . cin                 (cin  ), //输入到全加器进位信号

    . sum                 (sum  ), //输出结果位
    . count               (count) //输出进位
);
endmodule

仿真波形

image.png

本文地址:https://xn--zqqs03dbu6a.cn/?id=17
若非特殊说明,文章均属本站原创,转载请注明原链接。

欢迎 发表评论:

标签列表

退出请按Esc键