数字电路大型设计实验概要_第1页
数字电路大型设计实验概要_第2页
数字电路大型设计实验概要_第3页
数字电路大型设计实验概要_第4页
数字电路大型设计实验概要_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

1、数电大型实验报告姓名:陈丽红班级:健理1402班学号:201424450202教师:金老师一、4位数字频率计设计1.1设计题目设计一4位数字频率计,测量范围为09999hz,假设被测信号为标准的方波信号。1.2设计思路下图所示为数字频率计的原理框图,对于数字频率计,我们采用“自顶向下”的设计方法。根据数字频率计的工作原理和设计方案, 先绘制顶层设计原理图,再进行底层模块的设计。图1-1 数字频率计原理框图1.3顶层设计和底层模块设计1.3.1顶层设计4位数字频率计的原理图中包括计数器cnt10、锁存器latch4、显示译码器led7s、控制器control四种底层模块。4个十进制计数器cnt1

2、0级联构成10000进制计数器,使数字频率计的测量范围在0000hz9999hz。cnt10的输出送给锁存器latch4,latch4的输出再送给显示译码器led7s。led7s为阳级驱动的7段led数码管。控制器control用来产生所需的清零信号clr、闸门信号cs、锁存信号le三种控制信号。具体的顶层原理图的设计连接如下图所示。图1-2 4位数字频率计原理图1.3.2底层设计模块j十进制计数器模块cnt10(1) 模块cnt10的vhdl代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;e

3、ntity cnt10 isport(clk,clr,cs: in std_logic; qq: buffer std_logic_vector(3 downto 0); co: out std_logic );end cnt10;architecture one of cnt10 is begin process(clk,clr,cs) begin if(clr='1')then qq<="0000" elsif(clk'event and clk='1')then if(cs='1')then if(qq=9

4、)then qq<="0000"else qq<=qq+1;end if; end if; end if; end process; process(qq) begin if(qq=9)then co<='0' else co<='1' end if; end process;end one;(2) 模块cnt10的简单说明cnt10模块为十进制加法计数器模块,具有计数、异步清零、计数使能、进位输出功能。清零信号clr可以使计数器在闸门信号cs有效前清零。计数使能由闸门信号cs控制,当cs高电平时,闸门开通,被测信号通

5、过闸门送到计数器,计数器允许计数,低电平时停止计时。cnt10模块采用的是时钟上升沿计数,在计数使能的情况下来一个时钟信号clk的上升沿,计数器加1,对于十进制加法计数器,当计数达到10时产生一个进位输出,进位输出co采用负脉冲,避免后级计数器提前加1计数。实验仿真波形说明了cnt10模块符合设计要求的逻辑功能,仿真结果如下图。(3) 模块cnt10的仿真结果计数器qq达到10时,进位输出cs产生一个负脉冲cs=1时,每来一个clk上升沿,qq加1clr=1时,qq清零图1-3 cnt10仿真波形k4位锁存器模块latch4(1) 模块latch4的vhdl代码library ieee;use

6、 ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity latch4 isport(le: in std_logic; dd: in std_logic_vector(3 downto 0); qq: out std_logic_vector(3 downto 0) );end latch4;architecture one of latch4 is begin process(le,dd) begin if(le='1')then qq<=dd; end if; end process;end on

7、e;(2) 模块latch4的简单说明latch4模块具有的功能为在锁存信号le高电平期间锁存器输出随输入变化,在锁存信号le的下降沿,将输入值锁存,输出值保持不变。实验仿真波形说明了latch4模块符合设计要求的逻辑功能,仿真结果如下图。(3) 模块latch4的仿真结果le=0时,输出值qq保持不变,实现锁存功能le=1时,dd的数值传递给qq图1-4 latch4仿真波形l显示译码器模块led7s(1) 模块led7s的vhdl代码library ieee;use ieee.std_logic_1164.all;entity led7s isport(dd: in std_logic_v

8、ector(3 downto 0); y: out std_logic_vector(6 downto 0) );end led7s;architecture one of led7s is begin process(dd) begin case dd is when "0000"=>y<="1000000" when "0001"=>y<="1111001" when "0010"=>y<="0100100" when "00

