数电课程设计

发布 2022-10-04 02:23:28 阅读 2394

哈尔滨理工大学。

数字集成电路课程设计。

设计名称:基于quartus和modelsim的旁路进位加法器。

姓名: 班级:电科07-1

学号:基于quartus和modelsim的旁路进位加法器。

设计背景:现代数字逻辑设计更多的是通过hardware description languages(hdls,硬件描述语言)完成从设计,**,自动综合到对目标数字系统的确认。硬件描述语言的使用成为数字设计的重要工具。

verilog hdl是硬件描述语言的一种。设计者应用这种语言就能实现从上到下的,逐层描述自己的设计思想,用一些列分层次的模块来表示极其复杂的数字系统。

本设计就是应用verilog hdl来设计旁路进位加法器(carry_bypass_add)。由于一般的串行加法器在位数比较多的时,信号的传输就会受到较大的延迟,使得处理器的处理速度有所下降,不能适应现代追求高速的要求。故我们设计的旁路进位加法器(carry_bypass_add)在一定的程度上会减少信号的延迟时间。

设计流程:一、全加器的设计。

微处理器是采用大规模集成电路技术制成的半导体芯片,其中内部集成计算机的主要部件:控制器、运算器和寄存器。其中一个典型的微处理器的内部结构,一般由算术逻辑单元、寄存器组和指令处理单元。

其中算术逻辑单元的基本单元就是一个加法器。由此可见全加器在现在集成电路的重要地位。根据数电的知识可以得到一位全加器的真值表,见表1。

根据全加器的真值表,我们在quartus中,应用verilog hdl建立模型。在我们所建立的verilog hdl的模型中我们采用行为级的建模方式。在我们所编的全加器的程序中应用case语句。

具体程序如下:

module addfull(sum,c_out,in1,in2,c_in); 定义模块名称和端口名。

input in1,in2,c_in; /声明输入端口。

output sum,c_out; /声明输出端口。

reg sum,c_out;

always@(in1 or in2 or c_in)

case()

3'b000: begin sum=0;c_out=0; end

3'b001: begin sum=1;c_out=0; end

3'b010: begin sum=1;c_out=0; end

3'b011: begin sum=0;c_out=1; end

3'b100: begin sum=1;c_out=0; end

3'b101: begin sum=0;c_out=1; end

3'b110: begin sum=0;c_out=1; end

3'b111: begin sum=1;c_out=1; end

endcase

endmodule

其中我们采用的是case语句的行为级建模。在其中我们并没有使用****ult语句,是因为我们状态包括了所有的可能。

在quartus中通过**,验证我们所见模型的正确性,通过rtl级别的视图我们可以得到全加器的电路原理图,如图2。

通过在modelsim对我们所设计的全加器的功能进行**,进一步验证我们所设计的全加器是否符合要求。在应用modelsim时,我们首先应该编写模块的测试平台即addfull的testbench。其中testbench也是应用verilog hdl所编写的,这里我们省略了tsetbench的程序**,**结果见图3。

二、旁路进位加法器的设计。

我们设计旁路进位加法器的思想是从上到下的设计方法。首先定义顶层功能块,进而分析所需要的旁路进位加法器的子模块,然后对所需要的模块进行建模。前面我们已经设计了,旁路进位加法器所需要的的全加器,下面将通过引用全加器的模块来构建我们的旁路进位加法器(carry_bypass_add)。

旁路进位加法器(carry_bypass_add)即在一个加数全部为高电平时,全加器的进位就等于最低位的进位,这样我们就可以通过电路直接把最低位的进位直接给到最高的进位处,以减少信号传递的时间。但当上述条件不满足时,还是需要全加器自己的进位来实现。由此可知这种全加器只有在一个加数的各位全部为高电平时,才会比一般加法器有优势。

为实现前面情况的选择,我们需要引进二选一的电路模块。

旁路进位加法器(carry_bypass_add)的verilog hdl编程如下:

module carry_bypass_add(sum,c_out,in1,in2,c_in); 定义旁路进位加法器模块。

input [3:0] in1, in2;

input c_in;

output [3:0] sum;

output c_out;

wire [4:0] c;

wire a,b;

addfull add1(.sum(sum[0]),c_out(c[0]),in1(in1[0]),in2(in2[0]),c_in(c_in));

addfull add2(.sum(sum[1]),c_out(c[1]),in1(in1[1]),in2(in2[1]),c_in(c[0]))

addfull add3(.sum(sum[2]),c_out(c[2]),in1(in1[2]),in2(in2[2]),c_in(c[1]))

addfull add4(.sum(sum[3]),c_out(c[3]),in1(in1[3]),in2(in2[3]),c_in(c[2]))

assign a=in1[0]&&in1[1]&&in1[2]&&in1[3];

assign b=in2[0]&&in2[1]&&in2[2]&&in2[3];

assign c[4]=a||b;

two_to_one t1(.c(c_out),.a(c_in),.b(c[3]),control(c[4]))调用数据选择模块。

endmodule

module two_to_one(c,a,b,control); 定义数据选择模块。

input a,b,control;

output c;

assign c=control?a:b;

endmodule

在编程中,我们调用以前的全加器的模块,这样就很简单的达到了设计要求,这也是设计电路的一种基本的方法。

在quartus中通过**,验证我们所见模型的正确性,通过rtl级别的视图我们可以得到全加器的电路原理图,如图4。

在modelsim中进行**,验证我们的设计是否符合要求。

由**结果可知,我们所设计的旁路进位加法器(carry_bypass_add)在功能上满足我们的要求。

设计总结:通过本次旁路进位加法器的设计,从原理的掌握旁路进位加法器相比于其他加法器的优势,由于进位信号是从低位直接进到最高位,这就减少了信号的传输时间,大大的提高了效率,在编程的过程中也通过引用全加器模块来实现的四位旁路进位加法器,最后就是通过modelsim的**,验证了旁路进位加法器的功能,最终完成了设计。这次设计使我增强了团队合作的精神,懂得如何把自己的意见很好的表达出来,并获得同组人的赞同。

进一步了解到,quartus软件的强大功能,同时增加了自己的编程思想。

数电课程设计

两位十进制计数显示器。一 设计内容。本设计主要采用芯片有555定时器 74162计数器 7448七段字形译码器,以及七段led数码管。能过以上元器件的组合,构成一个两位十进制计数显示器,实现循环依序显示0 99的数字。要求每位同学独立设计电路原理图,制作pcb电路板并印制上自己的学号。二 电路原理。...

数电课程设计

数字电子技术基础 课程设计报告。数字万年历。班级 姓名 签字。学号 日期 目录。1.设计任务及要求3 2 设计思路与说明3 2.1电路图及原理说明3 2.1.1年部分计数器3 2.1.2月部分计数器5 2.1.3日期部分计数器6 2.1.4 星期部分计数器7 3 电路调试基本过程遇到的问题及调试结果...

数电课程设计

数字电子课程设计报告。题目 电子生日蜡烛。系班 电气0805 组员 焦雪菲08291140齐龙。杨超08291158 指导老师 王强。电路原理图。一 系统功能概述。如图1所示,这个电路产生了一套基于led的电子生日蜡烛。这种蜡烛与吹灭蜡制蜡烛一样具有相同的乐趣,并且它是可重复利用的,可改进的以及低碳...