位格雷码编码器高速分频器课程设计报告.doc_第1页
位格雷码编码器高速分频器课程设计报告.doc_第2页
位格雷码编码器高速分频器课程设计报告.doc_第3页
位格雷码编码器高速分频器课程设计报告.doc_第4页
位格雷码编码器高速分频器课程设计报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通达学院2012/2013学年 第二学期软件设计 实验报告模 块 名 称 8位格雷码编码器、高速分频器 专 业 通信工程 学 生 班 级 100019 学 生 学 号 10001927 学 生 姓 名 杨润达 指 导 教 师 王奇、孔凡坤、周小燕、梅中辉 设计题目基础题:8位格雷码编码器综合题:高速分频器设计任务要求基础题:设计一个8位(bit)二进制码输入,输出8位格雷码的编码器(输入:B7 -B0并行8位 , 输出G7-G0并行8位 ,提示:当i7时:G(i)=B(i+1)xorB(i),G(7)=B(7))。综合题:有一个10MHz的时钟源,为得到4Hz,3Hz,2Hz和1Hz的信号,请设计一种分频器。实验设备及软件Quartus II 9.0同组人员学号及姓名无参考文献1王振红,VHDL电路设计与应用实践教程:机械工业出版社。2徐向民,数字系统设计及VHDL实践:机械工业出版社。3毛为勇,祁中洋,王兰,基于FPGA的任意小数分频器的设计:桂林航天工业高等专科学校学报8位格雷码编码器及高速分频器设计实验目的: 1.全面了解如何应用该硬件描述语言进行高速集成电路设计 2.通过软件使用、设计与仿真环节使学生熟悉EDA-VHDL开发环境 3.通过对基本题、综合题的设计实践,使学生掌握硬件系统设计方法 (自底向上或自顶向下),熟悉VHDL语言三种设计风格,并且培养 应用VHDL语言解决实际问题的能力。实验设备:PC机实验课题:一、8位格雷码编码器 1、主要功能设计一个8位(bit)二进制码输入,输出8位格雷码的编码器(输入:B7 -B0并行8位,输出G7-G0并行8位,提示:当i7时:G(i)=B(i+1)xorB(i),G(7)=B(7)。 2、设计原理 根据组合逻辑电路的分析方法,先列出其真值表再通过卡诺图化简,可以很快 的找出格雷码与二进制码之间的逻辑关系。其转换规律为:高位同,从高到低看异 同,异出1,同出0。也就是将二进制码转换成格雷码时,高位是完全相同的,下一位格雷码是1还是0,完全是相邻两位二进制码的“异”还是“同” 来决定。下面举一个简单的例子加以说明。假如要把二进制码10110110转换成格雷码,则可以通过下面的方法来完成,方法如图1-1。 图1-13、 功能仿真 说明:B7B0为输入信号,二进制码为:10110110 G7G0为输出信号,格雷码为:111011014、 实验代码: 见附录一 二、高速分频器设计 1、主要功能 设计一个分频器,对10Mhz的时钟源进行分频,以得到4Hz,3Hz,2Hz,1Hz的时钟。 2、设计原理 整体思路 因为10Mhz时钟源速度很快,直接分频成1Hz级别的时钟的话分频系数太大,虽然思路简单,但是在实现时会造成quartus的寄存器资源消耗殆尽,导致编译失败。 所以我先通过10分频和100000分频将10Mhz时钟源分频为10Hz的时钟源,然后对10Hz的时钟源分别进行2.5分频,3.3分频,5分频,10分频。从而得到4Hz,3Hz,2Hz,1Hz的时钟源。 原理框图如图2-1所示。 图 2-1 2.5分频模块原理 设计一个模3的计数器,再设计一个扣除脉冲电路,加在模3计数器输出之后,每来两个脉冲就扣除一个脉冲(实际上是使被扣除的脉冲变成很窄的脉冲,可由异或门实现),就可以得到分频系数为2.5的小数分频器。 设需要设计一个分频系数为N-0.5的分频器,其电路可由一个模N计数器、一个二分频器和一个异或门组成,如图2-2所示。在实现时,模N计数器可设计成带预置的计数器,这样就可以实现任意分频系数为N-0.5的分频器。电路原理图如图2-2所示。 图 2-2 3.3分频模块设计3 设置一个计数器,令其初始值为0;在时钟源clk的每一个上升沿,计数器加上Q,若计数器里面的值小于P,则发出删除一个脉冲的信号,将delete置为低电平;若其值大于P,则将计数器的值减去P,并且将delete置为高电平,不发出删除脉冲的信号。本实验中要将一个10Hz的时钟源分频为3Hz的时钟信号,则Q=3,P=10。 电路原理图如图2-3所示。 图 2-3 5分频模块设计 定义两个计数器,分别对输入时钟的上升沿和下降沿进行计数,然后把这两个计数值输入一个组合逻辑,用其控制输出时钟的电平。这是因为计数值为奇数,占空比为50%,前半个和后半个周期所包含的不是整数个clkin的周期。5分频,前半个周期包含2.5个clkin周期,后半个周期包含2.5个clkin周期。 10分频模块设计 定义一个计数器对输入时钟进行计数,在计数的前一半时间里,输出高电平,在计数的后一半时间里,输出低电平,这样输出的信号就是占空比为50%的偶数分频信号。10分频,计数值为04输出高电平,计数值为59输出低电平。3、功能仿真 由于题目所给的10Mhz时钟信号频率过大,如果直接对它进行分频的话将难以看到完整的结果,但如果将仿真时间调长,则仿真速度过慢,所以在仿真中,我将第一次分频的分频系数调低,然后选择适当的输入时钟频率,以验证2.5分频,3.3分频,5分频,10分频的正确性。 仿真结果如图2-4所示。 图 2-44、 实验代码 见附录二设计总结 本实验主要是运用VHDL语言实现格雷码编码器和高速分频器的设计,相对于其他的来说,本实验比较简单,但在实际做的时候还是遇到不少的问题。 在编译时出现了许多错误,经过反复修改编译,再修改再编译最终排除了所有的错误。 在仿真时一开始看不到完整的结果,通过调节分频系数以及输入时钟频率的等手段仿真成功,验证了2.5分频,3.3分频,5分频,10分频的正确性。收获和体会 在老师布置好题目后,我仔细进行设计,通过查阅各参考书,最终把实验做出来了,达到了老师对本实验的要求。在这次设计中我收获颇丰,首先最直接的收获就是我巩固了这节课所学的知识,把它运用到实践中去,并且学到了许多在课本中所没有的知识,通过查阅相关知识,进一步加深对EDA的了解。其次,我们不管做什么都不能粗心,如我们在输入程序是,把字母打错了时,保存文件时命名与程序中的名称不一样时,都会导致编译错误,在此过程中虽然浪费了不少时间,但这也让我注意到在实际做设计时应该注意的问题,意识到自己的不足,对学过的知识了解不够深刻,掌握的不足够。总的来说,这次设计还算成功,也让我明白了要把理论知识与实践结合起来,从实践中强化自己的理论,才能更好提高自己的实际动手能力和独立思考能力。如果在设计过程中遇到问题时,我们要有耐心并细心的查找错误,这也是学习的过程。附录一格雷码编码器源代码library ieee;use ieee.std_logic_1164.all;entity green is port(B:in std_logic_vector(7 downto 0); G:out std_logic_vector(7 downto 0);end green;architecture code of green isbegin G(7) = B(7); G(6) = B(7) XOR B(6); G(5) = B(6) XOR B(5); G(4) = B(5) XOR B(4); G(3) = B(4) XOR B(3); G(2) = B(3) XOR B(2); G(1) = B(2) XOR B(1); G(0) = B(1) XOR B(0);end code;附录二高速分频器源代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_signed.all;use ieee.std_logic_unsigned.all;entity div2 isgeneric(N10: integer:=10; N105: integer:=100000; N3: integer:=3; N5: integer:=5; N2: integer:=3; N10: integer:=10); port(cp_10mhz:in std_logic; delete: buffer std_logic; cp_10hz:out std_logic; cp_4hz:buffer std_logic; cp_3hz:out std_logic; cp_2hz:out std_logic; cp_1hz:out std_logic -tempout:inout std_logic );end div2; architecture clk of div2 issignal cp1mhz:std_logic;signal cnt_1mhz: integer range 0 to N10-1;signal cp10hz:std_logic;signal cnt_10hz: integer range 0 to N105-1;signal cnt_1hz: integer range 0 to N10-1;signal cnt_2hz1, cnt_2hz2: integer range 0 to N5-1;signal cnt_3hz: integer :=0;SIGNAL clk_4hz, dix: STD_LOGIC;SIGNAL cnt_4hz: integer range 0 to N5-1;constant P :integer:=10;constant Q :integer:=3;-SIGNAL delete: std_logic;begin clk_4hz = cp10hz XOR dix;-clk=cp10hz xor div2;- process(cp_10mhz) -计数-1Mhz begin if(cp_10mhzevent and cp_10mhz=1) then if(cnt_1mhzN10-1) then cnt_1mhz = cnt_1mhz+1; else cnt_1mhz = 0; end if; end if; end process; process(cnt_1mhz) -根据计数值,控制输出时钟脉冲的高、低电平 begin if(cnt_1mhzN10/2) then cp1mhz = 1; else cp1mhz = 0; end if; end process;-process(cp1mhz) -计数-10Hz- begin if(cp1mhzevent and cp1mhz=1) then if(cnt_10hzN105-1) then cnt_10hz = cnt_10hz+1; else cnt_10hz = 0; end if; end if; end process; process(cnt_10hz) -根据计数值,控制输出时钟脉冲的高、低电平 begin if(cnt_10hzN105/2) then cp10hz = 1; cp_10hz = 1; else cp10hz = 0; cp_10hz = 0; end if; end process;-process(cp10hz) -计数-1Hz- begin if(cp10hzevent and cp10hz=1) then if(cnt_1hzN10-1) then cnt_1hz = cnt_1hz+1; else cnt_1hz = 0; end if; end if; end process; process(cnt_1hz) -根据计数值,控制输出时钟脉冲的高、低电平 begin if(cnt_1hzN10/2) then cp_1hz = 1; else cp_1hz = 0; end if; end process;-process(cp10hz)-2Hz- begin if(cp10hzevent and cp10hz=1) then -shangshengyanjishu if(cnt_2hz1N5-1) then cnt_2hz1 = cnt_2hz1+1; else cnt_2hz1 = 0; end if; end if; end process;process(cp10hz) begin if(cp10hzevent and cp10hz=0) then -xiajiangyanjishu if(cnt_2hz2N5-1) then cnt_2hz2 = cnt_2hz2+1; else cnt_2hz2 = 0; end if; end if; end process;cp_2hz = 1 when cnt_2hz1(N5-1)/2 or cnt_2hz2(N5-1)/2 else 0;- process(clk_4hz)-4Hz- begin if(clk_4hzevent and clk_4hz=1) then if(cnt_4hz=0) then cnt_4hz = N2-1;-置整数分频值N cp_4hz = 1; else cnt_4hz = cnt_4hz-1;-模N计数器减法计数 cp_4hz = 0; end

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论