电子信息综合实践实习报告.docx

上传人:b****4 文档编号:24445347 上传时间:2023-05-27 格式:DOCX 页数:17 大小:130.15KB
下载 相关 举报
电子信息综合实践实习报告.docx_第1页
第1页 / 共17页
电子信息综合实践实习报告.docx_第2页
第2页 / 共17页
电子信息综合实践实习报告.docx_第3页
第3页 / 共17页
电子信息综合实践实习报告.docx_第4页
第4页 / 共17页
电子信息综合实践实习报告.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

电子信息综合实践实习报告.docx

《电子信息综合实践实习报告.docx》由会员分享,可在线阅读,更多相关《电子信息综合实践实习报告.docx(17页珍藏版)》请在冰豆网上搜索。

电子信息综合实践实习报告.docx

电子信息综合实践实习报告

电子信息综合实践实习报告

 

电子信息综合实践报告

8位运算器电路设计

 

北华大学电气信息工程学院

 

1、实习目的……………………………………………………2

2、运算器的国内外发展………………………………………3

3、FPGA的发展…………………………………………………3

4、运算器的设计原理…………………………………………7

5、运算器源程序………………………………………………13

6、结果分析……………………………………………………22

7、总结及心得体会……………………………………………22

 

一、实习目的

综合电子系统实习是电子信息类专业学生了解电子系统设计实现过程,培养实践动手能力的实践性教学环节,是电子信息工程等理工科专业学生一门必修的实践性课程。

通过学习和实践,可以让学生进一步接触电路板及电子产品的生产实际,了解电子工艺生产线的流程和基本管理知识,使学生通过设计一个课题,巩固和加深在“FPGA技术”等课程中所学到的理论知识和实验技能,掌握常用电子电路中的一般分析和设计方法,熟悉VHDL和其他开发软件的使用方法,提高电子电路的分析、设计和实验能力,为以后从事生产和科研工作打下一定的基础,为今后专业实验,毕业设计准备必要的编程知识和操作技能。

同时培养学生严谨的工作作风,养成良好的工作习惯,它是基本技能和知识的入门向导,又是创新实践和创新精神的启蒙。

综合电子系统实习对训练我们基本操作技能,提高我们实际动手能力是难得的一次好机会。

二、运算器的国内外发展

(1)国外情况

在国外,电子计算器在集成电路发明后,只用短短几年时间就完成了技术飞跃,经过激烈的市场竞争,现在的计算器技术己经相当成熟。

计算器已慢慢地脱离原来的―辅助计算工具‖的功能定位,正向着多功能化、可编程化方向发展,在各个领域都得到了广泛的应用。

用计算器不仅可以实现各种各样复杂的数学计算还可以用来编制、运行程序,甚至解方程组,图形计算器还可以进行图形处理。

计算器内置的软件允许用户进行类似于对计算机的文件和目录管理等操作,允许用户对图形界面进行定制,同时各种新技术也被应用到计算器里使计算器功能越来越强大。

可以说,计算器就是一个―微微型‖的计算机。

(2)国内情况

国内也有厂商利用计算器芯片开发新的产品,但对计算器技术的研究、计算器芯片的设计还处于起步阶段。

计算器的主要功能还是在于―计算‖,不妨称之为―低档计算器‖。

即便是对这种计算器,很多厂商也只从事计算器的组装、销售业务。

一些IC设计公司、芯片提供商也开始研究计算器技术基于FPGA的计算器设计。

三、FPGA的发展

随着EDA技术的发展,使用硬件语言设计PLD/FPGA成为一种趋势。

目前最主要的硬件描述语言是VHDL和VerilogHDL。

VHDL发展的较早,语法严格,而VerilogHDL是在C语言的基础上发展起来的一种硬件描述语言,语法较自由。

VHDL和VerilogHDL两者相比,VHDL的书写规则比Verilog烦琐一些,但verilog自由的语法也容易让少数初学者出错。

国外电子专业很多会在本科阶段教授VHDL,在研究生阶段教授verilog。

