verilog设计加法器

概述

本文利用了硬件行为描述、数据流描述、结构描述三种方法分别写了几个加法器

一位半加法器

即两个一位的二进制数相加,得到其正常相加的结果的最后一位。

仿真波形图

硬件行为描述

设计文件

12345678910111213141516171819202122
module bjqxw(a,b,sum,cout);    input a,b;    output sum,cout;    reg sum,cout;    always @(a or b)        begin            case({a,b})                2‘b00:begin                    sum=0;cout=0;                    end                2‘b01:begin                    sum=1;cout=0;                    end                2‘b10:begin                    sum=1;cout=0;                    end                2‘b11:begin                    sum=0;cout=1;                    end             endcase        endendmodule

仿真结构图

仿真文件

12345678910
module bjqxwsimu;    reg a,b;    wire sum,cout;    bjqxw sl(a,b,sum,cout);    initial        begin            a=0;b=0;        end    always #10 {a,b}={a,b}+1;endmodule

结构描述

设计文件

123456
module add(a,b,sum,cout);    input a,b;    output sum,cout;    xor(sum,a,b);    and(cout,a,b);endmodule

仿真结构图

仿真文件

12345678910
module add1;    reg a,b;    wire sum,cout;    add ul(a,b,sum,cout);    initial    begin        a=0;b=0;    end    always #10 {a,b}={a,b}+1;endmodule

数据流描述

设计文件

1234567
endmodulemodule add3(a,b,sum,cout);    input a,b;    output sum,cout;    wire sum,cout;    assign sum=a^b;    assign cout=a&b;endmodule

仿真结构图

仿真文件

12345678910111213141516
module add1;    reg ain,bin;    reg clk;    wire sum1,cout1;    initial    begin        ain=0;bin=0;clk=0;    end    always #50 clk=~clk;    always @(posedge clk)    begin        ain={$random}%2;        #3 bin={$random}%2;    end    add3 ul(.a(ain),.b(bin),.sum(sum1),.cout(cout1));endmodule

一位全加器

仿真波图

硬件行为描述

设计文件

12345678910111213141516171819202122232425262728293031323334
module qjq(a,b,cin,sum,cout);    input a,b,cin;    output sum,cout;    reg sum,cout;    always @(a or b or cin)    begin    case ({cin,a,b})        3‘b000:begin            sum=0;cout=0;        end        3‘b001:begin            sum=1;cout=0;        end        3‘b010:begin            sum=1;cout=0;        end       3‘b011:begin            sum=0;cout=1;        end        3‘b100:begin            sum=1;cout=0;        end        3‘b101:begin            sum=0;cout=1;        end        3‘b110:begin            sum=0;cout=1;        end        3‘b111:begin            sum=1;cout=1;        end      endcase      endendmodule

仿真结构图

仿真文件

12345678910
module qjq1;    reg a,b,cin;    wire sum,cout;    qjq ul(a,b,cin,sum,cout);    initial    begin        a=0;b=0;cin=0;    end    always #10 {a,b,cin}={a,b,cin}+1;endmodule

结构描述

设计文件

12345678910
module qiq(a,b,cin,sum,cout);    input a,b,cin;    output sum,cout;    wire q1,q2,q3;    xor(sum,a,b,cin);    or(q1,a,b);    or(q2,b,cin);    or(q3,a,cin);    and(cout,q1,q2,q3);endmodule

仿真结构图

仿真文件

12345678910
module qjq1;    reg a,b,cin;    wire sum,cout;    qiq ul(a,b,cin,sum,cout);    initial    begin        a=0;b=0;cin=0;    end    always #10 {a,b,cin}={a,b,cin}+1;endmodule

数据流描述

设计文件

12345
module qjq(a,b,cin,sum,cout);    input a,b,cin;    output sum,cout;    assign {sum,cout}=a+b+cin;endmodule

仿真结构图

仿真文件

12345678910
module qjqsimu;    reg a,b,cin;    wire sum,cout;    qjq sl(a,b,cin,sum,cout);    initial        begin            a=0;b=0;cin=a&b;        end    always #20 {a,b}={a,b}+1;endmodule

四位全加器

数据流描述

设计文件

1234567
module qjq(a,b,cin,sum,cout);    input [3:0] a,b;    input cin;    output [3:0] sum;    output cout;    assign {sum,cout}=a+b+cin;endmodule

仿真结构图

仿真文件

123456789101112
module qjqsimu;    reg [3:0] a,b;    reg cin;    wire [3:0] sum;    wire cout;    qjq sl(a,b,cin,sum,cout);    initial        begin            a=4‘b0000;b=4‘b0000;cin=0;        end    always #20 {a,b}={a,b}+4‘b0001;endmodule

仿真波图

ps:将上述输入输出的字段长度对应修改,可得到相应数位的全加器数据流描述

原文地址:https://www.cnblogs.com/mxdon/p/11324582.html

时间: 2024-10-18 11:51:37

verilog设计加法器的相关文章

分频器的verilog设计

