ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:267.91KB ,
资源ID:10994659      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-10994659.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(3FPGA编码器徐艺萍.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

3FPGA编码器徐艺萍.docx

1、3FPGA编码器徐艺萍2.3 编码器在数字系统里,常常需要将某一个信息(输入)变换为某一特定的代码输出。把二进制码按一定的规律编排,例如8421码、格雷码等,使每组代码具有一特定的含义(代表某个数或者控制信号)称为编码。具有编码功能的逻辑电路称为编码器。编码器有若干个输入,在某一个时刻只有一个输入信号被转换成二进制码。例如8线3线编码器和10线4线编码器分别有8个输入、3位二进制码输出和10个输入、4位二进制码输出。二进制编码的结构框图如图2.3.1所示。图2.3.1 二进制编码的结构框图2.2.1 普通编码器1基本原理下面以4线2线普通编码器为例来介绍普通编码器的工作原理。4线2线编码器的逻

2、辑图如图2.3.2所示,表2.3.1是4线2线编码器的真值表。图2.3.2 2 4线2线编码器逻辑图表2.3.1 4线2线编码器真值表输入输出I0I1I2I3Y1Y0100001000010000100110101由上表可知,4个输入I0I3为高电平有效信号,输出是两个二进制代码Y1Y0,任何时刻I0I3中只能有一个取值为1,并且有一组对应的二进制码输出。除了表中列出的4个输入变量的4种组合有效外,其余12种组合所对应的输出均为0,因而可由功能表得到如下逻辑表达式:2实现方案通过FPGA来实现普通编码器的功能有以下几种方案:(1) 采用数据流描述方式(逻辑门表示),用assign关键字来实现。

3、(2) 采用if.else语句来实现。(想到了)(3) 采用case语句来实现。(想到了)(4) 采用嵌套条件运算符“? :”来实现。3FPGA的实现下面以第一种方案为例来进行FPGA的实现。(1) 创建工程在创建工程的时候,注意器件族类型、器件型号、综合工具和仿真器的选择,在这里选择的器件族类型(Device Family)是Virtex2P,器件型号(Device)是XC2VP30 ff896 -7,综合工具(Synthesis Tool)是XST (VHDL/Verilog),仿真器(Simulator)是ISE Simulator(VHDL/Verilog)。(2) 设计输入Veril

4、og HDL 代码如下:module encoder4_2(I3,I2,I1,I0,Y1,Y0);input I3,I2,I1,I0;output Y1,Y0;wire Y1,Y0;assign Y1=(I0)&(I1)&(I2)&(I3)|(I0)&(I1)&(I2)&(I3);assign Y0=(I0)&(I1)&(I2)&(I3)|(I0)&(I1)&(I2)&(I3);endmodule对于第二种方案的Verilog HDL 代码如下:module encoder4_2(I3,I2,I1,I0,Y1,Y0);input I3,I2,I1,I0;output Y1,Y0;reg Y1,

5、Y0;always (I3 or I2 or I1 or I0)begin if(I3,I2,I1,I0=4b0001) Y1,Y0=2b00; else if(I3,I2,I1,I0=4b0010) Y1,Y0=2b01; else if(I3,I2,I1,I0=4b0100) Y1,Y0=2b10; else if(I3,I2,I1,I0=4b1000) Y1,Y0=2b11; else Y1,Y0=2b00;end endmodule对于第三种方案的Verilog HDL 代码如下:module encoder4_2(I3,I2,I1,I0,Y1,Y0);input I3,I2,I1,I

6、0;output Y1,Y0;reg Y1,Y0;always (I3 or I2 or I1 or I0)begin case(I3,I2,I1,I0) 4b0001 : Y1,Y0=2b00; 4b0010 : Y1,Y0=2b01; 4b0100 : Y1,Y0=2b10; 4b1000 : Y1,Y0=2b11; default : Y1,Y0=2b00; endcaseend endmodule对于第四种方案的Verilog HDL 代码如下:module encoder4_2(I3,I2,I1,I0,Y1,Y0);input I3,I2,I1,I0;output Y1,Y0;wir

7、e Y1,Y0;assign Y1,Y0=(I3,I2,I1,I0=4b0001) ? 2b00: (I3,I2,I1,I0=4b0010) ? 2b01 : (I3,I2,I1,I0=4b0100) ? 2b10 : (I3,I2,I1,I0=4b1000) ? 2b11 : 2b00;endmodule(3) 功能仿真 在sources窗口的“sources for”中选择“Behavioral Simulation”。 由Test Bench WaveForm添加激励源,如图2.3.3所示。仿真结果如图2.3.4所示。图2.3.3 激励波形图2.3.4 仿真结果从仿真的结果中我们可以看到

8、:当输入为0001时,编码输出为00;当输入为0010时,编码输出为01;当输入为0100时,编码输出为10;当输入为1000时,编码输出为11,当输入为其他值的时候,编码输出也为00,这就达到了我们设计的效果。在进行功能仿真验证之后,再进行综合。(4) 进行ChipScope在线调试 生成ICON核和VIO核并添加到工程。这里使用的是核生成法。因为ICON核只需要控制VIO核,所以控制端口数为1,如图2.3.5所示。VIO核使用异步输入输出端口,异步输入端口的位宽为2,异步输出端口的位宽为4,如图2.3.6所示。图2.3.5 操作示意图1图2.3.6 操作示意图2最后得到的代码如下:modu

9、le encoder4_2(Y1,Y0);wire I3,I2,I1,I0;output Y1,Y0;wire Y1,Y0;wire 35 : 0 CONTROL0;wire 3 : 0 ASYNC_OUT;wire 1 : 0 ASYNC_IN;ICON I_ICON( .CONTROL0(CONTROL0);VIO I_VIO( .CONTROL(CONTROL0), .ASYNC_IN(ASYNC_IN), .ASYNC_OUT(ASYNC_OUT);assign ASYNC_IN0=Y0;assign ASYNC_IN1=Y1;assign I0=ASYNC_OUT0;assign I

10、1=ASYNC_OUT1;assign I2=ASYNC_OUT2;assign I3=ASYNC_OUT3;assign Y1=(I0)&(I1)&(I2)&(I3)|(I0)&(I1)&(I2)&(I3);assign Y0=(I0)&(I1)&(I2)&(I3)|(I0)&(I1)&(I2)&(I3);endmodule 在ISE里进行综合和实现,然后生成bit文件。 在ChipScope里观测调试。在Processes窗口中选择双击“Analyze Design Using Chipscope”进入ChipScope Pro Analyzer窗口,点击图标检查连接情况,然后下载bit文

11、件进行在线观测。调试结果如图2.3.72.3.11所示。图2.3.7 调试结果1图2.3.8 调试结果2图2.3.9 调试结果3图2.3.10 调试结果4图2.3.11 调试结果5从上面的调试结果可以看出编码器的设计是正确的。4总结从上面设计的普通编码器我们可以看出,这种编码器存在一个不足,当4个输入中有2个或2个以上的取值同时为1时,就会出现编码错误。为了解决这个问题,我们可以使用优先编码器。2.2.2优先编码器1基本原理上一节的普通编码器虽然简单,但当同时出现有两个或两个以上的输入为高电平时,其输出将是混乱的。在数字系统中,特别是在计算机系统中,常常要控制几个工作对象,例如微型计算机主机要

12、控制打印机、磁盘驱动器、输入键盘等。当某个部件需要实行操作时,必须先送一个信号给主机(称为服务请求),经主机识别后再发出允许操作信号(服务响应),并按事先编好的程序工作。这里会有几个部件同时发出服务请求的可能,而在同一时刻只能给其中1个部件发出允许操作信号。因此,必须根据轻重缓急,规定好这些控制对象允许操作的先后次序,即优先级别。识别这类请求信号的优先级别并进行编码的逻辑部件称为优先编码器。下面以8线3线优先编码器为例来具体说明优先编码器的工作原理。8线3线优先编码器的功能表如表2.3.2所示。表2.3.2 8线3线优先编码器功能表输入输出EII7I6I5I4I3I2I1I0Y2Y1Y0GSE

13、O0111111111x010000000x0x1000000x0xx100000x0xxx10000x0xxxx1000x0xxxxx100x0xxxxxx10x0xxxxxxx100111100000011001100001010101000111111110100000000从功能表我们可以看出,该编码器有8个信号输入端,3个二进制码输出端。此外,电路还设置了输入使能端EI,输出使能端EO和优先编码工作状态标志GS。当EI1时,编码器工作;而当EI0时,则不论8个输入端为何种状态,3个输出端均为低电平,且优先标志端和输出使能端均为低电平,编码器处于非工作状态。当EI为1,且至少有一个输入

14、端有编码请求信号(逻辑1)时,优先编码工作状态标志GS为1,表明编码处于工作状态,否则为0。由功能表可知,在8个输入端均无高电平输入信号和只有输入I0端(优先级别最低位)有高电平输入时,Y2Y1Y0均为000,出现了输入条件不同而输出代码相同的情况,这可由GS的状态加以区别,当GS0时,表示8个输入端均无高电平输入,此时Y2Y1Y0=000为非编码输出;GS1时,Y2Y1Y0=000表示响应输入I0的输出代码,Y2Y1Y0=000为编码输出。EO只有在EI为0,且所有输入端都为0时,输出为1,它可与另一片同样器件的EI连接,以便组成更多输入端的优先编码器。2实现方案通过FPGA来实现8线3线优

15、先编码器的功能有以下几种方案:(1) 采用if.else语句来实现。(2) 采用数据流描述方式,不建议采用。3FPGA的实现下面以第一种方案为例来进行FPGA的实现。(1) 创建工程在创建工程的时候,注意器件族类型、器件型号、综合工具和仿真器的选择,在这里选择的器件族类型(Device Family)是Virtex2P,器件型号(Device)是XC2VP30 ff896 -7,综合工具(Synthesis Tool)是XST (VHDL/Verilog),仿真器(Simulator)是ISE Simulator(VHDL/Verilog)。(2) 设计输入Verilog HDL 代码如下:m

16、odule encoder8_3(I7,I6,I5,I4,I3,I2,I1,I0,EI,GS,EO,Y2,Y1,Y0);input I7,I6,I5,I4,I3,I2,I1,I0,EI;output GS,EO;output Y2,Y1,Y0;reg Y2,Y1,Y0;reg GS,EO;always (I7 or I6 or I5 or I4 or I3 or I2 or I1 or I0 or EI)begin if(EI) Y2,Y1,Y0,GS,EO=5b00000; else if(I7) Y2,Y1,Y0,GS,EO=5b11110; else if(I6) Y2,Y1,Y0,GS

17、,EO=5b11010; else if(I5) Y2,Y1,Y0,GS,EO=5b10110; else if(I4) Y2,Y1,Y0,GS,EO=5b10010; else if(I3) Y2,Y1,Y0,GS,EO=5b01110; else if(I2) Y2,Y1,Y0,GS,EO=5b01010; else if(I1) Y2,Y1,Y0,GS,EO=5b00110; else if(I0) Y2,Y1,Y0,GS,EO=5b00010; else Y2,Y1,Y0,GS,EO=5b00001; endendmodule(3) 功能仿真 在sources窗口的“sources f

18、or”中选择“Behavioral Simulation”。 由Test Bench WaveForm添加激励源,如图2.3.12所示。仿真结果如图2.3.13所示。图2.3.12 激励波形图2.3.13 仿真结果从仿真的结果中我们可以看到:,这就实现了异或门电路的功能。在进行功能仿真验证之后,再进行综合。(4) 进行ChipScope在线调试 生成ICON核和VIO核并添加到工程。这里使用的是核生成法。因为ICON核只需要控制VIO核,所以控制端口数为1,如图2.3.14所示。VIO核使用异步输入输出端口,异步输入端口的位宽为1,异步输出端口的位宽为2,如图2.3.15所示。图2.3.14

19、操作示意图1图2.3.15 操作示意图2最后得到的代码如下:module encoder8_3(GS,EO,Y2,Y1,Y0);wire I7,I6,I5,I4,I3,I2,I1,I0,EI;output GS,EO;output Y2,Y1,Y0;reg Y2,Y1,Y0;reg GS,EO;wire 35 : 0 CONTROL0;wire 8 : 0 ASYNC_OUT;wire 4 : 0 ASYNC_IN;ICON I_ICON( .CONTROL0(CONTROL0);VIO I_VIO( .CONTROL(CONTROL0), .ASYNC_IN(ASYNC_IN), .ASYN

20、C_OUT(ASYNC_OUT);assign ASYNC_IN0=GS;assign ASYNC_IN1=EO;assign ASYNC_IN2=Y2;assign ASYNC_IN3=Y1;assign ASYNC_IN4=Y0;assign I0=ASYNC_OUT0;assign I1=ASYNC_OUT1;assign I2=ASYNC_OUT2;assign I3=ASYNC_OUT3;assign I4=ASYNC_OUT4;assign I5=ASYNC_OUT5;assign I6=ASYNC_OUT6;assign I7=ASYNC_OUT7;assign EI=ASYNC

21、_OUT8;always (I7 or I6 or I5 or I4 or I3 or I2 or I1 or I0 or EI)begin if(EI) Y2,Y1,Y0,GS,EO=5b00000; else if(I7) Y2,Y1,Y0,GS,EO=5b11110; else if(I6) Y2,Y1,Y0,GS,EO=5b11010; else if(I5) Y2,Y1,Y0,GS,EO=5b10110; else if(I4) Y2,Y1,Y0,GS,EO=5b10010; else if(I3) Y2,Y1,Y0,GS,EO=5b01110; else if(I2) Y2,Y1,

22、Y0,GS,EO=5b01010; else if(I1) Y2,Y1,Y0,GS,EO=5b00110; else if(I0) Y2,Y1,Y0,GS,EO=5b00010; else Y2,Y1,Y0,GS,EO=5b00001; endendmodule 在ISE里进行综合和实现,然后生成bit文件。 在ChipScope里观测调试。在Processes窗口中选择双击“Analyze Design Using Chipscope”进入ChipScope Pro Analyzer窗口,点击图标检查连接情况,然后下载bit文件进行在线观测。调试结果如图2.3.162.3.19所示。图2.3.16 调试结果1图2.3.17 调试结果2图2.3.18 调试结果3图2.3.19 调试结果4从上面的调试结果可以看出8线3线优先编码器的设计是正确的。4总结这里设计的是一个8线3线优先编码器,通过对优先编码器的了解,还可以设计出其他种类的优先编码器,比如4线2线优先编码器、16线4线优先编码器等等。我们具体采用哪一种优先编码器要根据实际情况而定。

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2