从国内来看,VHDL的参考书很多,便于查找资料,而VerilogHDL的参考书相对较少,这给学习VerilogHDL带来一些困难。

从EDA技术的发展上看,已出现用于CPLD/FPGA设计的硬件C语言编译软件,虽然还不成熟,应用极少,但它有可能会成为继VHDL和Verilog之后,设计大规模CPLD/FPGA的又一种手段。

FPGA是英文FieldProgrammableGateArray的缩写,即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。

它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。

FPGA采用了逻辑单元阵列LCA(LogicCellArray)这样一个概念,内部包括可配置逻辑模块CLB(ConfigurableLogicBlock)、输入输出模块IOB(InputOutputBlock)和内部连线(Interconnect)三个部分。

FPGA的基本特点主要有:

ⅰ.采用FPGA设计ASIC电路,用户不需要投片生产,就能得到合用的芯片。

ⅱ.FPGA可做其它全定制或半定制ASIC电路的测试样片。

ⅲ.FPGA内部有丰富的触发器和I/O引脚。

ⅳ.FPGA是ASIC电路中设计周期最短、开发费用最低、风险最小的器件之一。

ⅴ.FPGA采用高速CHMOS工艺,功耗低,可以与CMOS、TTL电平兼容。

FPGA是由存放在片内RAM中的程序来设置其工作状态的,因此,工作时需要对片内的RAM进行编程。

用户可以根据不同的配置模式,采用不同的编程方式。

加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置完成后,FPGA进入工作状态。

掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用。

FPGA的编程无须专用的FPGA编程器,只须用通用的EPROM、PROM编程器即可。

当需要修改FPGA功能时,只需换一片EPROM即可。

这样,同一片FPGA,不同的编程数据,可以产生不同的电路功能。

因此,FPGA的使用非常灵活。

与FPGA对应的还有DSP处理器,DSP处理器速度虽然很快,并对许多DSP应用来说很有用,但仍有一些应用要求性能再进一步提升,而FPGA提供了更高的性能。

FPGA可以生成一个定制硬件设计,从而控制逻辑能够在硬件中实现,不必再利用精确的时钟周期来实现控制功能。

此外,通过裁减硬件架构,FPGA可以提供额外的性能。

如果最重要的设计考虑因素是速度,那么可以在FPGA中设计完全并行的算法处理方案。

现在,许多系统已经包含了一个FPGA,用于协议转换、胶合逻辑或一些其它系统功能。

如果那个FPGA没有被完全利用,那么把DSP功能加入其中可以为系统节约成本。

而且如果标准发生改变,使用FPGA就不会有任何风险。

FPGA的配置文件能够像软件那样升级,尽管它们必须被存储在系统的非易失性存储器中。

目前的FPGA设计一般采用Top-down(自顶向下)的设计方法。

先将系统划分为各个功能子模块,在系统级层次上进行行为描述,再对这些子模块进一步进行行为描述。

(2)FPGA与CPLD的比较FPGA是现场可编程逻辑门阵列的简称,是电子设计的一个里程碑。

CPLD是复杂可编程逻辑器件的简称。

尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点ⅰ.CPLD更适合完成各种算法和组合逻辑,FPGA更适合于完成时序逻辑。

换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。

ⅱ.CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性ⅲ.在编程上FPGA比CPLD具有更大的灵活性。

CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FPGA可在逻辑门下编程,而CPLD是在逻辑块下编程。

ⅳ.FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。

ⅴ.CPLD比FPGA使用起来更方便。

CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。

而FPGA的编程信息需存放在外部存储器上,使用方法复杂ⅵ.CPLD的速度比FPGA快,并且具有较大的时间可预测性。

这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。

ⅶ.在编程方式上,FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。

其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。

CPLD主要是基于EEPROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。

CPLD又可分为在编程器上编程和在系统编程两类。

ⅷ.一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。

随着FPGA门数以及性能的提高,可以将现在的许多数字电路部分下载到FPGA上,实现硬件的软件化,包括51核,DSP核以及其他的一些数字模块,到最后一个系统板子就剩下电源、模拟电路部分,接口部分以及一块FPGA。

