基于VHDL数控分频器设计
VHDL数字系统课程设计报告-5分频器的设计
![VHDL数字系统课程设计报告-5分频器的设计](https://img.taocdn.com/s3/m/185fadfff46527d3250ce03b.png)
图2 1
电子与信息工程系 2013 年 12 月
占空比为 1:1 的奇数分频器
(2) 占空比为 X/(2N+1)或(2N+1-X)/(2N+1)分频,用模(2N+1)计数器模块可以实 现。取 0 至 2N-1 之间一数值 X(0),当计数器时钟上升沿从 0 开始计数到 X 值时输出时钟翻 转一次,在计数器继续计数达到 2N 时,输出时钟再次翻转并对计数器置一复位信号,使之 从 0 开始重新计数,即可实现。如图 4 所示,由四个计数器生成了两个占空比 2:3 的分频 器 step1、和 step2。step1 由上升沿触发器出发,step2 由下降沿触发器出发。然后经过或 门生成占空比为 1:1 的分频器。
要设计占空比为 50%的奇数(n)倍分频器,可以先分别设计从时钟上升沿、下降沿开始 的占空比为(n-1)/2n 的分频器 A,B。将 A 与 B 相或结果就是占空比为 50%的奇数倍分频器。 因为 A,B 产生的信号的高电平持续时间均比低电平持续时间少一个时钟周期,B 相对 A 来说 可以说是延时了半个时钟,那么 A 与 B 进行或运算,则结果的高电平持续时间增加了半个时 钟周期,而低电平持续时间则减少了半个时钟周期。因此占空比达到 50%。
四、系统调试与结果............................................................................................. 4 五、主要元器件与设备......................................................................................... 5 六、课程设计体会与建议..................................................................................... 5
基于VHDL的全数字分数分频器设计
![基于VHDL的全数字分数分频器设计](https://img.taocdn.com/s3/m/0736c273f242336c1eb95e1b.png)
若前向通道采用模Ⅳ计数器实现.则输出波形 高电平占0.5或者1个输入波形周期宽度,具体是0.5 还是1.同样由输出波形周期是否为输入波形周期 的整数倍决定。若为整数倍,则占1个输入波形周期 宽度.否则占0.5个。
图4是前向通道采用了2个D触发器级联实现4 分频的仿真结果,输出波形elk—out占空比为3:4或者 4:4.分别对应于输出周期为输入周期的3.5倍与4倍 的情况。
m=b一(Ⅱrood b),
F。,,=I…a/5]+1,
疋=[胡],
(、 37 )
/z=a rood b
其中f.]表示取整,o mod 6表示求。除以b的余数。 如要设计一个5.1分频的分频器。则昭51,6=10,所
以由式(3)可得m=9,E---6,F。=5,n=l。 2.2任意分数分频器的实现
分频器的实现主要由两个模块实现.一个模块 是可预置数的可控双模分频器.另一个模块是可预
万方数据
其慨。=志≯。^=寿。
网2 3.5分频器仿真波j髟
采用VHDL语言设计上述电路(令N=4).并进行 仿真得到波形如图2所示.图中clk in为输入波形.比
锨五和clk—in可以得出:勘的每个周期中f.kgclk.in少
一个正脉冲。但是.观察模Ⅳ计数器输出temp.就可 以发现,实际上在矗的每个周期中£是ELelkin多了一个 正脉冲j分析如下:没此时刻为图中五的第一个高电 平下降沿前一刻,^=1,然后clk in由1变为0,导致异 或门的输出£变为1,£的上升沿使模Ⅳ(模4)计数器 计数.计数器结果加1。由于计数器计到了最大值, 故clk out输出高电平1.elk out的上升沿又促使2分频 器工作,使磊由1变为0,然后兀反馈回异或门得输人 端,与ckl in通过异或门使7:变为0.反馈使得‘由0变 为1.以后经过一段时问又返回0。
VHDL分频器课程设计
![VHDL分频器课程设计](https://img.taocdn.com/s3/m/01305a14ff4733687e21af45b307e87101f6f8da.png)
VHDL分频器课程设计一、课程目标知识目标:1. 学生能理解VHDL语言的基本概念,掌握VHDL语言的基本语法结构;2. 学生能掌握分频器的工作原理,了解分频器在数字系统中的应用;3. 学生能运用VHDL语言设计简单的分频器电路,并实现预期的分频功能。
技能目标:1. 学生能运用所学知识,独立完成VHDL分频器代码编写;2. 学生能通过仿真软件对所设计的分频器进行功能验证,并分析其性能;3. 学生能运用所学技能解决实际工程问题,具备一定的实践操作能力。
情感态度价值观目标:1. 学生对VHDL语言及数字系统设计产生兴趣,提高学习积极性;2. 学生通过课程学习,培养团队协作精神,提高沟通与交流能力;3. 学生在课程实践中,养成严谨、认真的学习态度,树立正确的工程观念。
课程性质:本课程为实践性较强的专业课,要求学生具备一定的数字电路基础和VHDL语言知识。
学生特点:学生处于高年级阶段,具有一定的专业基础知识和实践能力,但个体差异较大。
教学要求:结合学生特点,注重理论与实践相结合,充分调动学生的学习积极性,提高学生的实践操作能力。
在教学过程中,注重培养学生的团队协作精神和工程观念。
通过本课程的学习,使学生能够掌握VHDL分频器的设计方法,为后续相关课程的学习和实际工程应用打下坚实基础。
二、教学内容1. VHDL语言基础回顾:复习VHDL的基本语法、数据类型、信号与变量、行为描述与结构描述等基本概念,确保学生具备扎实的VHDL编程基础。
教材章节:第二章 VHDL语言基础内容列举:基本语法、数据类型、信号与变量、行为描述与结构描述2. 分频器原理及分类:介绍分频器的工作原理、分类及性能指标,使学生了解不同类型分频器的优缺点及适用场景。
教材章节:第五章 分频器设计与实现内容列举:分频器原理、分类、性能指标3. VHDL分频器设计方法:讲解基于VHDL语言的分频器设计方法,包括计数器法、移位寄存器法等,并分析各种方法的优缺点。
基于VHDL的分频器设计[开题报告]
![基于VHDL的分频器设计[开题报告]](https://img.taocdn.com/s3/m/2e8aa70426fff705cd170a78.png)
开题报告电子信息工程基于VHDL的分频器设计三、课题研究的方法及措施由于本课题所设计的分频器基于EDA技术,应用VHDL硬件语言设计完成的,因此选择合适的硬件解决原理对分频器性能至关重要的,为了满足不同系统功能需求的分频,本课题将阐述不同原理,不同分频器,同种分频不同原理的设计方案。
占空比可控的整数分设计方案,原理为计数器为带预置数的计数器,其设计的特殊之处在于:可以根据需要,调整数据的位宽,而且计数的初始值是从l开始的,此处计数初始值的设定是设计的一个创新,这样做的目的是为了配合后面比较器的工作,计数器的输出数据作为比较器的输入,比较器的另一输入作为控制端,控制高低电平的比例,从而达到占空比可调的目的。
原理图如图1所示。
图1 占空比可控的原理图部分小数分频的基本原理是采用脉冲吞吐计数器和锁相环技术先设计两个不同分频比的整数分频器,然后通过控制单位时间内两种分频比出现的不同次数来获得所需要的小数分频值。
如设计一个分频系数为lO.1的分频器时。
可以将分频器设计成9次10分频,1次11分频这样总的分频值为如式1所示。
F=(9×10+lxl 1)/(9+1)=10.1 (式1)从这种实现方法的特点可以看出,由于分频器的分频值不断改变.因此分频后得到的信号抖动较大。
当分频系数为N-0.5(N为整数)时,可控制扣除脉冲的时间,以使输出成为一个稳定的脉冲频率。
而不是一次N分频.一次N-1分频。
图2给出了通用小数分频器的电路组成。
图2通用小数分频器的电路组成改进的小数分频设计方案,将两个整数分频器由一个整数分频器和一个半整数分频器代替,结果在如上分析的两个性能方面都有所提高。
利用参数化的设计思想和VHDL描述语言与原理图输入方法相结合的方式,设计并实现了一种抖动性能好且通用性强的小数分频器。
其原理图如下图3。
图3改进小数分频原理图四、课题研究进度计划毕业设计期限:自2011年12月10日至2012年3月10日。
基于VHDL的数字频率计设计
![基于VHDL的数字频率计设计](https://img.taocdn.com/s3/m/2adf4198be1e650e53ea99b0.png)
XXXXXXX学院学生毕业设计(论文)报告系别:电子与电气工程学院专业:电子信息工程技术班号:学生姓名:学生学号:设计(论文)题目:基于VHDL的数字频率计设计指导教师:设计地点:XXXXXXX学院起迄日期:20XX.9.1~20XX.10.31毕业设计(论文)任务书专业电子信息工程技术班级姓名一、课题名称:基于VHDL的数字频率计设计二、主要技术指标:1. 频率范围为:1Hz~50MHz。
2. 结果用数码管十进制显示。
3. 输入信号电压幅度为50mV~5V。
三、工作内容和要求:1. 构建大体的设计方案,并了解其内容。
2. 构建出大体的顶层原理设计框图。
3. 对底层的每个电路模块的设计,并通过软件MAX+PLUS2完成程序的编写通过。
4. 对整个原理框图进行编译并通过。
5. 对整个仿真图编译通过。
四、主要参考文献:[1] 陈必群. EDA技术与项目训练[M] ,常州:常州信息职业技术学院,2009年.[2] 王凤英. 基于FPGA的数字频率计设计与仿真[J].科技资讯,,2008,15(8):1—10[3] 谭会生,张昌凡.EDA技术及应用.西安[M]:电子科技大学出版社,2001年[4] 张凯,林伟.VHDL实例剖析[M].北京:国防工业出版社,2004年[5] 刘玉良,李玲玉,邓勇全.吉林:用EDA方法设计数字系统的灵活性[D],2002年[6] 宋万杰等.CPLD技术及其应用.[M].西安:西安电子科技大学出版社,2000年.学生(签名)年月日指导教师(签名)年月日教研室主任(签名)年月日系主任(签名)年月日毕业设计(论文)开题报告基于VHDL的数字频率计设计目录摘要Abstract第1章前言 (1)第2章数字频率计的要求 (2)2.1 主要技术指标 (2)2.2 工作内容和要求 (2)第3章数字频率计的方案设计.............................. (3)3.1 基本原理 (3)3.1.1 频率计测量频率的设计原理 (3)3.1.2 频率计测量频率的原理图 (3)3.2 设计流程图 (3)第4章数字频率计各模块功能介绍 (4)4.1 频率控制模块的VHDL语言源程序 (4)4.1.1 频率控制模块的程序 (4)4.2 十进制加法计数器CNT10的VHDL语言源程序 (5)4.2.1 十进制计数器的程序 (5)4.2.2 十进制计数器的顶层设计 (6)4.3系统模块的VHDL语言源程序 (7)4.3.1系统模块的设计 (7)4.3.2 系统模块的程序 (7)4.4 锁存器LOCK的VHDL语言源程序 (10)4.4.1 锁存器LOCK的程序 (10)4.5 译码模块DECODER的VHDL语言源程序 (11)4.5.1 译码模块DECODER的程序 (11)4.6四选一选择器MUX41的VHDL语言源程序 (12)4.6.1 MUX41程序 (12)4.7 四进制计数器CNT4的VHDL语言源程序 (13)4.7.1 四进制计数器CNT4的程序 (13)4.8 250分频器的VHDL语言源程序 (14)4.8.1 250分频器的程序 (14)第5章数字频率计仿真图 (15)5.1 频率控制模块仿真波形图 (15)5.2 十进制计数器模块仿真波形图 (15)5.3 锁存模块仿真波形图 (15)5.4 译码模块波形仿真图 (16)5.5 四选一选择器MUX41的仿真图 (16)5.6 四进制计数器CNT4的仿真图 (16)5.7 250分频器的仿真图 (17)第6章频率计顶层原理图的输入 (18)第7章下载测试 (19)第8章结束语 (20)参考文献答谢辞数字频率计是直接用十进制数字来显示被测信号频率的一种测量装置。
VHDL语言各种分频器的设计
![VHDL语言各种分频器的设计](https://img.taocdn.com/s3/m/b0e017c5a1116c175f0e7cd184254b35eefd1ad3.png)
硬件描述
使用VHDL,设计师可以描述电路 的结构、行为和功能,而无需关 心具体的物理实现细节。
设计层次
VHDL适用于不同层次的设计,从 门级到系统级,使得设计者可以 专注于设计逻辑而不是物理实现。
VHDL语言基本结构
实体
描述电路的输入和输出端口。
结构体
描述电路的内部逻辑和行为。
库
包含预定义的元件和函数。
end if;
end process;
8分频器设计
end Behavioral;
```
16分频器设计
16分频器:将输入频率降低到原来的 十六分之一。
VHDL代码实现
```vhdl
16分频器设计
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
03
if count = 3 then
4分频器设计
q <= '1';
count <= 0;
4分频器设计
01
else
02
q <= '0';
03
count <= count + 1;
4分频器设计
end if;
end if; end process;
4分频器设计
end Behavioral; ```
配置
指定实体和结构体的关联方式。
VHDL语言数据类型
标量类型
包括整数、实数、布尔等。
记录类型
组合不同数据类型的结构体。
向量类型
如位向量,用于表示位或字节。
数组类型
用VHDL语言设计频率计
![用VHDL语言设计频率计](https://img.taocdn.com/s3/m/ca2780de6f1aff00bed51e3e.png)
模块设计 分频器 由于设计的需要,我们进行三种分频的设 计:10分频、100分频、1000分频。这三 种分频对500Hz的信号进行分频,得到的是 50Hz、5Hz、0.5Hz的信号,将它们作为计 数闸门。
图4 分频器模块
闸门 闸门选择电路实际就是3选1电路,相对简 单,分频所得信号一起送入闸门,在控制 器的控制下,选出其中一路信号作为计数 闸门送入计数器。
图5 闸门模块
计数器 我们采用的是直接测频法,所以计数器就是在闸 门信号有效期间对被测信号进行计数。直接测频 法
图6 计数器模块
锁存器 锁存器用于将计数器的计数结果锁存,以 便于较稳定的显示测量结果。计数器完成 计数后,计数结果要立即锁存,在闸门低 电平期间,即计数器停止工作期间,计数 的结果要在锁存器中保持,直到新的计数 结果产生为止。
用VHDL语言设计数字频率计
付宝成 2006年6月
第一部分 设计要Байду номын сангаас及意义
一、设计的意义 频率测量是电子测量领域最基本的测量之一。随 着数字电子技术的发展,频率测量成为一项越来 越普遍的工作,测频原理及测频方法受到越来越 多的关注。 具有50多年发展历史的频率计是数字电路中的典 型仪器。它是实验室中常用的仪器之一,同时也 是计算机、通讯设备、音频视频等科研领域不可 缺少的测量仪器,是一种典型的数字化、自动化 的测量仪器,并越来越趋于小型化。
二、设计要求 测量方波信号的频率 测量的频率范围是1~100KHz 测量结果用十进制数显示 具有自动校验和测量两种功能 具有超量程报警功能,在超出测量范围 时,发出指示信号
第二部分 设计的内容
频率测量一般有测频法与测周期法两种基 本方法,其原理如下: 测频法:由标准时钟分频产生一门控信号, 在门控信号下对输入的被测信号周期进行 计数,也叫直接测频法。如图1所示。 设输入信号频率为Fx,门控信号有效电平 时间为T,在此有效电平时间内的计数值为 N,则输入信号的频率为:Fx=N/T。
实验六 基于VHDL语言的分频器设计与实现
![实验六 基于VHDL语言的分频器设计与实现](https://img.taocdn.com/s3/m/af5e981e14791711cc791751.png)
实验六基于VHDL语言的分频器设计与实现报告一、实验目的1、进一步掌握VHDL语言的基本结构及设计的输入方法。
2、掌握VHDL基本逻辑电路的综合设计应用。
二、实验原理在数字电路系统中,分频电路应用得十分广泛。
例如,工程人员常常使用分频电路来得到数字通信中的帧头信号、选通信号以及中断信号等。
因此,分频电路在数字电路系统的设计中也应该作为重要的基本电路来掌握,从而给今后的一些设计带来方便。
三、实验内容1、设计并实现一个6分频的分频电路,要求其输出信号的占空比为50%。
请分析分频电路设计原理并编写VHDL语言程序,利用Max+PlusII开发软件对其进行编译和仿真。
6分频电路实现程序代码如下:2、在实际数字电路设计过程中,往往需要得到占空比不是1:1的分频时钟,方法是:首先描述一个计数器电路,然后根据计数器电路的并行输出信号来决定输出时钟的高低电平。
请设计、编写VHDL 语言程序实现分频后时钟信号的占空比为1:15的16分频电路,并利用Max+PlusII开发软件对其进行编译和仿真。
四、实验设计1.程序代码:图library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clk_div6 isport(clk:in std_logic;clk_out:out std_logic);end clk_div6;architecture rtl of clk_div6 issignal clk_temp:std_logic;beginprocess(clk)variable counter:integer range 0 to 15;constant md:integer:=2;beginif clk'event and clk='1'thenif counter=md thencounter:=0;clk_temp<=not clk_temp;elsecounter:=counter+1;end if;end if;end process;clk_out<=clk_temp;end rtl;2.仿真结果:五、实验结果分析本实验利用VHDL语言设计分频电路,目的在于进一步掌握VHDL语言的基本结构及设计的输入方法,掌握VHDL基本逻辑电路的综合设计应用。
(VHDL实验报告)模值12计数器、分频器的设计
![(VHDL实验报告)模值12计数器、分频器的设计](https://img.taocdn.com/s3/m/6318757c7fd5360cba1adbc2.png)
电子科技大学成都学院学院指导教师模值12计数器,分频器设计二、实验目的1、了解二进制计数器的工作原理。
2、时钟在编程过程中的作用。
3、学习数控分频器的设计、分析和测试方法。
4、了解和掌握分频电路实现的方法。
5、掌握EDA技术的层次化设计方法。
三、实验原理(1)二进制计数器中应用最多、功能最全的计数器之一,含异步清零和同步使能的加法计数器的具体工作过程如下:在时钟上升沿的情况下,检测使能端是否允许计数,如果允许计数(定义使能端高电平有效)则开始计数,否则一直检测使能端信号。
在计数过程中再检测复位信号是否有效(低电平有效),当复位信号起作用时,使计数值清零,继续进行检测和计数。
其工作时序如下图所示:(2)数控分频器的功能就是当输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比,数控分频器就是用计数值可并行预置的加法计数器来设计完成的,方法是将计数溢出位与预置数加载输入信号相接得到。
(1)“模值12计数器的设计”的实验要求完成的任务是在时钟信号的作用下,通过使能端和复位信号来完成加法计数器的计数。
实验中时钟信号使用数字时钟源模块的1HZ信号,用一位拨动开关K1表示使能端信号,用复位开关S1表示复位信号,用LED模块的LED1~LED4来表示计数的二进制结果。
实验L ED 亮表示对应的位为‘1’,LED灭表示对应的位为‘0’。
通过输入不同的值模拟计数器的工作时序,观察计数的结果。
实验箱中的拨动开关、与FPGA 的接口电路,LED 灯与FPGA 的接口电路以及拨动开关、LED 与F PGA 的管脚连接在实验一中都做了详细说明,这里不在赘述。
数字时钟信号模块的电路原理如下图所示,其时钟输出与F PGA 的管脚连接表如下图所示:信号名称对应FPGA 管脚名说明DIGITAL-CLK C13 数字时钟信号送至FPGA 的C13按键开关模块的电路原理如下图所示:按键开关的输出与F PGA 的管脚连接表如下图所示:五、实验步骤(一)模值12计数器的设计1、建立工程文件1)运行QUARTUSII 软件。
分频器设计报告
![分频器设计报告](https://img.taocdn.com/s3/m/178377ca6137ee06eff9189d.png)
数控分频器设计报告一、设计目的学习数控分频器的设计、分析和测试方法。
以quartusⅡ为开发平台,用VHDL语言和原理图结合的方法设计占空比为50%的5分频电路、6分频电路和5.5分频电路,通过功能选择键选择需要的分频比。
二、功能描述CLK输入为待分频的信号。
当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为;当S1S0输入为时,该数控分频器输出分频比为;三、设计原理数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比。
用VHDL语言设计占空比为50%的任意奇数次、偶数次分频电路,用原理图输入法设计5.5分频电路,通过3选一数据选择器选择需要的分频电路,从而达到实验目的。
四、设计流程(1)占空比为50%的5分频电路1、新建文件夹d:\fenpin52、打开quartusⅡ创建工程fenpin53、新建vhdl文本,输入设计程序(见附1),保存为fenpin5.vhd4、启动编译,建立仿真波形图(见附2)5、将该5分频电路封装设置成可调用的元件。
附图1:附图2:(2)占空比为50%的6分频电路1、新建文件夹d:\fenpin62、打开quartusⅡ创建工程enpin63、新建vhdl文本,输入设计程序(见附3),保存为fenpin6.vhd4、启动编译,建立仿真波形图(见附4)5、将该6分频电路封装设置成可调用的元件。
附图3:附图4:(3)5.5分频电路1、用VHDL输入法设计模为6的计数器M6并设置为可调用元件(VHDL文件见附5)。
2、设计D触发器DFF,实现其clk上升沿到来时Q输出取反(附6)。
3、新建文件夹d:\fenpin3,将计数器M6和触发器DFF的vhd文件和bsf文件复制到fenpin3文件夹下,打开quartusⅡ创建工程fenpin34、设计5,5分频电路的顶层文件(附7),保存为fenpin3.bdf5、启动编译,建立仿真波形图(见附8)6、将该5.5分频电路封装设置成可调用的元件。
使用VHDL进行分频器设计
![使用VHDL进行分频器设计](https://img.taocdn.com/s3/m/e2d2dfb9e009581b6bd9ebec.png)
使用VHDL 进行分频器设计作者:ChongyangLee摘要使用VHDL 进行分频器设计作者:ChongyangLee本文使用实例描述了在FPGA/CPLD 上使用VHDL 进行分频器设计,包括偶数分频、非50%占空比和50%占空比的奇数分频、半整数(N+0.5)分频、小数分频、分数分频以及积分分频。
所有实现均可通过Synplify Pro 或FPGA 生产厂商的综合器进行综合,形成可使用的电路,并在ModelSim 上进行验证。
目录概述 (1)计数器 (1)普通计数器 (1)约翰逊计数器 (3)分频器 (4)偶数分频器 (4)奇数分频器 (6)半整数分频器 (9)小数分频器 (11)分数分频器 (15)积分分频器 (18)概述分频器是数字电路中最常用的电路之一,在FPGA 的设计中也是使用效率非常高的基本设计。
基于FPGA 实现的分频电路一般有两种方法:一是使用FPGA 芯片内部提供的锁相环电路,如ALTERA 提供的PLL (Phase Locked Loop),Xilinx 提供的DLL(Delay Locked Loop);二是使用硬件描述语言,如VHDL、Verilog HDL 等。
使用锁相环电路有许多优点,如可以实现倍频;相位偏移;占空比可调等。
但FPGA 提供的锁相环个数极为有限,不能满足使用要求。
因此使用硬件描述语言实现分频电路经常使用在数字电路设计中,消耗不多的逻辑单元就可以实现对时钟的操作,具有成本低、可编程等优点。
计数器计数器是实现分频电路的基础,计数器有普通计数器和约翰逊计数器两种。
这两种计数器均可应用在分频电路中。
普通计数器最普通的计数器是加法(或减法)计数器。
下面是加法计数器的VHDL实现,其Synplify Pro下的RTL View如图1所示。
--file Name: ripple.vhd--Description: 带复位功能的加法计数器library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity ripple isgeneric (width: integer := 4);port(clk, rst: in std_logic;cnt: out std_logic_vector(width - 1 downto 0));end ripple;architecture a of ripple issignal cntQ: std_logic_vector(width - 1 downto 0);beginprocess(clk, rst)beginif (rst = '1') thencntQ <= (others => '0');elsif (clk'event and clk = '1') thencntQ <= cntQ + 1;end if ; end process ;cnt <= cntQ;end a;代码 1 加法计数器 VHDL 代码图 1 加法计数器 RTL 视图加法计数器的Test Bench 代码如下所示,在ModelSim 下进行功能仿真,仿真 波形结果如图 2所示。
VHDL数字系统课程设计报告-5分频器的设计
![VHDL数字系统课程设计报告-5分频器的设计](https://img.taocdn.com/s3/m/185fadfff46527d3250ce03b.png)
图2 1
电子与信息工程系 2013 年 12 月
占空比为 1:1 的奇数分频器
(2) 占空比为 X/(2N+1)或(2N+1-X)/(2N+1)分频,用模(2N+1)计数器模块可以实 现。取 0 至 2N-1 之间一数值 X(0),当计数器时钟上升沿从 0 开始计数到 X 值时输出时钟翻 转一次,在计数器继续计数达到 2N 时,输出时钟再次翻转并对计数器置一复位信号,使之 从 0 开始重新计数,即可实现。如图 4 所示,由四个计数器生成了两个占空比 2:3 的分频 器 step1、和 step2。step1 由上升沿触发器出发,step2 由下降沿触发器出发。然后经过或 门生成占空比为 1:1 的分频器。
七、参考文献
[1] 夏宇闻. Verilog 数字系统设计教程. 北京: 北京航空航天大学出版社,2008 年; [2] 张继刚、李维忠. 现代电子技术. 内蒙古工业大学,2008 年,31(6); [3] 刘宝琴. 数字电路与系统[M]. 北京:清华大学出版社,1993 年; [4] 陈高峰等编. 数字电子技术基础. 安徽大学电子信息工程学院,2012 年; [5] 谈艳云、罗志强.电子技术基础. 北京:北京航空航天大学,2002 年,23(6)。
安康学院
HDL 数字系统课程设计报告书
课题名称: 占空比为 1:1 的奇数分频器设计 姓 名: 学 号: 院 系: 专 业: 指导教师: 时 间:
课程设计项目成绩评定表
设计项目成绩评定表
一、设计任务及要求: 1、设计任务:
设计一个占空比为 1:1 的奇数分频器逻辑电路。
2、要 求:
1、设计分频器的分频系数为 5。 2、设计分频器占空比为 1:1。 3、设计分频器为 5 分频器。 4、设计分频器输入信号:时钟信号 CLK。
数控分频器的VHDL设计
![数控分频器的VHDL设计](https://img.taocdn.com/s3/m/5e5264f50740be1e640e9a4f.png)
广州大学学生实验报告实验室:电子信息楼 317EDA 2017 年 11 月 1 日学院机电学院年级、专业、班电信151姓名苏伟强学号1507400051实验课程名称可编程逻辑器件及硬件描述语言实验成绩实验项目名称实验6 数控分频器的VHDL设计指导老师秦剑一实验目的a)学习数控分频器的设计、分析和测试方法;二实验原理a)数控分频器的功能就是当在输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比. 三实验设备a)EDA实验箱,示波器四实验内容和结果a)分析程序各语句功能,设计原理,逻辑功能,并详述P_REG,和P_DIV的功能。
程序如图1 设计原理:本程序设计的主要思路是,设计一个单向计数器,从预置数D(起点)开始计数,计数到设定的最大值(0XFF),输出信号POUT取反,与此同时,计数器回归到预置数起点D继续计数,继续计数到最大值后,POUT再次取反,如此往复,产生了一个原始时钟信号的分频信号POUT,频率为)(HzDXFFff clk-=P_SEG的功能:P_SEG部分负责从计数起点D,在每一次时钟的上升沿往上计数,并且在计数到OXFF的时候产生一个信号FULL=1,传递到P_DIV进行动作处理。
P_DIV的功能:P_DIV的触发信号是FULL=0到FULL=1的上升沿跳变,意思就是说,当计数到TOP值的时候,P_DIV会产生动作,具体的动作是将电平CNT2取反,然后赋值给输出FOUT,使得输出也取反.可以看到随着计数不断从起点计数到满值,在满值的时候对输出电平进行取反,可以得到一个占空比为50%的方波信号,该信号的频率是)(HzDXFFff clk-=b)如图2是程序的仿真波形图图2可以看到随着计数起点D的升高,计数到最大值OXFF所需要的时间更短了,也就是说电平取反的周期更短了,得到的输出信号的频率必然升高,同时也符合)(HzDXFFff clk-=的变换规律.c)目标器件为EP3C40Q240,电路选择模式1,键2/键1(PIO7—PIO0)负责输入8位预置数D,CLK接clock0,FOUT接扬声器,通过查找芯片引脚手册,找到对应的PIN脚,并且设置assignment editor 引脚映射,如图3所示:图3d)下载程序到开发板,可以看到,随着输入的D越来越大,蜂鸣器的声音越来越尖锐,说明输出信号的频率越来越高,接示波器,这里改变高四位(从0—F),低四位不变,观察示波器波形以及频率如图所示:e)思考题:设计一个正负脉冲宽度可控的分频器,输出正负脉冲宽度由两个8位输入控制。
实验五数控分频器的设计
![实验五数控分频器的设计](https://img.taocdn.com/s3/m/07f28da7f90f76c661371a7e.png)
IF CNT2='1' THEN FOUT<='1';
ELSE FOUT<='0';
END IF;
END IF;
END PROCESS P_DIV;
END;
课后预习
下次实验做实验指导书上的实验7(P57) 设计程序可参考EDA实验教材P196-198中的内容
表1 简谱中音名与频率的关系
2、实验内容及步骤
(参照实验教材P53 实验 3 中的内容) 设计程序可参考EDA实验教材P191-192中 的内容
实验报告要求
写出实验目的、设计要求、设计源程 序,波形仿真,并详述硬件实验过程和实验 结果。
提示:
建议选实验电路模式5,输出FOUT 接扬 声 器 ( SPKER : PIN 3 ) , 时 钟 CLK 接 clock0(引脚号为2),用短路帽选65536Hz信号, 键1~键8负责输入预置数D。
P_DIV:PROCESS(FULL)—由于P_REG进程数控 分频输出的FULL是脉宽极窄的脉冲波,为便于 驱动扬声器, P_DIV进程为一个二分频计数器, 使到达扬声器的波形为对称方波。
VARIABLE CNT2:STD_LOGIC;
BEGIN
IF FULL'EVENT AND FULL='1'
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY PULSE IS PORT(CLK:IN STD_LOGIC; D: IN STD_LOGIC_VECTOR(7 DOWNTO 0); FOUT:OUT STD_LOGIC); END; ARCHITECTURE ONE OF PULSE IS SIGNAL FULL:STD_LOGIC; BEGIN
基于VHDL的分频电路
![基于VHDL的分频电路](https://img.taocdn.com/s3/m/1ddfc24b852458fb770b5615.png)
CPLD/FPGA与单片机相比,一个明显得优势就在于它的高速性。但很多外围器件的驱 动都需要低频的时钟(若时钟频率太高,则键盘扫描就会出错,七段数码管会闪烁和不稳 定就是最好的例子),所以经常需要用到分频电路。常见的分频电路为偶数倍分频和奇数 倍分频两种。下面对8分倍分频电路用VHDL做简单介绍。 方案设计 如果系统有一个200KHz的时钟,系统要求将其分为100KHz,50KHz,25KHz,并且 4 在这4个频率时钟中选择一个作为输出。下面给出两种设计方案: 1.设计一个2分频电路、一个4分频电路、一个8分频电路,直接从200KHz分频到所需要的 几个频率的时钟信号(如图1所示)。 2.只设计一个2分频电路,用3个2分频电路级联的方式,从200KHz逐级分出所需要的时钟 信号(如图2所示)。
图1
图2
下面用VHDL设计一个2分频电路: library ieee; use ieee.std_logic_1164.all; entity FreDevider is port (clock:in std_logic; clockout:out std_logic ); end; architecture behavior of FreDevider is signal clk:std_logic; begin process(clock) begin if rising_edge(clock) then clk<=not clk; end if; end process; clockout<=clk; end;
//元件端口 //元件行为描述
library ieee; use ieee.std_logic_1164.all; entity fredevider2 is port( clock:in std_logic; clockout:out std_logic ); end; architecture dcider of fredevider2 is constant N:integer:=3; signal counter:integer range 0 to N; signal clk:std_logic; begin process(clock) begin if rising_edge(clock) then if counter=N then counter<=0; clk<=not clk; else counter<=counter+1; end if; end if; end process; clockout<=clk; end;
基于VHDL数控分频器设计
![基于VHDL数控分频器设计](https://img.taocdn.com/s3/m/a7324ad33186bceb19e8bbf8.png)
目录一、设计任务与要求 (3)二、总体框图 (3)三、选择器件 (4)四、功能 (5)1、数控分频器 (5)2、BCD译码器 (6)3、扫描器 (11)4、3-8译码器 (13)5、7段数码管显示译码器 (16)五、总体设计电路图 (19)1总体(顶层)电路原理图 (19)2仿真结果 (19)3管脚分配图 (20)4.硬件连接情况 (20)六.心得体会 (20)数控分频器设计一、设计任务与要求数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,以实现所需的输出频率。
基本功能:1、实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。
如输入10010000,即对输入的时钟信号进行144分频,如输入01001000,即对输入的时钟信号进行72 分频。
2、输出的波形应为占空比位50%的方波。
3、有显示功能,显示当前的分频比,即,输入的二进制数的大小。
总体框图设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。
把输入端输入的八位二进制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。
模块的功能:1、数控分频器:实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。
如输入10010000,即对输入的时钟信号进行144分频。
2、BCD译码器:把输入端的8位2进制数转换成10位BCD码表示的十进制数。
3、扫描器:when “000”=>daout<=dout(3 downto 0);when “001”=>daout<=dout(7 downto 4);when “010”=>daout<=dout(3 downto 2)<="00";daout(1 downto 0)<=dout(9 downto 8);when others=>null;4、3-8译码器:当sel=0时,q=11111110;选择个位数码管亮。
实验三 数控分频器设计
![实验三 数控分频器设计](https://img.taocdn.com/s3/m/2a3657c19ec3d5bbfd0a743e.png)
实验三数控分频器设计【实验目的】1.设计实现一个根据不同的输入,将时钟信号进行分频2.掌握分频计数器类型模块的Verilog描述方法;3.学习设计仿真工具的使用方法;4.学习层次化设计方法;【实验内容】1.用Verilog 语言设计带计数允许和复位输入的数控分频器。
2. 编制仿真测试文件,并进行功能仿真。
3. 下载并验证分频器功能【实验原理】数控分频器的功能是在输入端给定不同数据时,将对输入的时钟信号有不同的分频比,对于一个N分频器,分频出的时钟周期是原时钟周期的N倍,频率变为原来的1/N。
对于一个8位计数器,如果输入数D,然后启动计数器工作,则经过D倍的时钟周期,计数器溢出时,输出pfull变为高电平,再以pfull为敏感信号,对fout进行取反操作,如此N=2D。
计数一次后,再重新计数,反复进行直至输入被赋予新值。
对于数控分频数器,装载不同的计数初始值时,会有不同频率的溢出信号,从而得到不同的输出。
数控分频器是利用计数值可并行预置的加法计数器设计完成的。
【程序源代码】(加注释)module FDIV(clk,fdiv,fout,pfull); //8位二进制的数控分频计input clk; //时钟信号input [7:0] fdiv; //8位加载数据output pfull; //定义一个1位的寄存器型中间控制变量output fout; //分频数据输出reg [7:0] Q; reg fout,full,pfull;always @(posedge clk) begin //clk有上升沿时,启动以下程序if(Q==fdiv) begin Q=0;full=1;end //若Q==fdiv,Q=0,full=1else begin Q=Q+1;full=0;end //若Q!=fdiv,Q累加1,full=0pfull=full;end //将full数据向pfull输出always @(posedge pfull)fout=~fout; //当pfull有上升沿时,对fout取反endmodule【RLT电路】【仿真和测试结果】功能分析:当输入fdiv为预置数“5”时,经过5倍的clk周期,pfull由低电平变为高电平;当pfull有上升沿时,对fout取反fout,因此fout的周期是clk的10倍,即完成对clk的10分频功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录一、设计任务与要求 (3)二、总体框图 (3)三、选择器件 (4)四、功能 (5)1、数控分频器 (5)2、BCD译码器 (6)3、扫描器 (11)4、3-8译码器 (13)5、7段数码管显示译码器 (16)五、总体设计电路图 (19)1总体(顶层)电路原理图 (19)2仿真结果 (19)3管脚分配图 (20)4.硬件连接情况 (20)六.心得体会 (20)数控分频器设计一、设计任务与要求数控分频器的功能就是当输入端给定不同输入数据时,将对输入的时钟信号有不同的分频比,以实现所需的输出频率。
基本功能:1、实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。
如输入10010000,即对输入的时钟信号进行144分频,如输入01001000,即对输入的时钟信号进行72 分频。
2、输出的波形应为占空比位50%的方波。
3、有显示功能,显示当前的分频比,即,输入的二进制数的大小。
总体框图设计思路:数控分频器用计数值可并行预置的加法器设计完成,当在输入端给定不同输入数据时将对输入的时钟信号有不同的分频比。
把输入端输入的八位二进制数直接通过BCD译码器转换为十位BCD码表示的十进制数,通过扫描器对3个数码管进行选通扫描,最后7段数码管显示译码器对选中数码管的赋值进行译码,并驱动数码管显示该数据。
模块的功能:1、数控分频器:实现8位分频器,依据输入的8位2进制数的不同,有不同的分频比。
如输入10010000,即对输入的时钟信号进行144分频。
2、BCD译码器:把输入端的8位2进制数转换成10位BCD码表示的十进制数。
3、扫描器:when “000”=>daout<=dout(3 downto 0);when “001”=>daout<=dout(7 downto 4);when “010”=>daout<=dout(3 downto 2)<="00";daout(1 downto 0)<=dout(9 downto 8);when others=>null;4、3-8译码器:当sel=0时,q=11111110;选择个位数码管亮。
当sel=1时,q=11111101;选择十位数码管亮。
当sel=2时,q=11111011;选择百位数码管亮。
5、7段数码管显示译码器:把BCD码表示的十进制数转换成驱动数码管显示的段信号,使数码管显示数字。
三、选择器件1、装有QuartusII软件的计算机一台。
2、芯片:使用altera公司生产的Cyclone系列芯片,如EP1C12Q240C8芯片。
此次设计实验采用ALTERA公司的cyclone系列的FPGA芯片EP1C12,设计和仿真采用ALTERA公司的QUARTUS II软件,EP1C12各项参数参照上表。
Cyclone的性能特性(1)、新的可编程体系结构,实现低成本设计。
(2)、嵌入式存储器资源支持多种存储器应用和数字信号处理(DSP)实现(3)、专用外部存储器接口电路,支持与DDR FCRAM 和SDRAM 器件以及SDR SDRAM 存储器的连接。
(4)、支持串行总线和网络接口以及多种通信协议片内和片外系统时序管理使用嵌入式PLL(5)、支持单端I/O 标准和差分I/O 技术,LVDS 信号数据速率高达640Mbps 。
(6)、处理功耗支持Nios II 系列嵌入式处理器(7)、采用新的串行配置器件的低成本配置方案(8)、Quartus II 软件OpenCore 评估特性支持免费的IP 功能评估3、EDA 实验箱一个。
4、下载接口是数字芯片的下载接口(JTAG )主要用于FPGA 芯片的数据下载。
5、拨码开关。
6、7段数码管显示.将七段数码管的输入,即四位二进制数译十进制的形式显示到数码管上,数码管的每段是高电平,即输出位1时对应的灯就亮,输出位出0灯就灭,根据灯亮的段读出数字。
四、功能模块1、数控分频器dv f instclkd[7..0]f out图1数控分频器逻辑符号逻辑功能:用计数值可并行预置的加法计数器设计完成,当输入端输入的8位二进制数不同时,有不同的分频比。
VHDL 程序library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dvf isport ( clk : in std_logic;d : in std_logic_vector( 7 downto 0);fout :out std_logic );end;architecture one of dvf issignal full : std_logic;beginp_reg: process(clk)variable cnt8 : std_logic_vector(7 downto 0);beginif clk'event and clk='1' thenif cnt8= "11111111" thencnt8 := d;full <='1';else cnt8 :=cnt8 + 1;full <= '0';end if;end if;end process p_reg ;p_div: process(full)variable cnt2 : std_logic;beginif full'event and full ='1' thencnt2 :=not cnt2;if cnt2= '1' then fout<='1'; else fout<='0';end if;end if;end process p_div;end;仿真结果:图2 数控分频器仿真图仿真分析:波形仿真结果如上图所示,图中d[7..0]表示8位2进制输入端,fout为对时钟端的分频(大小与输入端2进制数大小相同)。
2、BCD译码器bin2bcddin[7..0]bcd[9..0]inst1图3 BCD译码器逻辑符号逻辑功能:把0-255这256个用8位2进制数表示的十进制数转换成用10位BCD 码表示的十进制数。
VHDL程序library ieee;use ieee.std_logic_1164.all;entity bin2bcd isport(din:in std_logic_vector(7 downto 0);bcd:out std_logic_vector(9 downto 0));end bin2bcd;architecture fun of bin2bcd isbeginprocess(din)begincase din iswhen "00000000"=>bcd<="0000000000";when "00000001"=>bcd<="0000000001";when "00000010"=>bcd<="0000000010";when "00000011"=>bcd<="0000000011";when "00000100"=>bcd<="0000000100";when "00000101"=>bcd<="0000000101";when "00000110"=>bcd<="0000000110";when "00000111"=>bcd<="0000000111";when "00001000"=>bcd<="0000001000";when "00001001"=>bcd<="0000001001";when "00001010"=>bcd<="0000010000";when "00001011"=>bcd<="0000010001";when "00001100"=>bcd<="0000010010";when "00001101"=>bcd<="0000010011";when "00001110"=>bcd<="0000010100";when "00001111"=>bcd<="0000010101";when "00010000"=>bcd<="0000010110";when "00010001"=>bcd<="0000010111";when "00010010"=>bcd<="0000011000";when "00010011"=>bcd<="0000011001";when "00010100"=>bcd<="0000100000";when "00010101"=>bcd<="0000100001";when "00010110"=>bcd<="0000100010";when "00010111"=>bcd<="0000100011";when "00011000"=>bcd<="0000100100";when "00011001"=>bcd<="0000100101";when "00011010"=>bcd<="0000100110";when "00011100"=>bcd<="0000101000"; when "00011101"=>bcd<="0000101001"; when "00011110"=>bcd<="0000110000"; when "00011111"=>bcd<="0000110001"; when "00100000"=>bcd<="0000110010"; when "00100001"=>bcd<="0000110011"; when "00100010"=>bcd<="0000110100"; when "00100011"=>bcd<="0000110101"; when "00100100"=>bcd<="0000110110"; when "00100101"=>bcd<="0000110111"; when "00100110"=>bcd<="0000111000"; when "00100111"=>bcd<="0000111001"; when "00101000"=>bcd<="0001000000"; when "00101001"=>bcd<="0001000001"; when "00101010"=>bcd<="0001000010"; when "00101011"=>bcd<="0001000011"; when "00101100"=>bcd<="0001000100"; when "00101101"=>bcd<="0001000101"; when "00101110"=>bcd<="0001000110"; when "00101111"=>bcd<="0001000111"; when "00110000"=>bcd<="0001001000"; when "00110001"=>bcd<="0001001001"; when "00110010"=>bcd<="0001010000"; when "00110011"=>bcd<="0001010001"; when "00110100"=>bcd<="0001010010"; when "00110101"=>bcd<="0001010011"; when "00110110"=>bcd<="0001010100"; when "00110111"=>bcd<="0001010101"; when "00111000"=>bcd<="0001010110"; when "00111001"=>bcd<="0001010111"; when "00111010"=>bcd<="0001011000"; when "00111011"=>bcd<="0001011001"; when "00111100"=>bcd<="0001100000"; when "00111101"=>bcd<="0001100001"; when "00111110"=>bcd<="0001100010"; when "00111111"=>bcd<="0001100011"; when "01000000"=>bcd<="0001100100"; when "01000001"=>bcd<="0001100101"; when "01000010"=>bcd<="0001100110"; when "01000011"=>bcd<="0001100111"; when "01000100"=>bcd<="0001101000"; when "01000101"=>bcd<="0001101001"; when "01000110"=>bcd<="0001110000";when "01001000"=>bcd<="0001110010"; when "01001001"=>bcd<="0001110011"; when "01001010"=>bcd<="0001110100"; when "01001011"=>bcd<="0001110101"; when "01001100"=>bcd<="0001110110"; when "01001101"=>bcd<="0001110111"; when "01001110"=>bcd<="0001111000"; when "01001111"=>bcd<="0001111001"; when "01010000"=>bcd<="0010000000"; when "01010001"=>bcd<="0010000001"; when "01010010"=>bcd<="0010000010"; when "01010011"=>bcd<="0010000011"; when "01010100"=>bcd<="0010000100"; when "01010101"=>bcd<="0010000101"; when "01010110"=>bcd<="0010000110"; when "01010111"=>bcd<="0010000111"; when "01011000"=>bcd<="0010001000"; when "01011001"=>bcd<="0010001001"; when "01011010"=>bcd<="0010010000"; when "01011011"=>bcd<="0010010001"; when "01011100"=>bcd<="0010010010"; when "01011101"=>bcd<="0010010011"; when "01011110"=>bcd<="0010010100"; when "01011111"=>bcd<="0010010101"; when "01100000"=>bcd<="0010010110"; when "01100001"=>bcd<="0010010111"; when "01100010"=>bcd<="0010011000"; when "01100011"=>bcd<="0010011001"; when "01100100"=>bcd<="010*******"; when "01100101"=>bcd<="010*******"; when "01100110"=>bcd<="010*******"; when "01100111"=>bcd<="010*******"; when "01101000"=>bcd<="010*******"; when "01101001"=>bcd<="010*******"; when "01101010"=>bcd<="010*******"; when "01101011"=>bcd<="010*******"; when "01101100"=>bcd<="010*******"; when "01101101"=>bcd<="010*******"; when "01101110"=>bcd<="010*******"; when "01101111"=>bcd<="010*******"; when "01110000"=>bcd<="010*******"; when "01110001"=>bcd<="010*******"; when "01110010"=>bcd<="010*******";when "01110100"=>bcd<="010*******"; when "01110101"=>bcd<="010*******"; when "01110110"=>bcd<="010*******"; when "01110111"=>bcd<="010*******"; when "01111000"=>bcd<="010*******"; when "01111001"=>bcd<="010*******"; when "01111010"=>bcd<="010*******"; when "01111011"=>bcd<="010*******"; when "01111100"=>bcd<="010*******"; when "01111101"=>bcd<="010*******"; when "01111110"=>bcd<="010*******"; when "01111111"=>bcd<="010*******"; when "10000000"=>bcd<="010*******"; when "10000001"=>bcd<="010*******"; when "10000010"=>bcd<="010*******"; when "10000011"=>bcd<="010*******"; when "10000100"=>bcd<="010*******"; when "10000101"=>bcd<="010*******"; when "10000110"=>bcd<="010*******"; when "10000111"=>bcd<="010*******"; when "10001000"=>bcd<="010*******"; when "10001001"=>bcd<="010*******"; when "10001010"=>bcd<="010*******"; when "10001011"=>bcd<="010*******"; when "10001100"=>bcd<="010*******"; when "10001101"=>bcd<="010*******"; when "10001110"=>bcd<="010*******"; when "10001111"=>bcd<="010*******"; when "10010000"=>bcd<="010*******"; when "10010001"=>bcd<="010*******"; when "10010010"=>bcd<="010*******"; when "10010011"=>bcd<="010*******"; when "10010100"=>bcd<="010*******"; when "10010101"=>bcd<="010*******"; when "10010110"=>bcd<="010*******"; when "10010111"=>bcd<="010*******"; when "10011000"=>bcd<="010*******"; when "10011001"=>bcd<="010*******"; when "10011010"=>bcd<="010*******"; when "10011011"=>bcd<="010*******"; when "10011100"=>bcd<="010*******"; when "10011101"=>bcd<="010*******"; when "10011110"=>bcd<="010*******";when "10100000"=>bcd<="010*******"; when "10100001"=>bcd<="010*******"; when "10100010"=>bcd<="010*******"; when "10100011"=>bcd<="010*******"; when "10100100"=>bcd<="010*******"; when "10100101"=>bcd<="010*******"; when "10100110"=>bcd<="010*******"; when "10100111"=>bcd<="010*******"; when "10101000"=>bcd<="010*******"; when "10101001"=>bcd<="010*******"; when "10101010"=>bcd<="010*******"; when "10101011"=>bcd<="010*******"; when "10101100"=>bcd<="010*******"; when "10101101"=>bcd<="010*******"; when "10101110"=>bcd<="010*******"; when "10101111"=>bcd<="010*******"; when "10110000"=>bcd<="010*******"; when "10110001"=>bcd<="010*******"; when "10110010"=>bcd<="010*******"; when "10110011"=>bcd<="010*******"; when "10110100"=>bcd<="0110000000"; when "10110101"=>bcd<="0110000001"; when "10110110"=>bcd<="0110000010"; when "10110111"=>bcd<="0110000011"; when "10111000"=>bcd<="0110000100"; when "10111001"=>bcd<="0110000101"; when "10111010"=>bcd<="0110000110"; when "10111011"=>bcd<="0110000111"; when "10111100"=>bcd<="0110001000"; when "10111101"=>bcd<="0110001001"; when "10111110"=>bcd<="0110010000"; when "10111111"=>bcd<="0110010001"; when "11000000"=>bcd<="0110010010"; when "11000001"=>bcd<="0110010011"; when "11000010"=>bcd<="0110010100"; when "11000011"=>bcd<="0110010101"; when "11000100"=>bcd<="0110010110"; when "11000101"=>bcd<="0110010111"; when "11000110"=>bcd<="0110011000"; when "11000111"=>bcd<="0110011001"; when "11001000"=>bcd<="0110000100"; when "11001001"=>bcd<="0110000101"; when "11001010"=>bcd<="0110000110";when "11001100"=>bcd<="0110001000"; when "11001101"=>bcd<="0110001001"; when "11001110"=>bcd<="0110010000"; when "11001111"=>bcd<="0110010001"; when "11010000"=>bcd<="0110010010"; when "11010001"=>bcd<="0110010011"; when "11010010"=>bcd<="0110010100"; when "11010011"=>bcd<="0110010101"; when "11010100"=>bcd<="0110010110"; when "11010101"=>bcd<="0110010111"; when "11010110"=>bcd<="0110011000"; when "11010111"=>bcd<="0110011001"; when "11011000"=>bcd<="1000000000"; when "11011001"=>bcd<="1000000001"; when "11011010"=>bcd<="1000000010"; when "11011011"=>bcd<="1000000011"; when "11011100"=>bcd<="1000000100"; when "11011101"=>bcd<="1000000101"; when "11011110"=>bcd<="1000000110"; when "11011111"=>bcd<="1000000111"; when "11100000"=>bcd<="1000001000"; when "11100001"=>bcd<="1000001001"; when "11100010"=>bcd<="1000010000"; when "11100011"=>bcd<="1000010001"; when "11100100"=>bcd<="1000010010"; when "11100101"=>bcd<="1000010011"; when "11100110"=>bcd<="1000010100"; when "11100111"=>bcd<="1000010101"; when "11101000"=>bcd<="1000010110"; when "11101001"=>bcd<="1000010111"; when "11101010"=>bcd<="1000011000"; when "11101011"=>bcd<="1000011001"; when "11101100"=>bcd<="1000100000"; when "11101101"=>bcd<="1000100001"; when "11101110"=>bcd<="1000100010"; when "11101111"=>bcd<="1000100011"; when "11110000"=>bcd<="1000100100"; when "11110001"=>bcd<="1000100101"; when "11110010"=>bcd<="1000100110"; when "11110011"=>bcd<="1000100111"; when "11110100"=>bcd<="1000101000"; when "11110101"=>bcd<="1000101001"; when "11110110"=>bcd<="1000110000";when "11111000"=>bcd<="1001001000";when "11111001"=>bcd<="1001001001";when "11111010"=>bcd<="1001010000";when "11111011"=>bcd<="1001010001";when "11111100"=>bcd<="1001010010";when "11111101"=>bcd<="1001010011";when "11111110"=>bcd<="1001010100";when "11111111"=>bcd<="1001010101";when others=>bcd<=null;end case;end process;end architecture fun;仿真结果图4 BCD译码器仿真图仿真分析:仿真波形结果如上图所示din[7..0]为输入的8位2进制数,经译码器译码后转换为相应的BCD码。