作业-基于verilog HDL的八位超前进位加法器

合集下载

用verilog编写的8位扩展超前进位加法器代码

用verilog编写的8位扩展超前进位加法器代码
= Gi + Pi * Gi-1 + Pi * Pi-1 * Gi-2 + ... + Pi * Pi-1 * ... * P1 * G0
+ Pi * Pi-1 * ... * P1 * P0 * C0
Gij = Gi + Pi * Gi-1 + Pi * Pi-1 * Gi-2 + ... + Pi * Pi-1 * ... * Pj+1 * Gj
Pij = Pi * Pi-1 * ... * Pj+1 * Pj;
Gi,i = Gi;
Pi,i = Pi;
***************************************************************************** */
module adder_8bits( s, co, a, b, ci );
assign c[ 5 ] = g04_04 | p04_04 & c[ 4 ];
assign c[ 6 ] = g05_04 | p05_04 & c[ 4 ];
assign c[ 7 ] = g06_06 | p06_06 & c[ 6 ];
assign c[ 8 ] = g07_00 | p07_00 & c[ 0 ];
8位扩展超前进位加法器
/* *****************************************************************************
Ci+1 = Ai * Bi + Bi * Ci + Ci * Ai
= Ai * Bi + ( Ai + Bi ) * Ci

基于verilog的8位加法器设计验证

基于verilog的8位加法器设计验证
#10 a=8'd100;b=8'd215;cin=1'b0;
#10$finish;
end
initial $monitor($time,,"%d + %d + %b = {%b, %d}",a,b,cin,c,sum);
endll
# 0 0 + 0 + 0 = {0, 0}
reg [7:0] a;
reg [7:0] b;
reg cin;
// wires
wire c;
wire [7:0] sum;
// assign statements (if any)
adder_8 i1 (
// port map - connection between master ports and signals/registers
实验名称
专业、年级
学号
姓名
8位加法器设计验证
以下内容由实验指导教师填写(实验内容请以批注的形式批阅)
实验项目完成情况
实验项目成绩
指导教师
时间
年月日
实验二:8位加法器设计验证
一:8位全加器的源程序:
module adder_8(sum,c,a,b,cin);
output[7:0] sum;
output c;
# Time: 50 ns Iteration: 0 Instance: /adder_8_vlg_tst
四:测试波形如下图所示:
(此文档部分内容来源于网络,如有侵权请告知删除,文档可自行编辑修改内容,供参考,感谢您的配合和支持)
.a(a),
.b(b),
.c(c),
.cin(cin),

实验二8位加法器的设计

实验二8位加法器的设计

实验二8位加法器的设计一、实验目的1)学习8位加法器的工作原理2)熟悉MAX+plusII软件的基本使用方法3)熟悉EDA实验开发的基本使用方法4)学习VHDL程序中数据对象,数据类型,顺序语句,并行语句的综合使用二、实验内容设计一个8位加法器电路ADDER8B,分别用2个4位加法器组成,即由两个4位二进制并行加法器级联而成的。

三、实验条件开发软件:MAX+plus II 9.23 Baseline硬件设备:装有windows7的pc机四、实验设计1)系统的原理框架图2)VHDL源程序Adder4b.vhd源代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder4b isport ( c4: in std_logic;a4: in std_logic_vector(3 downto 0);b4:in std_logic_vector(3 downto 0);s4: out std_logic_vector(3 downto 0);co4: out std_logic);end entity adder4b;architecture art of adder4b issignal s5:std_logic_vector(4 downto 0); signal a5,b5: std_logic_vector(4 downto 0); begina5<='0'&a4;b5<='0'& b4;s5<=a5+b5+c4;s4<= s5(3 downto 0);co4<=s5(4);end architecture art;Adder8b.vhd源代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity adder8b isport( c8:in std_logic;a8:in std_logic_vector(7 downto 0);b8: in std_logic_vector(7 downto 0);s8: out std_logic_vector(7 downto 0);co8: out std_logic);end entity adder8b ;architecture art of adder8b is component adder4b isport(c4: in std_logic;a4: in std_logic_vector(3 downto 0);b4: in std_logic_vector(3 downto 0);s4: out std_logic_vector(3 downto 0);co4: out std_logic);end component adder4b;signal sc:std_logic;beginu1:adder4bport map(c4=>c8,a4=>a8(3 downto 0),b4=>b8(3 downto 0),s4=>s8(3 downto 0),co4=> sc);u2:adder4bport map(c4=>sc, a4=>a8(7 downto 4),b4=>b8(7 downto 4),s4=>s8(7 downto 4),co4=>co8);end architecture art;3)管脚图五、实验结果及总结系统时序仿真结果从系统仿真结果可以看出,本系统完全符合设计要求,同时从仿真结果可以看出,从输入到输出有一定的延时,在11ns左右,这正是器件延时特征的反映。

Verilog实现的8位超前进位加法器

Verilog实现的8位超前进位加法器

Verilog实现的8位超前进位加法器。

经过modelsim验证正确可用,在DC下综合成功//文件名:add_8.v//模块名:add_8//`timescale 1ns/1nsmodule add_8 ( input [7:0]a, input [7:0]b, input cin, output [7:0] s, output co );wire [7:0]c_tmp;wire [7:0]g;wire [7:0]p;assign co = c_tmp[7];assign g[0] = a[0] & b[0],g[1] = a[1] & b[1],g[2] = a[2] & b[2],g[3] = a[3] & b[3],g[4] = a[4] & b[4],g[5] = a[5] & b[5],g[6] = a[6] & b[6],g[7] = a[7] & b[7];assign p[0] = a[0] | b[0],p[1] = a[1] | b[1],p[2] = a[2] | b[2],p[3] = a[3] | b[3],p[4] = a[4] | b[4],p[5] = a[5] | b[5],p[6] = a[6] | b[6],p[7] = a[7] | b[7];assign c_tmp[0] = g[0] | ( p[0] & cin ),c_tmp[1] = g[1] | ( p[1] & g[0]) | ( p[1] & p[0] & cin),c_tmp[2] = g[2] | ( p[2] & g[1]) | ( p[2] & p[1] & g[0]) | ( p[2] & p[1] & p[0] & cin),c_tmp[3] = g[3] | ( p[3] & g[2]) | ( p[3] & p[2] & g[1]) | ( p[3] & p[2] & p[1] & g[0])| ( p[3] & p[2] & p[1] & p[0] & cin),c_tmp[4] = g[4] | ( p[4] & g[3]) | ( p[4] & p[3] & g[2]) | ( p[4] & p[3] & p[2] & g[1])| ( p[4] & p[3] & p[2] & p[1] & g[0]) | ( p[4] & p[3] & p[2] & p[1] & p[0] &cin),c_tmp[5] = g[5] | ( p[5] & g[4]) | ( p[5] & p[4] & g[3]) | ( p[5] & p[4] & p[3] & g[2])| ( p[5] & p[4] & p[3] & p[2] & g[1]) | ( p[5] & p[4] & p[3] & p[2] & p[1] & g[0])| ( p[5] & p[4] & p[3] & p[2] & p[1] & p[0] & cin),c_tmp[6] = g[6] | ( p[6] & g[5]) | ( p[6] & p[5] & g[4]) | ( p[6] & p[5] & p[4] & g[3])| ( p[6] & p[5] & p[4] & p[3] & g[2]) | ( p[6] & p[5] & p[4] & p[3] & p[2] & g[1])| ( p[6] & p[5] & p[4] & p[3] & p[2] & p[1] & g[0])| ( p[6] & p[5] & p[4] & p[3] & p[2] & p[1] & p[0] & cin),c_tmp[7] = g[7] | ( p[7] & g[6]) | ( p[7] & p[6] & g[5]) | ( p[7] & p[6] & p[5] & g[4])| ( p[7] & p[6] & p[5] & p[4] & g[3]) | ( p[7] & p[6] & p[5] & p[4] & p[3] & g[2])| ( p[7] & p[6] & p[5] & p[4] & p[3] & p[2] & g[1])| ( p[7] & p[6] & p[5] & p[4] & p[3] & p[2] & p[1] & g[0])| ( p[7] & p[6]& p[5] & p[4] & p[3] & p[2] & p[1] & p[0] & cin);assign s[7:0] = a[7:0] ^ b[7:0] ^{c_tmp[6:0],cin};endmodule。

基于FPGA的八位加法器

基于FPGA的八位加法器

课程实训报告课程名称EDA 技术设计题目基于FPGA的八位加法器院系名称机械电子工程学院专业班级电子信息工程2014级姓名学号成绩指导教师2016年12月目录1、设计目的、要求.................................................................................................................... - 2 -1.1、设计目的.................................................................................................................... - 2 -1.2、系统设计要求............................................................................................................ - 2 -2、设计原理及相关硬件............................................................................................................ - 3 -2.1、系统设计方案及原理................................................................................................ - 3 -2.2、硬件原理.................................................................................................................... - 3 -3、主要模块设计........................................................................................................................ - 5 -3.1、模块Key-led............................................................................................................. - 5 -3.2、模块Adder................................................................................................................. - 6 -4、系统编译及仿真过程............................................................................................................ - 6 -4.1、系统编译.................................................................................................................... - 6 -4.2、仿真............................................................................................................................ - 7 -5、硬件验证过程和分析............................................................................................................ - 8 -5.1、引脚设置和保护........................................................................................................ - 8 -5.2、硬件下载.................................................................................................................... - 8 -5.3、硬件测试结果及分析................................................................................................ - 9 -6、实验参考程序........................................................................................................................ - 9 -6.1、模块key_led............................................................................................................. - 9 -6.2、模块adder4b........................................................................................................... - 13 -6.3、模块adder8b........................................................................................................... - 14 -总结 ......................................................................................................................................... - 15 -参考文献...................................................................................................................................... - 0 -附录 ........................................................................................................................................... - 1 -1、设计目的、要求1.1、设计目的(1)了解并掌握一般设计方法,具备初步的独立设计能力;(2)掌握用VerilogHDL语言程序的基本技能;(3)提高综合运用所学的理论知识独立分析和解决问题的能力;(4)进一步掌握EDA技术的开发流程;(5)学习较复杂的数字系统设计方法。

VerilogHDL简单计算器设计

VerilogHDL简单计算器设计

实用文档目录第一章设计目的及任务要求 (1)1.1 设计目的 (1)1.2 设计任务 (1)1.3 课设要求 (1)第二章设计思路 (2)2.1 设计总体框图 (2)2.2 设计原理 (2)2.2.1 计算其原理 (2)2.2.2 数码显示原理 (2)2.2.3 八位数码管扫描的原理 (3)第三章设计源程序及分析 (4)3.1 计算器模块 (4)3.1.1 计算器源程序 (4)3.1.2 计算器程序分析 (4)3.2 数码管显示部分 (5)3.2.1 数码管显示源程序 (5)3.2.2 数码管显示程序分析 (5)3.3 循环扫描模块 (6)3.3.1 循环扫描程序 (6)3.3.2 循环程序分析 (6)3.4 总程序及其分析 (7)第四章时序仿真和结果验证 (10)4.1 计算器时序仿真及其分析 (10)4.2 数码管时序仿真及分析 (10)4.3 总体时序仿真图 (10)4.4 结果验证 (11)第五章心得体会 (12)第一章设计目的及任务要求1.1 设计目的(1)进一步加强熟练EDA基础知识。

(2)熟练掌握Quartus 6.0软件的使用以及用该软件编程和仿真的全过程。

(3)培养独立思考问题,解决问题的能力以及查阅相关资料和资料的正确使用能力,为明年的毕业设计打下良好的设计基础。

1.2 设计任务设计一个简单计算器,输入为8位二进制数,分别用两位数码管显示,输出的计算结果为16位二进制数,并用四位数码管显示,能够实现+、-、 *、/ 四种运算,其中除法的结果显示分为商和余数两部分,分别用两位数码管显示。

1.3 课设要求(1)说明题目的设计原理和思路、采用方法及设计流程。

(2)系统框图、Verilog语言设计程序或原理图。

(3)对各子模块的功能以及各子模块之间的关系做较详细的描述。

(4)详细说明调试方法和调试过程。

(5)说明测试结果:仿真时序图和结果显示图,并对其进行说明和分析。

第二章设计思路2.1 设计总体框图有分析可知,本次课程设计可以分成五个木块来实现相应的功能,分别是输入模块,计算模块,扫描模块,输出模块以及显示模块。

8位超前进位加法器

8位超前进位加法器

【verilog】8位超前进位加法器2010-12-22 21:16这是我的32位超前进位加法器的一部分。

其中的一个模块,一个8位的超前进位加法器。

我的32位的超前进位加法器是将4个模块再进行超前进位加法实现的。

也就是second level carry-lookahead adder:以下的代码就是上面的block0到block3。

代码://Written by alexyangfox#module eight_bit_unit(A,B,c0,G_level,PG_level,carry,sum);input [7:0] A; //加数Ainput [7:0] B; //加数Binput c0; //输入的进位c0 (Carry 0)output [7:0] sum; //输出和output G_level,PG_level,carry; //产生的极间PG(propagate)和G(generate)//因为我这里想要的是做2级超前进位加法器//一个32位的超前进位加法器由4个八位的超前进位加法器组成//然后四个加法器又被当作独立的模块,四个加法器再超前进位一次形成第二级wirepg0,pg1,pg2,pg3,pg4,pg5,pg6,pg7,g0,g1,g2,g3,g4,g5,g6,g7,c0,c1,c2,c3,c4,c5,c6,c7,c8;wire G_level,PG_level,carry;//全部 PG的计算(propagate)//有的人将PG定义为: PG=A + B//而我在此处使用通常定义: PG = A xor B//由于有这样的关系 A + B = (A xor B) + AB//但是AB已经在Gernerate中:C_n=Generator_(n-1) + Propagate_(n-1)*C_(n-1)//PG 和 G只是用来计算进位数的,所以使用哪种PG的定义并没有影响//在实际电路中,若使用PG=A+B的方案,还可以减少晶体管的使用//well,sth interesting :XOR is not "exclusive or" (nor),it's //"exclusive disjunction or"assign pg0=A[0]^B[0];assign pg1=A[1]^B[1];assign pg2=A[2]^B[2];assign pg3=A[3]^B[3];assign pg4=A[4]^B[4];assign pg5=A[5]^B[5];assign pg6=A[6]^B[6];assign pg7=A[7]^B[7];//计算所有的 Generate (G)assign g0=A[0] & B[0];assign g1=A[1] & B[1];assign g2=A[2] & B[2];assign g3=A[3] & B[3];assign g4=A[4] & B[4];assign g5=A[5] & B[5];assign g6=A[6] & B[6];assign g7=A[7] & B[7];//进位产生器//公式:C_n=Generator_(n-1) + Propagate_(n-1)*C_(n-1)//c1=g0 + pg0*c0assign c1=g0|( pg0 & c0);//c2=g1+ pg1*g0 + pg1*pg0*c0assign c2=g1|( pg1 & g0)|( pg1 & pg0 & c0);//c3=g2+ pg2*g1+ pg2*pg1*g0 + pg2*pg1*pg0*c0assign c3=g2|( pg2 & g1)|( pg2 & pg1 & g0)|( pg2 & pg1 & pg0 & c0);//c4= g3 + pg3*g2+ pg3*pg2*g1+ pg3*pg2*pg1*g0// + pg3*pg2*pg1*pg0*c0assign c4=g3|(pg3 & g2)|(pg3 & pg2 & g1)|( pg3 & pg2 & pg1 & g0)|(pg3 & pg2 & pg1 & pg0 & c0);//c5= g4 + pg4*g3 + pg4*pg3*g2+ pg4*pg3*pg2*g1// + pg4*pg3*pg2*pg1*g0 + pg4*pg3*pg2*pg1*pg0*c0assign c5=g4|( pg4 & g3)|( pg4 & pg3 & g2)|( pg4 & pg3 & pg2 & g1)|( pg4& pg3 & pg2 & pg1 & g0)|( pg4 & pg3 & pg2 & pg1 & pg0 & c0);//c6=g5 + pg5*g4 + pg5*pg4*g3 + pg5*pg4*pg3*g2// + pg5*pg4*pg3*pg2*g1 + pg5*pg4*pg3*pg2*pg1*g0// + pg5*pg4*pg3*pg2*pg1*pg0*c0assign c6=g5|( pg5 & g4)|( pg5 & pg4 & g3)|( pg5 & pg4 & pg3 & g2)|( pg5 & pg4 & pg3 & pg2 & g1)|( pg5 & pg4 & pg3 & pg2 & pg1 & g0)|( pg5 & pg4 & pg3 & pg2 & pg1 & pg0 & c0);//c7=g6 + pg6*g5 + pg6*pg5*g4 + pg6*pg5*pg4*g3 + pg6*pg5*pg4*pg3*g2// + pg6*pg5*pg4*pg3*pg2*g1 + pg6*pg5*pg4*pg3*pg2*pg1*g0// + pg6*pg5*pg4*pg3*pg2*pg1*pg0*c0assign c7=g6|( pg6 & g5)|( pg6 & pg5 & g4)|( pg6 & pg5 & pg4 & g3)|( pg6 & pg5 & pg4 & pg3 & g2)|( pg6 & pg5 & pg4 & pg3 & pg2 & g1)|( pg6 & pg5 & pg4 & pg3 & pg2 & pg1 & g0)|( pg6 & pg5 & pg4 & pg3 & pg2 & pg1 & pg0 & c0);//c8=g7 + pg7*g6 + pg7*pg6*g5 + pg7*pg6*pg5*g4 + pg7*pg6*pg5*pg4*g3 +pg7*pg6*pg5*pg4*pg3*g2// + pg7*pg6*pg5*pg4*pg3*pg2*g1 + pg7*pg6*pg5*pg4*pg3*pg2*pg1*g0//+ pg7*pg6*pg5*pg4*pg3*pg2*pg1*pg0*c0assign c8=g7|(pg7 & g6)|(pg7 & pg6 & g5)|(pg7 & pg6 & pg5 & g4)|(pg7 & pg6 & pg5 & pg4 & g3)|(pg7 & pg6 & pg5 & pg4 & pg3 & g2)|(pg7 & pg6 & pg5 & pg4 & pg3 & pg2 & g1)|(pg7 & pg6 & pg5 & pg4 & pg3 & pg2 & pg1 & g0)|(pg7 & pg6 & pg5 & pg4 & pg3 & pg2 & pg1 & pg0 & c0);//这句写成:c8=G_level|(pg7 & pg6 & pg5 & pg4 & pg3 & pg2 & pg1 & pg0 & c0);会减少器件使用,但是会增加延迟?//极间超前进位信号G_level和PG_level的产生//Actually I am building a two_level carry look ahead adder.//回顾上面C8的计算公式,将它拆解成两部分://C8=G_level + C0*PG_level//于是,我们很容易得到这个://G_level=item0+item1+...+item7//PG_level=pg7*pg6*pg5*pg4*pg3*pg2*pg1*pg0assign PG_level=pg7 & pg6 & pg5 & pg4 & pg3 & pg2 & pg1 & pg0;assign G_level=g7|(pg7 & g6)|(pg7 & pg6 & g5)|(pg7 & pg6 & pg5 & g4)|(pg7 & pg6 & pg5 & pg4 & g3)|(pg7 & pg6 & pg5 & pg4 & pg3 & g2)|(pg7 & pg6 & pg5 & pg4 & pg3 & pg2 & g1)|(pg7 & pg6 & pg5 & pg4 & pg3 & pg2 & pg1 & g0);//the parts above explains the term "Carry look_ahead"//计算输出结果//两个异或门(Xor GAtes)assign sum[0]=A[0] ^ B[0] ^ c0;assign sum[1]=A[1] ^ B[1] ^ c1;assign sum[2]=A[2] ^ B[2] ^ c2;assign sum[3]=A[3] ^ B[3] ^ c3;assign sum[4]=A[4] ^ B[4] ^ c4;assign sum[5]=A[5] ^ B[5] ^ c5;assign sum[6]=A[6] ^ B[6] ^ c6;assign sum[7]=A[7] ^ B[7] ^ c7;assign carry=c8;endmodule。

Verilog习题

Verilog习题

Verilog习题一.简答题1.电子电路CAD的基本含义是什么?2.利用Protel99进行原理图设计的基本步骤有那些?3.归纳总结,Protel99中,画线、画图工具有什么区别?4.两个节点通过哪些方法可以实现电气连接?5.网单文件中包含哪些内容?6.在Protel99的PCB中,有那些主要板层,作用分别是什么?7.PCB元件布局时应遵守那些原则?8.采用CPLD/FPGA设计复杂数字逻辑的一般流程是什么?9.论述构成数字系统的基本组成部分有哪些,作用如何?a)数字系统是指能进行数字信号的处理、存储、传输,完成某一特定功能的数字电路和软件系统的总和。

如计算机。

b)数字系统硬件主要由各种不同功能的组合逻辑(编码/译码等)和时序逻辑电路(计数器/寄存器/状态计)组合而成。

c)系统硬件单元有:(1)CPU:主控单元(2)RAM:内部数据存储、交换(3)输入输出设备,通信接口:输入指令、输出结果d)软件有:(1)操作系统:完整软件系统(2)嵌入式系统:简化的操作系统(3)监控程序:实现简单功能的循环程序10.论述数字逻辑EDA设计的一般流程是什么?系统任务——> 模块划分——> 图形或HDL行为语言描述——> 逻辑前仿真——> 综合——> 综合后仿真——> 布局布线——> 后仿真——> 下装ASIC11.举例说明流水线工作原理a)所谓流水线就是指把大规模、层次多,延时大的组合逻辑电路分为几个级,在每一级接入寄存器,暂存中间数据,从而增加数据处理能力得方法。

b)K级流水线就是在功能逻辑输入输出间恰好有K组寄存器,上一级输出是下一个输入c)流水线增加了数据吞吐量,带来了首位数据时间延迟,增加了KT.15.综述:Pspice可以进行那些分析,其作用如何?16.综述:pspice的信号源有那些类型,语法如何描述?17.FPGA内部逻辑单元的基本组成是什么?18.说出三个以上世界知名EDA公司的名称和主要产品。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于verilog HDL的八位超前进位加法器
Verilog 综合作业陈孙文
2011-10-25
指导老师:邓婉玲老师目录:
1. 超前进位加法器原理
2. 算法代码
3. modelsim SE软件实现功能仿真
4. synplify pro软件实现综合
正文:
一、原理
(1)、全加器
列出真值表如表所示,若Ai、Bi两个一位二进制数相加,以Ci表示来自低位的的进位,Si表示和,Ci表示向高位的进位,可以看出该电路考虑来低位的进位,是一个一位数的全加器电路,其逻辑符号如图所示。

串并行超前进位加法器的特点是:各级进位信号同时产生,减小或消除因进位信号逐级传递所用的时间。

每一位的进位信号不依赖于从低位逐级传递,而是—开始就能确定。

全加器真值可以得到逻辑表达式:
为表达简单,定义两个中间变量Gi和Pi
得出
得到各位进位信号的逻辑表达式为:
当实际位数较多时,往往将全部数位按4位一组分成若干组,组内采用超前进位,组间采用串行进价,组成所谓的串并行进位加法器。

二、算法代码:有4bits.v、8bits.v、testbench.v三个文件;
4bits.v实现输入为4位数的加法器;8bits.v中调用4bits.v中的函数来实现8位数相加;testbench.v 为测试代码;
实现四位加法4bits.v部分:
module fast_adder4b(ina,inb,carry_in,sum_out,clk,rst_n);
parameter ADDER_WIDTH=4;
parameter SUM_WIDTH=5;
input [ADDER_WIDTH-1:0]ina; //输入数ina,8位
input [ADDER_WIDTH-1:0]inb; //输入数inb,8位
input carry_in;
input rst_n;
input clk;
output [SUM_WIDTH-1:0] sum_out;
reg [SUM_WIDTH-1:0] sum_out;
wire [ADDER_WIDTH-1:0]sg;
wire [ADDER_WIDTH-1:0]sp;
wire [ADDER_WIDTH-1:0]sc;
assign sg[0]=ina[0]&inb[0]; //中间变量G0=ina0&inb0;
assign sg[1]=ina[1]&inb[1];
assign sg[2]=ina[2]&inb[2];
assign sg[3]=ina[3]&inb[3];
assign sp[0]=ina[0]^inb[0]; //中间变量P0=ina0^inb0;
assign sp[1]=ina[1]^inb[1];
assign sp[2]=ina[2]^inb[2];
assign sp[3]=ina[3]^inb[3];
assign sc[0]=sg[0]|(sp[0]&carry_in); //进位位C0
assign sc[1]=sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)));
assign sc[2]=sg[2]|(sp[2]&(sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)))));
assign sc[3]=sg[3]|(sp[3]&(sg[2]|(sp[2]&(sg[1]|(sp[1]&(sg[0]|(sp[0]&carry_in)))))));
always@(posedge clk or negedge rst_n)
begin
if(!rst_n)
sum_out<=5'b00000;
else
begin
sum_out[0]<=sp[0]^carry_in; //输出结果位
sum_out[1]<=sp[1]^sc[0];
sum_out[2]<=sp[2]^sc[1];
sum_out[3]<=sp[3]^sc[2];
sum_out[4]<=sc[3];
end
end
endmodule
实现八位加法8bits.v部分:
module pipe_adder8b(ina,inb,sum_out,clk,rst_n);
parameter ADDER_WIDTH=8;
parameter SUM_WIDTH=9;
parameter HALF_ADDER_WIDTH=4;
input [ADDER_WIDTH-1:0]ina;
input [ADDER_WIDTH-1:0]inb;
input rst_n;
input clk;
output[SUM_WIDTH-1:0] sum_out;
reg [SUM_WIDTH-1:0] sum_out;
reg [HALF_ADDER_WIDTH-1:0] ina_lsb;
reg [HALF_ADDER_WIDTH-1:0] ina_msb;
reg [HALF_ADDER_WIDTH-1:0] inb_lsb;
reg [HALF_ADDER_WIDTH-1:0] inb_msb;
reg [HALF_ADDER_WIDTH-1:0] ina_msb1;
reg [HALF_ADDER_WIDTH-1:0] inb_msb1;
reg [HALF_ADDER_WIDTH:0] sum11;
wire[HALF_ADDER_WIDTH:0] sum1;
wire[HALF_ADDER_WIDTH:0] sum2;
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
ina_lsb<=4'b0000;
ina_msb<=4'b0000;
inb_lsb<=4'b0000;
inb_msb<=4'b0000;
end
else
begin
ina_lsb<=ina[3:0];
ina_msb<=ina[7:4];
inb_lsb<=inb[3:0];
inb_msb<=inb[7:4];
end
end
fast_adder4b u1(ina_lsb,inb_lsb,1'b0,sum1,clk,rst_n); //低四位调用4位加法器模块
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
begin
ina_msb1<=4'b0000;
inb_msb1<=4'b0000;
end
else
begin
ina_msb1<=ina_msb;
inb_msb1<=inb_msb;
end
end
fast_adder4b u2(ina_msb1,inb_msb1,sum1[4],sum2,clk,rst_n); //高四位调用4位加法器模块always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
sum11<=4'b0000;
else
sum11<=sum1;
end
always @(posedge clk or negedge rst_n)
begin
if(!rst_n)
sum_out<=9'b0000_00000;
else
sum_out<={sum2,sum11[3:0]};
end
endmodule
testbengch.v部分:
`timescale 1ns/1ns
module test_8a;
reg clk,rst_n;
reg [7:0]ina,inb;
wire [8:0]sum_out;
always #20 clk=~clk; //时钟信号40ns一个周期
initial
begin
rst_n=1;
clk=0;
#30
ina=43; //给a赋值43
inb=61;
#200 rst_n=0;
#40 rst_n=1;
#2000 $stop;
end
//fast_adder4b bbb(.ina(ina),.inb(inb),.carry_in(1'b0),.sum_out(sum_out),.clk(clk),.rst_n(rst_n));
pipe_adder8b te(.ina(ina),.inb(inb),.sum_out(sum_out),.clk(clk),.rst_n(rst_n));
endmodule
三、modelsim软件实现功能仿真
三个代码文件compile通过之后,执行simulation;添加待观察端口到波形图wave中,执行simulation->run all命令,在wave波形图中得到以下的仿真波形:
四、synplify pro软件综合。

相关文档
最新文档