FPGA可以说是芯片级的PCB板,在一个芯片里设计原来的电子系统的所有数字电路部分。

现在也有将ARM核嵌入到FPGA里面的,比如Altera公司的Nois核。

Nois是一个软核,是有软件编写的一个32位处理器,并不是硬件上存在的处理核,该核工作频率为50HZ,现在用于许多图像处理以及其他的很多网络设备。

利用锁相环技术可以将频率成倍提升,一般的ARM核是将锁相环做到芯片里面的,在变成的时候可以对某个寄存器进行设置从而达到分频和倍频的目的。

而将DSP核嵌入到FPGA里面去实现强大的计算功能是Altera公司近期推出的一系列芯片的一个优点。

Altera公司的StratixII系列芯片采用内嵌的DSP核,但是其DSP核的计算速度比现在业界上最快的DSP芯片还要快几个数量级。

四、运算器设计原理

(1)加法器设计

为了能够实现4位BCD码的加法运算,设计中被加数和加数都为16位二进制数,由于2个16位二进制数相加可能会产生进位,同时为了方便数码管显示,和采用了20位二进制。

此外还有清零信号rst和加法使能信号add,当rst=’1’时对和进行清零,否则当add=‘1’时进行加法运算。

(2)减法器设计

为了实现4位BCD码的减法运算,设计中被减数和减数为16位二进制数,差为20位二进制数。

输入的信号有清零信号rst、减法使能信号sub、被减数a、减数b,输出的信号有差cha和借位co。

由于两个数相减的差有可能为正数也有可能为负数,当差为负数时表现为补码的形式,必须要将负数的补码进行修正,修正时对差的低16位求补码运算,而差的正负用借位co来表示,co=‘1’表示差为负,否则为正。

(3)乘法器设计乘法器设计的原理分析乘法运算的方法可以通过以下实例来说明:

设被乘数A=1110,乘数B=1101,求A×B

由以上实际例子可以看出,16位二进制乘法运算可以使用移位相加的方法来实现,被乘数左移16次,乘数右移16次,当时钟上升沿到来时都对乘数的最低位进行判断,如果乘数的最低位为1则乘积加上已经移位的被乘数,否则加0。

乘法器电路结构框图根据乘法原理,采用移位相加的办法来实现乘法运算,如图。

(4)除法器设计

此次设计的16位二进制除法器采用的是比较相减的方法,先在被除数前添加16个0,当时钟脉冲上升沿到来时将前一次高16位与除数比较,若大于或等于则将被除数的高16位减去除数,同时左移并将被除数的第1位置1,若小于则只是将被除数左移,等到下一个脉冲到来时再循环此操作,直到第16个脉冲之后停止操作。

这样进行16个脉冲周期之后,被除数的高16位为余数,低16位为商。

除法运算的原理可以通过以下实例来说明:

设被除数A=1110,除数B=0110,求解A÷B的过程如下:

除法器电路结构框图

除法器电路由控制电路、比较电路、减法电路和移位电路组成。

控制电路负责产生16个脉冲的时钟信号、转载信号、运算结束信号;比较电路则是将被除数的高16位和除数进行比较,若大于或等于则great为‘1’,否则为‘0’;减法电路先判断比较电路输出的great是否为‘1’,若为‘1’则将被除数的高16位和除数相减,否则不进行运算只保存被除数的高16位;移位电路是将被除数进行左移,并对great进行判断,若为‘1’则将被除数的第一位置1。

(二)键盘扫描电路设计

矩阵式键盘是一种常见的输入装置,在日常生活中,矩阵式键盘在计算机、电话、手机等各式电子产品上已经被广泛应用。

我们用的是一个4×4矩阵式键盘,其中数字0~9作为各种运算的数字输入键,#为清零功能键,=为运算结果键,+、-、×、÷为运算的选择键。

键盘上的每一个按键其实就是一个开关,每个键都有一个上拉电阻,该按键的接点会呈现低电平状态,反之,未按下时则呈现高电平状态。

4x4矩阵键盘。

(三)扫描电路设计