笔者最近由于实验室老师的任务安排重新又看了一下分频器的verilog实现,现总结如下,待以后查看之用(重点是查看计数器计到哪个值clk_out进行状态翻转) 1.偶数分频占空比为50% 其实质还是一个N计数器模块来实现,首先要有复位信号,这个复位信号的作用就是使计数器和分频输出clk_out刚开始有一个复位值,其次就是计数翻转了,注意这里是计到哪个值翻转,首先刚开始时reset复位时计数器赋初值为0,然后计数器计到N/2-1时进行clk-out状态翻转,即clk_out<=~clk_out,此时

Verilog设计中的锁存器

问题: 什么是锁存器? 什么时候出现锁存器? 锁存器对电路有什么影响? 如何在FPGA设计中避免锁存器? 在FPGA设计中应该避免锁存器.实际上,锁存器与D触发器实现的逻辑功能基本相同,都有暂存数据的功能.但如果两者都由与非门搭建的话,锁存器耗用的逻辑资源要比D触发器少(D触发器需要12个MOS管,锁存器只需6个MOS管),锁存器的集成度更高.所以在的ASIC设计中会用到锁存器.但锁存器对毛刺敏感,无异步复位端,不能让芯片在上电时处在确定的状态:另外,锁存器会使静态时序分析变得很复杂,不利于设计

基于basys2驱动LCDQC12864B的verilog设计图片显示

前言 在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA学习交流群里问问题的时候,被前辈指教,说给我最好的指教便是别在玩这个了,多看看关于FPGA方面的书籍,比做这个单片机做的东西价值强多了.现在想来确实,自从学习FPGA以来,看过的书没有多少,只是想做个什么了,就在网上找找例程,照抄下来,把算法推理一遍,下个板子实现了,便以为自己会了懂了,要是自己在写一个便问题百出.那么菜鸟始终是菜鸟.自己根本没有掌握FPGA的设计思想和优势,

全数字锁相环(PLL)的原理简介以及verilog设计代码

随着数字电路技术的发展,数字锁相环在调制解调.频率合成.FM 立体声解码.彩色副载波同步.图象处理等各个方面得到了广泛的应用.数字锁相环不仅吸收了数字电路可靠性高.体积小.价格低等优点,还解决了模拟锁相环的直流零点漂移.器件饱和及易受电源和环境温度变化等缺点,此外还具有对离散样值的实时处理能力,已成为锁相技术发展的方向. 所谓数字PLL,就是指应用于数字系统的PLL,也就是说数字PLL中的各个模块都是以数字器件来实现的,是一个数字的电路. 数字锁相环的优点是电路最简单有效,可采用没有压控的晶振,

【CPU微架构设计】利用Verilog设计基于饱和计数器和BTB的分支预测器

在基于流水线(pipeline)的微处理器中,分支预测单元(Branch Predictor Unit)是一个重要的功能部件,它负责收集和分析分支/跳转指令的参数和执行结果,当处理新的分支/跳转指令时,BPU将根据已有的统计结果和当前分支跳转指令的参数,预测其执行结果,为流水线取指提供决策依据,进而提高流水线效率. 下面讨论提出分支预测机制的主要原因和实际意义: 在流水线处理分支跳转指令时,目标地址往往需要推迟到指令的执行阶段才能运算得出,在此之前处理器无法及时得知下一条指令的取指地址,因此无法

verilog设计十进制计数器(含进位位)

十进制计数器: 设计要求: 1.每当计数器值为4'b001时,自动回到4'b0000 2.每个时钟沿计数器值加1 3.进位输出carry应该与4'b1001同周期输出 4.异步复位 module cnt10 ( clk, rst_n, carry, cnt ); input clk, rst_n; output carry; output [3:0] cnt; reg carry; reg [3:0] cnt; always @( posedge clk or negedge rst_n ) b

Verilog代码可移植性设计(转自特权同学博客http://bbs.ednchina.com/BLOG_ARTICLE_1983188.HTM)

最近开始学习FPGA,之前项目中仅用过parameter,在CrazyBingo的<FPGA设计技巧与案例开发例程详解>中看到使用localparam,以及在366页中简单介绍了下‘define,parameter和localparam的区别.查找特权同学博客发现其曾经讲诉过.文中红色阴影处为文中错误. Verilog代码可移植性设计 1.       参数定义 localparam,实例代码如下: module tm1( clk,rst_n, pout ); input clk; input

对Verilog 初学者比较有用的整理(转自它处)

对Verilog 初学者比较有用的整理(转自它处) ******************************************************************************************************************** *作者: Ian11122840    时间: 2010-9-27 09:04                                                                   

ISE 设计、综合及仿真流程

终于指导完全国电设回家了,在家两星期时间里,除了把美食都重新过一遍外,计划做两件事,其中一件事就是学会Xilinx ISE软件.因为实验室都用的Xilinx的fpga芯片,因此要做好准备先学软件操作流程,现记下. 我安装了12.4版本,首先设计: 1.文件-->新建工程,命工程名,注意这个工程名就是文件夹的名字,然后next.选芯片.封装.速度.综合工具.仿真工具.语言等. 2.新建了工程后在工程管理器右键,new source添加文件.如果是verilog设计就选verilog module,