16位计数器之元件例化的学习

16位全加器

         通过该实验,学习元件例化

1个16位全加器由4个4位全加器构成;

1个4位全加器由4个1位全加器构成;

1位全加器由两个半加器加上一个或门构成;

一个半加器由门级电路构成。

如下图:

顶层文件:

第二层:1个16位全加器由4个4位全加器构成;

第三层:1个4位全加器由4个1位全加器构成;

第四层:1位全加器由两个半加器加上一个或门构成;

第五层:一个半加器由门级电路构成


A


B


Sum


C_out


0


0


0


0


0


1


1


0


1


0


1


0


1


1


0


1

门级电路如下:

代码部分:

顶层文件:

//16为全加器

//顶层文件为16为全加器

module add_full_16(a,b,c_in,sum,c_out);

 

    input
[
15:0]a,b;

    input c_in;

    output
[
15:0]sum;

    output c_out;

   

    wire M0_c_out,M1_c_out,M2_c_out;

   

    add_full_4 M0(.a(a[3:0]),.b(b[3:0]),.c_in(c_in),.sum(sum[3:0]),.c_out(M0_c_out));

    add_full_4 M1(.a(a[7:4]),.b(b[7:4]),.c_in(M0_c_out),.sum(sum[7:4]),.c_out(M1_c_out));

    add_full_4 M2(.a(a[11:8]),.b(b[11:8]),.c_in(M1_c_out),.sum(sum[11:8]),.c_out(M2_c_out));

    add_full_4 M3(.a(a[15:12]),.b(b[15:12]),.c_in(M2_c_out),.sum(sum[15:12]),.c_out(c_out));

 

endmodule

 

第二层:

 

//4位全加器,4个4为全加器构成一个16位的全加器

module add_full_4(a,b,c_in,sum,c_out);

 

    input
[
3:0]a,b;

    input c_in;

    output
[
3:0]sum;

    output c_out;

   

    wire B0_c_out,B1_c_out,B2_c_out;

   

    add_full B0(.a(a[0]),.b(b[0]),.c_in(c_in),.sum(sum[0]),.c_out(B0_c_out));

    add_full B1(.a(a[1]),.b(b[1]),.c_in(B0_c_out),.sum(sum[1]),.c_out(B1_c_out));

    add_full B2(.a(a[2]),.b(b[2]),.c_in(B1_c_out),.sum(sum[2]),.c_out(B2_c_out));

    add_full B3(.a(a[3]),.b(b[3]),.c_in(B2_c_out),.sum(sum[3]),.c_out(c_out));

 

endmodule

 

第三层:

//1位全加器

//4个1位全加器构成一个4位全加器

 

module add_full(a,b,c_in,sum,c_out);

 

    input a,b;

    input c_in;

    output sum;

    output c_out;

   

    wire h0_sum,h0_c_out,h1_c_out;

   

    add_half h0(.a(a),.b(b),.sum(h0_sum),.c_out(h0_c_out));

    add_half h1(.a(c_in),.b(h0_sum),.sum(sum),.c_out(h1_c_out));

   

    assign c_out
= h0_c_out | h1_c_out;

   

endmodule

 

 

第四层:

//半加器

//两个半加器加上一个或门构成1位全加器

 

module add_half(a,b,sum,c_out);

 

    input a,b;

    output sum;

    output c_out;

   

    and u0(c_out
,a ,b);

    xor u1(sum
,a ,b);

   

endmodule

 

前仿真代码:

`timescale
1ns/1ns

 

module add_full_16_tb;

   

    reg
[
15:0]a,b;

    reg c_in;

    wire
[
15:0]sum;

    wire c_out;

 

    add_full_16 add_full_16(.a(a),.b(b),.sum(sum),.c_in(c_in),.c_out(c_out));

   

    integer i;

   

    initial
begin

        a =
0;b =0;c_in
=0;

        forever
begin

            for(i=0;i<65536;i=i+1)begin

                #10 a
= i;b
= i;c_in
= 0;

                #10 a
= i;b
= i;c_in
= 1;

            end

        end

    end

 

endmodule

 

仿真图:

时间: 2024-08-29 14:46:03

16位计数器之元件例化的学习的相关文章

实践指南!16位资深行业者教你如何学习使用TensorFlow

首发地址:https://yq.aliyun.com/articles/71257 更多深度文章,请关注:https://yq.aliyun.com/cloud 如何开始学习使用TensorFlow? 相关回答: Harrison Kinsley --PythonProgramming.net的创始人 TensorFlow官方网站有相当多的文档和教程,但这些往往认为读者掌握了一些机器学习和人工智能知识.除了知道ML和AI,你也应该对Python编程语言非常熟练.因此,在开始学习如何使用Tenso

md5 16位二进制与32位字符串相互转换

 密码很多时候都会用 md5保存,并且很多时候都是16位二进制格式的md5,php 里面 md5($str, true) 可以很方便的获取.更多时候md5结果是一组32个字符组成的字符串,其实转换很简单   代码如下: <?php   $str = 'test'; $cm = md5($str); $bm = md5($str, true);   $cstr = implode(unpack('H*', $bm)); $bstr = pack('H*', $cm);     echo 'str:

“时光机器”穿越过去逆向修改老16位程序

    好吧,我承认偶有标题党的意味.     切入正题.有人让我帮忙看一个程序,要求修改一下其中的电话号码.拿到手后发 现这是一个现在不常见的16位程序.应对方的要求将一些敏感信息隐去.     简单的介绍一下破解过程吧.首先在dosbox加载运行,在ida中修改dos16PE.需 要修改的电话号码是以自画汉字字库的方式显示在屏幕上,在logo和程序功能页面中 都有号码.通过逆向发现两者数字使用的字库不同.破解线索发掘很简单,就是我常 说的最小系统法,也称为最大排除法.通过在.code段代码加

ASP.Net及Asp中的MD5加密-16位32位

asp.net|加密 asp.net引用内容:public string md5(string str,int code){ if(code==16) //16位MD5加密(取32位加密的9~25字符) { return System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str,"MD5").ToLower().Substring(8,16) ; }  else//32位加密 { ret

MASM-两个16位二进制数减法模拟

功能说明:输入两组16位二进制代码模拟两为16位二进制整数,对其求差并以16进制输出. 基本算法:采用补码,模拟二机制减法(加法类同),得到差(补码)转换成原码后,转化成十六进制并输出.16为二进制转换成4为十六进制数的方法是采用:将16位二进制分成4组,每组由连续4位二进制组成,模拟4位二进制到一位十六进制转换,将每组转换成16进制数并输出.详见代码 本代码在MASM.5调试通过 运行界面: 如 binary(YuanMa) num1=1000000000001011 ;被减数原码binary

让16位程序在Windows中正常运行

当你发现某个16位程序使系统出现问题,但自己却又离不开它,那么可以让其在"受保护"的内存区域运行,首先创建该EXE文件的快捷方式(可直接右击该文件,然后选择"发送到→桌面快捷方式"即可),右击新建的快捷方式,接着单击"属性"打开其属性窗口,然后单击"快捷方式"选项卡,勾选"在单独的内存空间中运行".这样就可以使16位程序与其他进程和平相处,而不产生冲突. 尽管Windows 2000/XP经过上面的调整可以

如何让Windows XP兼容16位DOS程序

虽然Windows XP提供了一个兼容向导来方便我们运行那些古老的程序,但是使用起来并不得心应手,比如现在不少学校还在使用的Turbo C,在XP中运行常会花屏.这时,我们就可以用start命令来解决了. 在Windows安装目录下的Windows\command文件夹里,有这样一个DOS程序start.exe,它是一个在Windows状态下调用DOS程序的工具,可以直接在DOS提示符下使用.通过使用发现,巧妙应用它,可以大大方便我们的日常工作. 命令格式为:Start/seperate e:\

win7系统怎样将显示器由32位改为16位?

  win7系统怎样将显示器由32位改为16位? 1.第一步:右键鼠标桌面-屏幕分辨率 2.第二步:选择如图所示的高级设置. 3.第三步:选择如图所示的"监视器". 4.第四步:选择如图所示的颜色选项,更改自己需要的位数,然后点击确定即可.

php生成16位随机数的代码

  分享一个php生成16位随机数的代码,php生成随机数的二种方法. 方法1 代码如下: <?php $a = mt_rand(10000000,99999999); $b = mt_rand(10000000,99999999); echo $a.$b;   方法2: <?php $a = range(0,9); for($i=0;$i<16;$i++){ $b[] = array_rand($a); } // www.yuju100.com var_dump(join("