对键盘采用0~15计数的方式,输入信号为键盘的列信号,对键盘进行逐行扫描。

扫描键盘的编码方式如图7-2,当没有按下键盘时,键盘输入到按键检测电路col的值均为1,此时key=‘1’;否则当使用者按下键盘按钮时,键盘检测到按键电路col的值为0,此时key=‘0’。

(1)键盘扫描计数器电路

时钟信号clk频率为1KHz,按键(key_pressed)为使能信号,当未按下键盘时key_pressed=‘1’,此时由0~15反复计数,并将计数值作为按键检测电路的输入信号,直到按下键key_pressed=‘0’时计数器停止输出计数值。

(2)按键检测电路

按键检测电路的输入信号为col和scan_cnt,输出信号为row和key_pressed。

检测电路根据计数值scan_cnt判断row和key_pressed,scan_cnt的低2位用于判断扫描的列,scan_cnt的低2位“00”、“01”、“10”、“11”分别代表第一列、第二列、第三列、第四列;而scan_cnt的高2位“00”、“01”、“10”、“11”分别代表第一行、第二行、第三行、第四行。

由于键盘的按钮采用机械开关,当按下键盘按钮时,有可能会产生误导作,因此要使用键盘消抖动电路。

此次设计的消抖动电路采用的是倒数计数器电路,将key_pressed作为计数器的输入端,当多次检测到key_pressed=‘0’才判定为按下键盘,否则被认定为没按下键盘

(3)键盘编码电路

(4)将键盘16个键的每个键进行编码,然后按照每个键的编码值译码成实际的数值。

键盘编码表如图

(四)控制电路的原理

当按下键盘按键时,由键盘扫描电路译码出按下的键值,但是根据通常的运算顺序,先输入一个运算数据,然后输入运算功能键,再输入另一个运算数据,最后才是输入等于号显示运算结果,这就需要一个控制电路,用于控制当输入运算功能键时第一个运算数据输入停止;而输入运算功能键后开始输入第二个运算数据,当输入等于号码时停止输入第二个运算数据;当输入等于号时,开始显示运算结果。

控制电路时序控制电路关键是对于时序的控制,首先必须先设计一个控制模块用于确定键盘输入的键值是清零键、数据键、还是功能键,然后根据控制模块控制第一个和第二个运算数据输入的使能信号,当检测到数据输入使能信号有效时,必须对输入信号进行左移处理以便储存输入的数据。

第一个和第二个数据输入的使能信号时序。

(五)BCD码转化为二进制电路设计

经过控制电路输出的两个运算数据是BCD码形式的,而此次设计的加、减、乘、除运算的数据形式都是二进制的,因此必须要将控制电路输出的两个运算数据转化为BCD码。

二进制转化为BCD码的方法是将数据从最左边开始4位组成一组,16位数据可组成4组,然后分别将第1、2、3、4组分别乘以1、10、100、1000后相加便可以得到相应BCD码的十进制表示,而计算机中的十进制数默认用二进制表示,再用修正电路将用二进制表示的十进制补0。

(六)运算系统顶层设计原理分析

运算系统的顶层设计需要将设计好的键盘扫描电路、控制电路、BCD码转二进制电路、加法电路、减法电路、乘法电路、除法电路、二进制转BCD码电路、显示译码电路、显示电路功能模块连接起来。

首先由键盘扫描电路将按下的键进行译码,然后由控制电路输出两个运算数据,再由BCD码转二进制电路将二进制数据送到各运算电路,运算的结果由二进制转BCD码电路转化为数码管显示所需要的二进制数,最后使用译码电路将BCD码转化成数码管显示的信息。

五运算器源程序

1、LED数码显示部分

moduleseg_driver(clk,rst_n,data_in,turn_off,sel,seg);

inputclk;

inputrst_n;

input[23:

0]data_in;

input[5:

0]turn_off;

outputreg[2:

0]sel;

outputreg[7:

0]seg;

reg[4:

0]seg_data;

reg[3:

0]count;

always@(posedgeclkornegedgerst_n)

begin

if(!

rst_n)