9、11"=>y<="0110000" when "0100"=>y<="0011001" when "0101"=>y<="0010010" when "0110"=>y<="0000010" when "0111"=>y<="1111000" when "1000"=>y<="0000000" w

10、hen "1001"=>y<="0010000" when "1010"=>y<="0001000" when "1011"=>y<="0000011" when "1100"=>y<="1000110" when "1101"=>y<="0100001" when "1110"=>y<="000

11、0110" when "1111"=>y<="0001110" when others=>y<=null; end case;end process;end;(2) 模块led7s的简单说明led7s模块的功能是将数值在led数码管上显示,根据共阳数码管的特性编写vhdl代码,如输入dd为0000时,输出y为1000000,即数码管中g段led灯不亮,其它灯亮,显示数字0。实验仿真波形中数值对应正确,说明了led7s模块符合设计要求的逻辑功能,仿真结果如下图。(3) 模块led7s的仿真结果dd=0000时,y=1000

12、000,数码管显示数字0图1-5 led7s仿真波形m控制模块control(1) 模块control的vhdl代码library ieee;use ieee.std_logic_1164.all;entity control isport(clk: in std_logic; cs,clr,le: out std_logic);end control;architecture behav of control issignal current_state,next_state: std_logic_vector(3 downto 0);constant st0: std_logic_vect

13、or:="0000"constant st1: std_logic_vector:="0001"constant st2: std_logic_vector:="0011"constant st3: std_logic_vector:="0010"constant st4: std_logic_vector:="0110"constant st5: std_logic_vector:="1110"constant st6: std_logic_vector:="11

14、11"constant st7: std_logic_vector:="1101"constant st8: std_logic_vector:="1100"constant st9: std_logic_vector:="1000" begin com1: process(current_state) begin case current_state is when st0=>next_state<=st1; clr<='1'cs<='0'le<='0&

15、#39; when st1=>next_state<=st2; clr<='0'cs<='1'le<='0' when st2=>next_state<=st3; clr<='0'cs<='1'le<='0' when st3=>next_state<=st4; clr<='0'cs<='1'le<='0' when st4=>next_state<=

16、st5; clr<='0'cs<='1'le<='0' when st5=>next_state<=st6; clr<='0'cs<='1'le<='0' when st6=>next_state<=st7; clr<='0'cs<='1'le<='0' when st7=>next_state<=st8; clr<='0'cs<=&#

17、39;1'le<='0' when st8=>next_state<=st9; clr<='0'cs<='1'le<='0' when st9=>next_state<=st0; clr<='0'cs<='0'le<='1' when others=>next_state<=st0; clr<='0'cs<='0'le<='0' en

