欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    课程设计(论文)基于FPGA的数字音频相位表设计与实现.doc

    • 资源ID:4153003       资源大小:951KB        全文页数:29页
    • 资源格式: DOC        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    课程设计(论文)基于FPGA的数字音频相位表设计与实现.doc

    摘 要近年来,随着技术的不断进步,同频信号间的相位差的数字化测量在电子技术、工业自动化、智能控制及通信等许多领域都有广泛的应用。本系统是基于XILINX公司的ISE9.1设计软件及其生产的FPGA、采用Verilog-HDL硬件描述语言设计的音频数字式相位测量表,主要由鉴相器、累加计数器、控制电路、寄存及显示电路组成。ISE是使用XILINX的FPGA的必备的设计工具,它可以完成FPGA开发的全部流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。自从现场可编程门阵列(FPGA)面市以来,以其功能强、速度快、精度高、灵活性大及设计周期短等特点,使其在现代数字系统中得到广泛的应用。而VHDL语言因其严谨的语言结构、强大的系统硬件描述能力、支持广泛、易于修改特点而在现代数字系统设计中受到广泛使用。 关键词:相位差,ISE,相位表,FPGA,Verilog-HDL第1章 引言1第2章 设计软件及器件简介22.1 ISE软件简介22.2 Spartan3A系列器件简介22.3 VHDL语言简介3第3章 相位表设计53.1 设计原理53.2 各组成部分设计83.3程序设计说明11参考文献13附 录14程序1:顶层(top)模块14程序2:鉴相器模块17程序3:分频模块18程序4:模K(K=3500)计数器模块19程序5:模4096计数器模块20程序6:计数使能模块22程序7:十BCD计数模块22程序8:BCD译码器模块24程序9:锁存器模块24程序10:数据选通模块25程序11:LED显示模块26第1章 引言在现代测试技术中,对于各种类型的被测量大都是直接或通过各种传感器及电路转换为与被测量相关的电压、电流、时间、频率等电学基本参量后进行检测和处理的,这样即能提高测量的精度,又便于对被测量的检测、处理、记录和控制。 相位是描述交流信号的三要素之一。相位差的测量是研究信号、网络特性、工业自动化、智能控制及通信中不可缺少的重要方面。相位表就是测量两个同频正弦电量之间相位差的仪器,是在工业及科研领域中常用的一般测量仪器。而基于FPGA的数字化相位测量因其在硬件成本低、抗干扰能力强、对于不同的测量对象只需要改变程序的算法而不需要人工改变电路结构,且精度一般优于模拟式测量等优点,而受到广泛的关注与应用。赛林思(Xilinx)公司是全球领先的可编程逻辑从软件设计到芯片实现完整解决方案的供应商。笔者正是基于赛林思公司的ISE设计软件以及该公司生产的Spartan3A and Spartan3AN系列的XC3S200A器件实验板为核心设计的数字音频相位表。该相位表的频率测量范围覆盖了音频(20Hz-20Khz)范围,相位测量范围是360°,测量显示精度为0.1°,测量误差范围在1°以内。第2章 设计软件及器件简介在现代复杂的数字系统设计中,现场可编程门阵列(FPGA)是最常用的芯片,作为全球最重要的FPGA提供商之一的赛林思(Xilinx)公司一直是可编程逻辑从软件设计到芯片实现完整解决方案方面的领军者。作为IEEE工业标准的VHDL硬件设计语言,在电子系统设计上得到广泛的应用。2.1 ISE软件简介 ISE是使用XILINX的FPGA的必备的设计工具,该软件为全球30多万用户提供可编程逻辑设计解决方案,直观的、从前端到后端的全面设计环境支持所有赛灵思产品系列,包括Virtex-II、Virtex-II Pro、Virtex-4 和 Virtex-5 平台 FPGA、 Spartan-3 代 FPGA和CoolRunner-II CPLD。它可以完成FPGA开发的全部流程,包括设计输入、仿真、综合、布局布线、生成BIT文件、配置以及在线调试等,功能非常强大。ISE除了我们功能完整,使用方便外,它的设计性能也非常好。笔者设计所用的ISE 9.1i版本专门为满足业界当前面临的主要设计挑战而优化,这些挑战包括时序收敛、设计人员生产力和设计功耗。除了运行速度提高2.5倍以外,ISE 9.1i还新采用了SmartCompile 技术,因而可在确保设计中未变更部分实施结果的同时,将硬件实现的速度再提高多达6倍。同时,ISE 9.1i 还优化了其最新65nm Virtex-5 平台独特的ExpressFabric技术,可提供比竞争对手的解决方案平均高出30%的性能指标。对于功耗敏感的应用, ISE 9.1i还可将动态功耗平均降低10%。2.2 Spartan3A系列器件简介2006年12月推出的Spartan-3A平台为I/O数量和功能比逻辑密度更重要的应用提供了一个成本更低的解决方案。Spartan-3A FPGA支持业界最广泛的I/O标准(26种),具备独特的功耗和配置功能以及防克隆(anti-cloning)安全性优势。因此可以为消费和工业领域中的新型大规模应用,如显示屏接口、视频/调谐器板接口和视频交换,提供灵活的、成本更低的解决方案。赛灵思公司2007年5月份宣布90nm I/O优化的Spartan-3A平台全线产品实现量产。这些产品包括Spartan-3A平台的全部五款器件:XC3S50A、XC3S200A、XC3S400A、XC3S700A和XC3S1400A。 随着产品架构的不断演进和成本的迅速降低,赛灵思Spartan系列FPGA自从1998年推出以来,应用范围不断扩展,目前已经成为全球消费电子和汽车应用设计人员的首选器件平台。其主要应用包括数字显示、手机、PDA、汽车后座娱乐系统和卫星导航系统。到目前为止,赛灵思公司的Spartan FPGA器件销售量已超过2.15亿片,累计销售额约为20亿美元。 早在2003年4月,赛灵思公司就通过代工合作伙伴UMC首家推出了经过验证的90nm工艺技术。通过工艺的持续改进和产量的不断提高,赛灵思公司Spartan-3新一代 FPGA产品的功耗持续大幅降低。Spartan-3 FPGA静态电流降低多达40%,而Spartan-3E FPGA则多达57%,单个功率轨的要求降低多达90%。与此同时,静态电流的任何降低都会使工作电流降低同样的数量。工作电流降低即可使用低成本的电源,同时减少系统中产生的热量,从而提高了系统可靠性。 最新的Spartan系列器件充分利用了这一工艺的优点,Spartan-3A、Spartan-3AN平台器件都具有低静态功耗功能。这些平台器件都包括可进一步将静态功耗降低40%的待机模式(Suspend Mode)。 2.3 VHDL语言简介 VHDL的英文全名是Very-High-Speed Integrated Circuit HardwareDescription Language,诞生于1982年。1987年底,VHDL被IEEE和美国国防部确认为标准硬件描述语言 。自IEEE公布了VHDL的标准版本,IEEE-1076(简称87版)之后,各EDA公司相继推出了自己的VHDL设计环境,或宣布自己的设计工具可以和VHDL接口。此后VHDL在电子设计领域得到了广泛的接受,并逐步取代了原有的非标准的硬件描述语言。1993年,IEEE对VHDL进行了修订,从更高的抽象层次和系统描述能力上扩展VHDL的内容,公布了新版本的VHDL,即IEEE标准的1076-1993版本,(简称93版)。现在,VHDL和Verilog作为IEEE的工业标准硬件描述语言,又得到众多EDA公司的支持,在电子工程领域,已成为事实上的通用硬件描述语言。有专家认为,在新的世纪中,VHDL于Verilog语言将承担起大部分的数字系统设计任务。 VHDL语言是一种用于电路设计的高级语言。它在80年代的后期出现。最初是由美国国防部开发出来供美军用来提高设计的可靠性和缩减开发周期的一种使用范围较小的设计语言 。 VHDL主要用于描述数字系统的结构,行为,功能和接口。除了含有许多具有硬件特征的语句外,VHDL的语言形式和描述风格与句法是十分类似于一般的计算机高级语言。VHDL的程序结构特点是将一项工程设计,或称设计实体(可以是一个元件,一个电路模块或一个系统)分成外部(或称可视部分,及端口)和内部(或称不可视部分),既涉及实体的内部功能和算法完成部分。在对一个设计实体定义了外部界面后,一旦其内部开发完成后,其他的设计就可以直接调用这个实体。这种将设计实体分成内外部分的概念是VHDL系统设计的基本点。与其他硬件描述语言相比,VHDL具有以下特点: 功能强大、设计灵活VHDL具有功能强大的语言结构,可以用简洁明确的源代码来描述复杂的逻辑控制。它具有多层次的设计描述功能,层层细化,最后可直接生成电路级描述。VHDL支持同步电路、异步电路和随机电路的设计,这是其他硬件描述语言所不能比拟的。VHDL还支持各种设计方法,既支持自底向上的设计,又支持自顶向下的设计;既支持模块化设计,又支持层次化设计。 支持广泛、易于修改由于VHDL已经成为IEEE标准所规范的硬件描述语言,目前大多数EDA工具几乎都支持VHDL,这为VHDL的进一步推广和广泛应用奠定了基础。在硬件电路设计过程中,主要的设计文件是用VHDL编写的源代码,因为VHDL易读和结构化,所以易于修改设计。 强大的系统硬件描述能力VHDL具有多层次的设计描述功能,既可以描述系统级电路,又可以描述门级电路。而描述既可以采用行为描述、寄存器传输描述或结构描述,也可以采用三者混合的混合级描述。另外,VHDL支持惯性延迟和传输延迟,还可以准确地建立硬件电路模型。VHDL支持预定义的和自定义的数据类型,给硬件描述带来较大的自由度,使设计人员能够方便地创建高层次的系统模型。 独立于器件的设计、与工艺无关设计人员用VHDL进行设计时,不需要首先考虑选择完成设计的器件,就可以集中精力进行设计的优化。当设计描述完成后,可以用多种不同的器件结构来实现其功能。 很强的移植能力VHDL是一种标准化的硬件描述语言,同一个设计描述可以被不同的工具所支持,使得设计描述的移植成为可能。 易于共享和复用VHDL采用基于库(Library)的设计方法,可以建立各种可再次利用的模块。这些模块可以预先设计或使用以前设计中的存档模块,将这些模块存放到库中,就可以在以后的设计中进行复用,可以使设计成果在设计人员之间进行交流和共享,减少硬件电路设计。第3章 相位表设计由电路知识我们知道,可以通过数字型的鉴相器把相位差转换成(平均)电压来测量。由此,我们想到,可以想办法用硬件数字电路直接求得鉴相器输出信号在某段时间的平均值,且该平均值直接以十进制BCD码表示。3.1 设计原理用数字的方法完成相位差的测量,最直接的方法是把相位差转换成时间间隔来测量。 a 被测信号波形b 放大整形后的信号波形 c 鉴相器输出信号的波形图1 把相位差转换成电压来测量 如图1,信号经过放大和整形和鉴相,假设鉴相器的输出信号为,有当远大于的周期T时,则有为了在FPGA中用数字电路完成对的测量,假设的样本为,当为高电平时令为1,为低电平时令为0,即把量化为1。则有:只要N的取值足够大,误差将会在允许的范围内。如果令N=3600K,则:只要k的值够大,误差将会在允许的范围内。由于的值要么为1要么为0,那么n从0时刻开始到3600k-1时刻结束对求累加和的过程,可以由计数器完成,即:计数器从0时刻开始到3600k-1时刻结束对进行计数,若的值为1,则计数器的计数结果加1,若的值为0,则计数器的计数结果保持原来的值不变。对累加的结果,还要除以k和乘以0.1,才是我们需要的相位差测量结果。由于k的是确定值,如果选定得的合适,可以通过把累加结果的尾部截去一段实现除以k的任务。或者也可以这样理解:先有一个模k的计数器,每计k个数产生一个进位,其后的计数器对该进位信号进行计数,其计数结果就相当于对累加以后除以k的结果。后面这个对进位信号进行计数的计数器,可以设计成级联的十进制BCD码计数器,这样就不再需要进行码型的转换了。至于乘以0.1,则简单地在显示时加一个小数点就可以实现。计数器的计数开始和结束、计数结束后结果的保存、以及开始下一次测量前对计数器进行清零,都需要一个控制电路进行时序控制。这个控制电路实际上由计数器外加一个译码器组成。可以看出,首先对两个输入的方波信号用数字鉴相器进行鉴相,再用硬件数字电路直接求得鉴相器输出信号在某段时间的平均值,就可以测量出这两个输入信号的相位差。而且采用这种方法不需要太复杂的电路,只用一些触发器、计数器、译码器、寄存器等简单的逻辑电路就可以完成设计。基于FPGA的相位表用硬件数字电路直接求得鉴相器输出信号在某段时间的平均值来测量相位差,其电路应该下面这些组成部分: 鉴相器: 对两路方波输入信号进行采样并鉴相,产生uCn 累加计数器: 对uCn进行累加与1/k平均 由模k计数器1、十进制BCD码计数器组成 模k计数器1:每计k个数产生一个进位,实现1/k计算 十进制BCD码计数器:对模k计数器产生的进位进行计数 控制电路: 由模k计数器2、模4096计数器、控制信号译码电路组成,产生控制信号 控制信号EN(0到3600k-1),控制累加计数器的启停 控制信号LD(3840k),控制锁存与显示译码电路对计数结果进行保存译码 控制信号Rst(3968k),在开始下一次测量前对累加计数器进行清零 寄存与显示译码电路 对十进制BCD数进行7段显示译码 保存结果,使显示稳定系统基于FPGA的相位表结构图如下所示:图2基于FPGA的相位表结构图3.2 各组成部分设计 1) 采样: 在每个时钟,对放大整形后的输入信号采样一次,即:在每个时钟,输入为高电平时采样值为1,输入为低电平时采样值为0,这样就得到了输入信号的样本uAn和uBn. 2) 鉴相: 鉴相器输出为,因为要求测量值范围为360°,其功能可以这样实现:当的上升沿来时,用与相与,产生一个信号CT。当CT=0时,说明超前(如图3所示则),这时可令= and (not ),这个测量的范围是;当CT=1时,说明滞后(如图4所示)或者说超前360°减去滞后角度(我们这里正是这样认为),此时有= or (not ),此时的测量范围是。图3 当超前时的图形图4 当滞后时的图形当超前时,经过采样、鉴相后的仿真波形如下所示:图5 当超前时的仿真波形当滞后时,经过采样、鉴相后的仿真波形如下所示: 图6 当滞后时的仿真波形3) 控制器: 控制器由一个模k计数器、一个模4096的计数器和一个译码器组成。模k计数器对时钟脉冲计数,每计k时钟产生一个进位;模4096的计数器对模k计数器的进位输出计数;译码器对模4096计数器的输出译码产生控制信号EN、CN和Rst: 􀂄 当模4096计数器的计数结果小于3600时EN为1否则为0; 􀂄 当模4096计数器的计数结果等于3840时CN为1否则为0; 􀂄 当模4096计数器的计数结果等于3968时Rst为1否则为0。仿真波形如下所示:图7 模4096计数器的仿真波形 4) 计数控制器: 当控制器的输出EN有效时对uCn进行累加计数。仿真图形如下所示图8计数控制器的仿真波形5) 累加计数器:累加计数器在控制器的控制下,当控制器的输出EN有效时对uCn进行累加计数。累加计数器包括模k计数器和BCD计数器。模k计数器每计k个数产生一个进位;BCD计数器由4个十进制BCD码计数器级联,对模k计数器的进位输出进行计数。 由于控制信号EN有效的时间是3600k个时钟,所以,累加计数器实际是在累计3600k个时钟内有多少k个时钟uCn为1。 对uCn累计结束以后,其结果将被送去锁存器保存;结果已经保存以后,在开始下一次测量以前,累加计数器在控制信号Rst的作用下被清零。其仿真波形如下: 图9累加计数器的仿真波形6) 锁存器: 锁存器用来保存结果,使显示稳定系统。当cn=0时,保存原有的数值,并保存输出。当cn=1时,锁存器的值等于新的输入值。其仿真波形如下图所示:图10锁存器的仿真波形7) BCD译码器: 与数据选择模块一起,用于将输入的十六位BCD码以扫描的形式分时输出四位BCD码,其仿真波形如下所示: 图11 BCD译码器的仿真波形8) LED译码器 LED译码器用于对BCD的译码,使七段LED显示器能正确显示。其仿真波形如下所示:图12 LED译码器的仿真波形以上各部分设计完成后,用顶层文件将他们联合起来,得出系统。结果仿真波形如下所示:图13 系统的仿真波形3.3 程序设计说明对于分频模块,是针对实验板的固有时钟设计的。因为实验板的输入时钟是48MHZ,其周期,七分频就使输入的时钟变为140ns,这样选的目的说明如下:为20HZ到20KHZ,当系统的输入为20HZ时,我们有。若要达到精度要求,又要快速显示,计数的时间最少必须为周期的30到40倍。现在设计数时间为35倍,则:计数时间:因为4096计数器计数小于3600时才计数,现在选择K=3500,令时钟周期为T, 则:。显示时间在: 这样保证在保证精度要求的情况下,快速显示。这也是选择K=3500的理由。参考文献1 皇晓辉.实验任务书.电子科技大学电子实验中心.2 电子工程专辑网.优化90nmI/O,赛林思SPARTAN-3A平台全线产品实现产量,2007.5.183 雷伏容. VHDL电路设计.北京: 清华大学出版社,2006.附 录程序1:顶层(top)模块module top(clk, Ain, Bin, ncs, dig, seg, dp); input clk; input Ain; input Bin; output ncs; output 2:0 dig; output 6:0 seg; output dp; wire uc,d_latch,cnt_ena,cnt_rst; wire 3:0D,C,B,A; wire 1:0S; assign ncs=0; phase_detector I1 ( .clk(clk), .Ain(Ain), .Bin(Bin), .pd_out(uc) );contr I2 ( .clk(clk), .d_latch(d_latch), .cnt_ena(cnt_ena), .cnt_rst(cnt_rst), .s(S) ); counter I3 ( .clk(clk), .clr(cnt_rst), .en1(cnt_ena), .en2(uc), .D(D), .C(C), .B(B), .A(A) ); display_ctrler I4 ( .d_load(d_latch), .D(D), .C(C), .B(B), .A(A), .s(S), .dig(dig), .seg(seg), .dp(dp) );endmodule程序2:鉴相器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity ph is Port ( clk : in STD_LOGIC; a,b : in std_logic; cout : out STD_LOGIC);end ph;architecture Behavioral of ph issignal t,c : std_logic;begins:process(a,b)beginif(a'event and a='1')thent<=a and b;end if;end process;r:process(clk,a,b)beginif(t='1')thenc<= a or (not b);elsec<= a and not b;end if;end process;w:process(clk,a,b)begin cout<=c and clk;end process;end Behavioral;程序3:分频模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter7 is Port ( clk : in STD_LOGIC; cout : out STD_LOGIC );end counter7;architecture Behavioral of counter7 issignal temp : std_logic_vector(3 downto 0 ) :="0000"beginprocess(clk)beginif(clk'event and clk='1')thenif(temp=7)then temp<="0000" cout<='1'else temp<=temp+1; cout<='0'end if;end if;end process;end Behavioral;程序4:模K(K=3500)计数器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter3500 is Port ( clk : in STD_LOGIC; cout : out STD_LOGIC);end counter3500;architecture Behavioral of counter3500 issignal temp : std_logic_vector(11 downto 0) :="000000000000"beginprocess(clk)beginif(clk'event and clk='1')then if(temp= 3500)then temp<= "000000000000" cout<='1' else cout<='0' temp<=temp + 1; end if;end if;end process;end Behavioral;程序5:模4096计数器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter4096 is Port ( clk : in STD_LOGIC; en : out STD_LOGIC; cn : out STD_LOGIC; rst : out STD_LOGIC );end counter4096;architecture Behavioral of counter4096 issignal temp : std_logic_vector(11 downto 0 ) :="000000000000"beginprocess(clk)beginif(clk'event and clk='1')thenif(temp=4095)then temp<="000000000000"else temp<=temp+1;end if;if(temp<=3600)then en<='1'else en<='0'end if;if(temp=3840)then cn<='1'else cn<='0'end if;if(temp=3960)then rst<='1'else rst<='0'end if; end if;end process;end Behavioral;程序6:计数使能模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity counter_en is Port ( en : in STD_LOGIC; cin : in std_logic; c : out STD_LOGIC);end counter_en;architecture Behavioral of counter_en isbeginc<= cin and en;end Behavioral;程序7:十BCD计数模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity d_bcd is Port ( en : in STD_LOGIC; rst : in STD_LOGIC; cout : out STD_LOGIC_VECTOR(15 DOWNTO 0) :="0000000000000000" );end d_bcd;architecture Behavioral of d_bcd issignal temp : std_logic_vector(15 downto 0) :="0000000000000000"beginprocess(en,rst)beginif(rst = '1')then temp<="0000000000000000"elseif(en'event and en='1')then if(temp(3 downto 0)= 9)then temp(3 downto 0)<="0000" if(temp(7 downto 4) = 9)then temp(7 downto 4)<="0000" if(temp(11 downto 8) = 9)then temp(11 downto 8)<="0000" if(temp(15 downto 12) = 9)then temp(15 downto 12 )<="0000" else temp(15 downto 12)<=temp(15 downto 12)+1; end if; else temp(11 downto 8)<=temp(11 downto 8)+1; end if; else temp(7 downto 4)<=temp(7 downto 4)+1; end if; else temp(3 downto 0)<=temp(3 downto 0)+1; end if;end if;end if;end process;cout<=temp;end Behavioral;程序8:BCD译码器模块use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity mux1 is Port ( s : in std_logic_vector(1 downto 0); cin : in STD_LOGIC_vector(15 downto 0); d_out : out STD_LOGIC_vector(3 downto 0) );end mux1;architecture Behavioral of mux1 isbegind_out(3)<=(cin(3) and (not s(0) ) and (not s(1) or(cin(7) and s(0) and (not s(1)or(cin(11) and (not s(0) ) and s(1) or(cin(15) and s(1) and s(0);d_out(2)<=(cin(2) and (not s(0) ) and (not s(1) or(cin(6) and s(0) and (not s(1)or(cin(10) and (not s(0) ) and s(1)or(cin(14) and s(1) and s(0);d_out(1)<=(cin(1) and (not s(0) ) and (not s(1) or(cin(5) and s(0) and (not s(1)or(cin(9) and (not s(0) ) and s(1)or(cin(13) and s(1) and s(0);d_out(0)<=(cin(0) and (not s(0) ) and (not s(1) or(cin(4) and s(0) and (not s(1)or(cin(8) and (not s(0) ) and s(1)or(cin(12) and s(1) and s(0);end Behavioral;程序9:锁存器模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity reg is port( cn :in std_logic; cin : in std_logic_vector(15 downto 0); cout : out std_logic_vector(15 downto 0) );end reg;architecture Behavioral of reg issignal temp : std_logic_vector(15 downto 0):="0000000000000000"beginprocess(cn,cin)begin if(cn='1')then temp<=cin; else temp<=temp; end if;end process;cout<=temp;end Behavioral;程序10:数据选通模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity sel is Port ( clk2 : in STD_LOGIC; s : out STD_LOGIC_vector(1 downto 0) );end sel;architecture Behavioral of sel issignal temp : std_logic_vector(1 downto 0) :="00"beginprocess(clk2)begin if(clk2'event and clk2 ='1')then if(temp ="11")then temp<="00" else temp<=temp + 1; end if;end if;end process;s<=temp;end Behavioral;程序11:LED显示模块library IEEE;use IEEE.STD_LOGIC_1164.ALL;use IEEE.STD_LOGIC_ARITH.ALL;use IEEE.STD_LOGIC_UNSIGNED.ALL;entity led is Port ( data_in : in STD_LOGIC_vector(3 downto 0) :="1000" data_out: out STD_LOGIC_vector(6 downto 0) );end led;architecture Behavioral of led isbeginprocess(data_in)begin case data_i

    注意事项

    本文(课程设计(论文)基于FPGA的数字音频相位表设计与实现.doc)为本站会员(仙人指路1688)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开