sel<=3'b000;

else

if(sel<5)

sel<=sel+1;

else

sel<=3'b000;

end

always@(*)

begin

if(!

rst_n)

seg<=8'hff;

else

case(seg_data)

5'd0:

seg<=`seg0;

5'd1:

seg<=`seg1;

5'd2:

seg<=`seg2;

5'd3:

seg<=`seg3;

5'd4:

seg<=`seg4;

5'd5:

seg<=`seg5;

5'd6:

seg<=`seg6;

5'd7:

seg<=`seg7;

5'd8:

seg<=`seg8;

5'd9:

seg<=`seg9;

5'd10:

seg<=`sega;

5'd11:

seg<=`segb;

5'd12:

seg<=`segc;

5'd13:

seg<=`segd;

5'd14:

seg<=`sege;

5'd15:

seg<=`segf;

default:

seg<=8'hff;

endcase

end

endmodule

这部分主要是用于显示在输入输出过程中显示数字。

2、4x4键盘码扫描部分

modulejzjp(clk,rst_n,row,col,real_number,flag,opcode);

inputclk;

inputrst_n;

input[3:

0]row;

begin

if(!

rst_n)

begin

number<=4'b0000;

end

else

case({row,col})

8'b1110_1110:

number=4'b0000;

8'b1110_1101:

number=4'b0001;

8'b1110_1011:

number=4'b0010;

8'b1110_0111:

number=4'b0011;

8'b1101_1110:

number=4'b0100;

8'b1101_1101:

number=4'b0101;

8'b1101_1011:

number=4'b0110;

8'b1101_0111:

number=4'b0111;

8'b1011_1110:

number=4'b1000;

8'b1011_1101:

number=4'b1001;

8'b1011_1011:

number=4'b1010;

8'b1011_0111:

number=4'b1011;

8'b0111_1110:

number=4'b1100;

8'b0111_1101:

number=4'b1101;

8'b0111_1011:

number=4'b1110;

8'b0111_0111:

number=4'b1111;

default:

number<=4'b0000;

endcase

end

endmodule

这部分主要是用于开发板上的矩阵键盘扫描。

3、算术逻辑运算单元部分

moduleconv(rst_n,flag,number,opcode,data_in,turn_off);

inputrst_n;

inputflag;

input[3:

0]number;

input[3:

0]opcode;

outputreg[23:

0]data_in;

outputreg[5:

0]turn_off;

reg[23:

0]temp1;

reg[23:

0]temp;

reg[3:

0]code1;

reg[3:

0]code2;

always@(negedgeflagornegedgerst_n)

begin

if(!

rst_n)

begin

temp1<=0;

4'hc:

begindata_in<=data_temp(temp1*temp);end

4'hd:

begindata_in<=data_temp(temp1/temp);end

default:

;

endcase

code1<=0;

end

default:

if(code2==4'hf)

begin

code2<=0;

data_in<={20'b00000,number};

end

else

data_in<={data_in[19:

0],number};

endcase

end

begin

temp<={20'b00000,data_in[3:

0]}+{20'b00000,data_in[7:

4]}*10+{20'b00000,data_in[11:

8]}*100+{20'b00000,data_in[15:

12]}*1000+{20'b00000,data_in[19:

16]}*10000+

if(data_in[15:

12]!

=4'h0)

if(data_in[7:

4]!

=4'h0)

turn_off<=6'b111100;

else

turn_off<=6'b111110;

endmodule

这部分是整个运算器的核心部分,承担的功能是运算;数制转换部分也在这个部分进行。

4、分频器

modulefreq(clk,rst_n,clk_slow);

inputclk;//50MHZ

inputrst_n;

outputregclk_slow;//1KHZ

reg[31:

0]count;

always@(posedgeclkornegedgerst_n)

begin

if(!

rst_n)

begin

count<=0;

clk_slow<=0;

end

else

begin

if(count<25000-1)

count<=count+1;

else

begin

clk_slow<=~clk_slow;

count<=0;

end

end

end

endmodule

这部分是将时钟

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 求职职场 > 简历

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1