18、d case; end process com1; reg: process(clk) begin if(clk'event and clk='1')then current_state<=next_state; end if; end process reg; end behav;(2) 模块control的简单说明control模块用于产生题目中所给的时序要求的控制信号。对于状态机,划分各个状态,同时为了消除状态译码时由于竞争冒险产生的干扰窄脉冲,状态编码要采用格雷码。根据控制器时序图设定每个状态下清零信号clr、闸门信号cs和锁存信号le的电平。实验仿真结果

19、中产生的波形与题目中给定的一致,说明了control模块符合设计要求的逻辑功能,仿真结果如下图。(3) 模块control的仿真结果框中显示的波形与指导书中给的控制器时序图一致图1-6 control仿真波形1.4设计工程的quartusii操作流程(1)建立设计工程(2)底层模块输入、编译、符号生成、仿真(3)顶层设计原理图的输入和编译(4)引脚锁定和编程下载(5)数字频率计测试下图为实际操作中的测试结果。图1-7 数字频率计测试结果二、4位数字乘法器设计2.1设计题目试设计一4位二进制乘法器。4位二进制乘法器的功能框图如下图所示。输入信号:4位被乘数a,4位乘数b,启动信号start。输出

20、信号:8位乘积p,结束信号done。pa84bmul4donestart图2-1 4位乘法器功能框图当发出一个高电平的start信号以后,乘法器开始乘法运算,运算完成以后发出高电平的done信号。2.2设计思路对于4位二进制乘法器,将其在逻辑上视为由多个子操作和子运算组成,在结构上视为由许多模块或功能块构成,这样在设计的时候就可以采用“自顶向下”的设计方法,根据乘法器的原理对其进行顶层设计和底层模块设计。乘法运算可以分解为相加和移位两种子运算,具体乘法器的算法可以用如下流程图来表示。图2-2 乘法器的算法流程图2.3顶层设计和底层模块设计2.3.1顶层设计4位二进制乘法器的原理图中包括4位并行

21、寄存器rega、4位多功能移位寄存器regb、5位多功能移位寄存器regc、5进制加法计数器cnt、4位二进制加法运算器add4b,乘法器的控制器mulcon六种底层模块。具体的顶层原理图的设计连接如下图所示。图2-3 乘法器顶层原理图2.3.2底层模块设计jrega模块(1) 模块rega的vhdl代码library ieee;use ieee.std_logic_1164.all;entity rega isport(cp,ld: in std_logic; d: in std_logic_vector(3 downto 0);q: out std_logic_vector(3 downt

22、o 0) );end rega;architecture one of rega is begin process(cp,ld,d) begin if(cp'event and cp='1')then if(ld='1')then q<=d; end if; end if; end process;end;(2) 模块rega的简单说明rega模块为4位并行寄存器,当ld=0时,处于保持状态,当ld=1时,处于并行置数状态。实验仿真波形说明了rega模块符合设计要求的逻辑功能,仿真结果如下图。(3) 模块rega的仿真结果当ld=0,处于保持状态,

23、输出端q保持不变当ld=1,处于并行置数状态,来一个cp脉冲上升沿,即可将d端数据送给q图2-4 rega仿真波形k regb模块(1) 模块regb的vhdl代码library ieee;use ieee.std_logic_1164.all;entity regb isport(cp,dir: in std_logic; s: in std_logic_vector(1 downto 0); d: in std_logic_vector(3 downto 0); q: buffer std_logic_vector(3 downto 0) );end regb;architecture o

24、ne of regb is begin process(cp,d,s) begin if(cp'event and cp='1')then case s is when "00"=>null; when "01"=>q<=dir&q(3 downto 1); when "11"=>q<=d; when others=>null; end case; end if;end process;end;(2) 模块regb的简单说明regb模块为4位多功能移位寄存器。当s1s

25、0=00时,寄存器处于保持状态;当s1s0=01时,寄存器处于右移状态;当s1s0=11时,寄存器处于并行置数状态;实验仿真波形说明了regb模块符合设计要求的逻辑功能,仿真结果如下图。(3)模块regb的仿真结果s1s0=00,q保持不变s1s0=01,寄存器处于右移状态,dir=1,来一个cp脉冲上升沿,q端输出变为1000s1s0=11,处于并行置数状态,来一个cp脉冲上升沿,即可将d端数据送给q图2-5 regb仿真波形l regc模块(1) 模块regc的vhdl代码library ieee;use ieee.std_logic_1164.all;entity regc isport

26、(cp,rd,dir: in std_logic; s: in std_logic_vector(1 downto 0); d: in std_logic_vector(4 downto 0); q: buffer std_logic_vector(4 downto 0) );end regc;architecture one of regc is begin process(cp,d,s,rd) beginif(rd='1')then q<=(others=>'0');elsif(cp'event and cp='1')th

27、en case s is when "00"=>null; when "01"=>q<=dir&q(4 downto 1); when "11"=>q<=d; when others=>null; end case;end if; end process;end;(2) 模块regc的简单说明regc模块为5位多功能移位寄存器。当s1s0=00时,寄存器处于保持状态;当s1s0=01时,寄存器处于右移状态;当s1s0=11时,寄存器处于并行置数状态;当rd=1时,寄存器执行异步清零功能。实验

28、仿真波形说明了regc模块符合设计要求的逻辑功能,仿真结果如下图。(3) 模块regc的仿真结果s1s0=11,处于并行置数状态,来一个cp脉冲上升沿,即可将d端数据送给qrd=1,寄存器异步清零,q端输出变为00000s1s0=01,寄存器处于右移状态,dir=1,来一个cp脉冲上升沿,q端输出变为10000图2-1 regc仿真波形m cnt模块(1) 模块cnt的vhdl代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity cnt isport(cp,rd,et: in std_

29、logic; co: out std_logic );end cnt;architecture one of cnt issignal q: std_logic_vector(2 downto 0); begin process(cp,rd,et) begin if(rd='1')then q<="000"elsif(cp'event and cp='1')then if et='1'then if(q=4)then q<="000" else q<=q+1; end if; en

30、d if;end if; end process; process(q) begin if(q=4)then co<='1'else co<='0'end if;end process;end;(2) 模块cnt的简单说明cnt模块为5进制加法计数器模块。rd=1时,处于异步清零功能;et=1时,允许计数;当q=4时,产生一个进位。实验仿真波形说明了cnt模块符合设计要求的逻辑功能,仿真结果如下图。(3)模块cnt的仿真结果rd=1,寄存器异步清零,所以图中再4个cp脉冲过后没有产生进位et=1,4个cp脉冲过后,产生一个进位脉冲图2-7 cnt仿真

31、波形nadd4b模块(1) 模块add4b的vhdl代码library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity add4b isport(a: in std_logic_vector(3 downto 0); b: in std_logic_vector(3 downto 0); c: out std_logic_vector(3 downto 0); cout: out std_logic );end;architecture one of add4b is signal crlt: st

32、d_logic_vector(4 downto 0); signal aa,bb: std_logic_vector(4 downto 0); begin aa<='0'&a;bb<='0'&b;crlt<=aa+bb;c<=crlt(3 downto 0);cout<=crlt(4);end;(2) 模块add4b的简单说明add4b模块实现的是4位二进制数的加法运算,并且产生进位输出。实验仿真波形说明了add4b模块符合设计要求的逻辑功能,仿真结果如下图。(3)模块add4b的仿真结果1001+1001=1001

33、0,所以c=0010,进位cout=10001+0001=0010图2-8 add4b仿真波形omulcon模块(1) 模块mulcon的vhdl代码library ieee;use ieee.std_logic_1164.all;entity mulcon isport(start,i4,bi,cp: in std_logic; done,rd,ca,cb1,cb0,cc1,cc0,et: out std_logic );end mulcon;architecture one of mulcon is signal current_state,next_state: bit_vector(1

34、 downto 0); constant s0: bit_vector(1 downto 0):="00" constant s1: bit_vector(1 downto 0):="01" constant s2: bit_vector(1 downto 0):="11" constant s3: bit_vector(1 downto 0):="10" begin com: process(current_state,start,bi,i4) begin done<='0'rd<=&

35、#39;0'ca<='0'cb1<='0'cb0<='0'cc1<='0'cc0<='0'et<='0' case current_state is when s0=>done<='1' if(start='1')then next_state<=s1; else next_state<=s0; end if; when s1=>rd<='1'ca<='1'cb1<='1'cb0<='1'next_state<=s2; when s2=> if(bi='1')then cc1<='1'cc0<='1'et<='1' else et<=

温馨提示

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

评论

0/150

提交评论