数字电路大型设计实验.docx

上传人:b****4 文档编号:24790842 上传时间:2023-06-01 格式:DOCX 页数:30 大小:516.31KB
下载 相关 举报
数字电路大型设计实验.docx_第1页
第1页 / 共30页
数字电路大型设计实验.docx_第2页
第2页 / 共30页
数字电路大型设计实验.docx_第3页
第3页 / 共30页
数字电路大型设计实验.docx_第4页
第4页 / 共30页
数字电路大型设计实验.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

数字电路大型设计实验.docx

《数字电路大型设计实验.docx》由会员分享,可在线阅读,更多相关《数字电路大型设计实验.docx(30页珍藏版)》请在冰豆网上搜索。

数字电路大型设计实验.docx

数字电路大型设计实验

姓名:

陈丽红

班级:

健理1402班

学号:

201424450202

教师:

金老师

一、4位数字频率计设计

1.1设计题目

设计一4位数字频率计,测量范围为0~9999Hz,假设被测信号为标准的方波信号。

1.2设计思路

下图所示为数字频率计的原理框图,对于数字频率计,我们采用“自顶向下”的设计方法。

根据数字频率计的工作原理和设计方案,先绘制顶层设计原理图,再进行底层模块的设计。

图1-1数字频率计原理框图

1.3顶层设计和底层模块设计

1.3.1顶层设计

4位数字频率计的原理图中包括计数器CNT10、锁存器LATCH4、显示译码器LED7S、控制器CONTROL四种底层模块。

4个十进制计数器CNT10级联构成10000进制计数器,使数字频率计的测量范围在0000Hz~9999Hz。

CNT10的输出送给锁存器LATCH4,LATCH4的输出再送给显示译码器LED7S。

LED7S为阳级驱动的7段LED数码管。

控制器CONTROL用来产生所需的清零信号clr、闸门信号cs、锁存信号le三种控制信号。

具体的顶层原理图的设计连接如下图所示。

图1-24位数字频率计原理图

1.3.2底层设计模块

十进制计数器模块CNT10

(1)模块CNT10的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitycnt10is

port(clk,clr,cs:

instd_logic;

qq:

bufferstd_logic_vector(3downto0);

co:

outstd_logic

);

endcnt10;

architectureoneofcnt10is

begin

process(clk,clr,cs)

begin

if(clr='1')then

qq<="0000";

elsif(clk'eventandclk='1')then

if(cs='1')then

if(qq=9)then

qq<="0000";

else

qq<=qq+1;

endif;

endif;

endif;

endprocess;

process(qq)

begin

if(qq=9)then

co<='0';

else

co<='1';

endif;

endprocess;

endone;

(2)模块CNT10的简单说明

CNT10模块为十进制加法计数器模块,具有计数、异步清零、计数使能、进位输出功能。

清零信号clr可以使计数器在闸门信号cs有效前清零。

计数使能由闸门信号cs控制,当cs高电平时,闸门开通,被测信号通过闸门送到计数器,计数器允许计数,低电平时停止计时。

CNT10模块采用的是时钟上升沿计数,在计数使能的情况下来一个时钟信号clk的上升沿,计数器加1,对于十进制加法计数器,当计数达到10时产生一个进位输出,进位输出co采用负脉冲,避免后级计数器提前加1计数。

实验仿真波形说明了CNT10模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块CNT10的仿真结果

计数器qq达到10

时,进位输出cs产

生一个负脉冲

cs=1时,每来一个

clk上升沿,qq加1

clr=1时,

qq清零

图1-3CNT10仿真波形

4位锁存器模块LATCH4

(1)模块LATCH4的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitylatch4is

port(le:

instd_logic;

dd:

instd_logic_vector(3downto0);

qq:

outstd_logic_vector(3downto0)

);

endlatch4;

architectureoneoflatch4is

begin

process(le,dd)

begin

if(le='1')then

qq<=dd;

endif;

endprocess;

endone;

(2)模块LATCH4的简单说明

LATCH4模块具有的功能为在锁存信号le高电平期间锁存器输出随输入变化,在锁存信号le的下降沿,将输入值锁存,输出值保持不变。

实验仿真波形说明了LATCH4模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块LATCH4的仿真结果

le=0时,输出值qq保持不变,实现锁存功能

le=1时,dd的数值传递给qq

图1-4LATCH4仿真波形

显示译码器模块LED7S

(1)模块LED7S的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

entityled7sis

port(dd:

instd_logic_vector(3downto0);

y:

outstd_logic_vector(6downto0)

);

endled7s;

architectureoneofled7sis

begin

process(dd)

begin

caseddis

when"0000"=>y<="1000000";

when"0001"=>y<="1111001";

when"0010"=>y<="0100100";

when"0011"=>y<="0110000";

when"0100"=>y<="0011001";

when"0101"=>y<="0010010";

when"0110"=>y<="0000010";

when"0111"=>y<="1111000";

when"1000"=>y<="0000000";

when"1001"=>y<="0010000";

when"1010"=>y<="0001000";

when"1011"=>y<="0000011";

when"1100"=>y<="1000110";

when"1101"=>y<="0100001";

when"1110"=>y<="0000110";

when"1111"=>y<="0001110";

whenothers=>y<=null;

endcase;

endprocess;

end;

(2)模块LED7S的简单说明

LED7S模块的功能是将数值在LED数码管上显示,根据共阳数码管的特性编写VHDL代码,如输入dd为‘0000’时,输出y为‘1000000’,即数码管中g段LED灯不亮,其它灯亮,显示数字‘0’。

实验仿真波形中数值对应正确,说明了LED7S模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块LED7S的仿真结果

dd=0000时,y=1000000,数码管显示数字‘0’

图1-5LED7S仿真波形

控制模块CONTROL

(1)模块CONTROL的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

entitycontrolis

port(clk:

instd_logic;

cs,clr,le:

outstd_logic);

endcontrol;

architecturebehavofcontrolis

signalcurrent_state,next_state:

std_logic_vector(3downto0);

constantst0:

std_logic_vector:

="0000";

constantst1:

std_logic_vector:

="0001";

constantst2:

std_logic_vector:

="0011";

constantst3:

std_logic_vector:

="0010";

constantst4:

std_logic_vector:

="0110";

constantst5:

std_logic_vector:

="1110";

constantst6:

std_logic_vector:

="1111";

constantst7:

std_logic_vector:

="1101";

constantst8:

std_logic_vector:

="1100";

constantst9:

std_logic_vector:

="1000";

begin

com1:

process(current_state)

begin

casecurrent_stateis

whenst0=>next_state<=st1;clr<='1';cs<='0';le<='0';

whenst1=>next_state<=st2;clr<='0';cs<='1';le<='0';

whenst2=>next_state<=st3;clr<='0';cs<='1';le<='0';

whenst3=>next_state<=st4;clr<='0';cs<='1';le<='0';

whenst4=>next_state<=st5;clr<='0';cs<='1';le<='0';

whenst5=>next_state<=st6;clr<='0';cs<='1';le<='0';

whenst6=>next_state<=st7;clr<='0';cs<='1';le<='0';

whenst7=>next_state<=st8;clr<='0';cs<='1';le<='0';

whenst8=>next_state<=st9;clr<='0';cs<='1';le<='0';

whenst9=>next_state<=st0;clr<='0';cs<='0';le<='1';

whenothers=>next_state<=st0;clr<='0';cs<='0';le<='0';

endcase;

endprocesscom1;

reg:

process(clk)

begin

if(clk'eventandclk='1')then

current_state<=next_state;

endif;

endprocessreg;

endbehav;

(2)模块CONTROL的简单说明

CONTROL模块用于产生题目中所给的时序要求的控制信号。

对于状态机,划分各个状态,同时为了消除状态译码时由于竞争冒险产生的干扰窄脉冲,状态编码要采用格雷码。

根据控制器时序图设定每个状态下清零信号clr、闸门信号cs和锁存信号le的电平。

实验仿真结果中产生的波形与题目中给定的一致,说明了CONTROL模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块CONTROL的仿真结果

框中显示的波形与指导书

中给的控制器时序图一致

图1-6CONTROL仿真波形

1.4设计工程的QuartusII操作流程

(1)建立设计工程

(2)底层模块输入、编译、符号生成、仿真

(3)顶层设计原理图的输入和编译

(4)引脚锁定和编程下载

(5)数字频率计测试

下图为实际操作中的测试结果。

图1-7数字频率计测试结果

二、4位数字乘法器设计

2.1设计题目

试设计一4位二进制乘法器。

4位二进制乘法器的功能框图如下图所示。

输入信号:

4位被乘数A,4位乘数B,启动信号START。

输出信号:

8位乘积P,结束信号DONE。

P

A

8

4

B

MUL

4

DONE

START

图2-14位乘法器功能框图

当发出一个高电平的START信号以后,乘法器开始乘法运算,运算完成以后发出高电平的DONE信号。

2.2设计思路

对于4位二进制乘法器,将其在逻辑上视为由多个子操作和子运算组成,在结构上视为由许多模块或功能块构成,这样在设计的时候就可以采用“自顶向下”的设计方法,根据乘法器的原理对其进行顶层设计和底层模块设计。

乘法运算可以分解为相加和移位两种子运算,具体乘法器的算法可以用如下流程图来表示。

图2-2乘法器的算法流程图

2.3顶层设计和底层模块设计

2.3.1顶层设计

4位二进制乘法器的原理图中包括4位并行寄存器REGA、4位多功能移位寄存器REGB、5位多功能移位寄存器REGC、5进制加法计数器CNT、4位二进制加法运算器ADD4B,乘法器的控制器MULCON六种底层模块。

具体的顶层原理图的设计连接如下图所示。

图2-3乘法器顶层原理图

2.3.2底层模块设计

REGA模块

(1)模块REGA的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

entityREGAis

port(CP,LD:

instd_logic;

D:

instd_logic_vector(3downto0);

Q:

outstd_logic_vector(3downto0)

);

endREGA;

architectureoneofREGAis

begin

process(CP,LD,D)

begin

if(CP'eventandCP='1')then

if(LD='1')then

Q<=D;

endif;

endif;

endprocess;

end;

(2)模块REGA的简单说明

REGA模块为4位并行寄存器,当LD=0时,处于保持状态,当LD=1时,处于并行置数状态。

实验仿真波形说明了REGA模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块REGA的仿真结果

当LD=0,处于保持状态,输出端Q保持不变

当LD=1,处于并行置数状态,来一个CP脉冲上升沿,即可将D端数据送给Q

图2-4REGA仿真波形

REGB模块

(1)模块REGB的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

entityREGBis

port(CP,DIR:

instd_logic;

S:

instd_logic_vector(1downto0);

D:

instd_logic_vector(3downto0);

Q:

bufferstd_logic_vector(3downto0)

);

endREGB;

architectureoneofREGBis

begin

process(CP,D,S)

begin

if(CP'eventandCP='1')then

caseSis

when"00"=>null;

when"01"=>Q<=DIR&Q(3downto1);

when"11"=>Q<=D;

whenothers=>null;

endcase;

endif;

endprocess;

end;

(2)模块REGB的简单说明

REGB模块为4位多功能移位寄存器。

当S1S0=00时,寄存器处于保持状态;当S1S0=01时,寄存器处于右移状态;当S1S0=11时,寄存器处于并行置数状态;实验仿真波形说明了REGB模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块REGB的仿真结果

S1S0=00,Q保持不变

S1S0=01,寄存器处于右移状态,DIR=1,来一个CP脉冲上升沿,Q端输出变为1000

S1S0=11,处于并行置数状态,来一个CP脉冲上升沿,即可将D端数据送给Q

图2-5REGB仿真波形

REGC模块

(1)模块REGC的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

entityREGCis

port(CP,RD,DIR:

instd_logic;

S:

instd_logic_vector(1downto0);

D:

instd_logic_vector(4downto0);

Q:

bufferstd_logic_vector(4downto0)

);

endREGC;

architectureoneofREGCis

begin

process(CP,D,S,RD)

begin

if(RD='1')thenQ<=(others=>'0');

elsif(CP'eventandCP='1')then

caseSis

when"00"=>null;

when"01"=>Q<=DIR&Q(4downto1);

when"11"=>Q<=D;

whenothers=>null;

endcase;

endif;

endprocess;

end;

(2)模块REGC的简单说明

REGC模块为5位多功能移位寄存器。

当S1S0=00时,寄存器处于保持状态;当S1S0=01时,寄存器处于右移状态;当S1S0=11时,寄存器处于并行置数状态;当RD=1时,寄存器执行异步清零功能。

实验仿真波形说明了REGC模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块REGC的仿真结果

S1S0=11,处于并行置数状态,来一个CP脉冲上升沿,即可将D端数据送给Q

RD=1,寄存器异步清零,Q端输出变为00000

S1S0=01,寄存器处于右移状态,DIR=1,来一个CP脉冲上升沿,Q端输出变为10000

图2-6REGC仿真波形

CNT模块

(1)模块CNT的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityCNTis

port(CP,RD,ET:

instd_logic;

CO:

outstd_logic

);

endCNT;

architectureoneofCNTis

signalQ:

std_logic_vector(2downto0);

begin

process(CP,RD,ET)

begin

if(RD='1')then

Q<="000";

elsif(CP'eventandCP='1')then

ifET='1'then

if(Q=4)then

Q<="000";

else

Q<=Q+1;

endif;

endif;

endif;

endprocess;

process(Q)

begin

if(Q=4)then

CO<='1';

else

CO<='0';

endif;

endprocess;

end;

(2)模块CNT的简单说明

CNT模块为5进制加法计数器模块。

RD=1时,处于异步清零功能;ET=1时,允许计数;当Q=4时,产生一个进位。

实验仿真波形说明了CNT模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块CNT的仿真结果

RD=1,寄存器异步清零,所以图中再4个CP脉冲过后没有产生进位

ET=1,4个CP脉冲过后,产生一个进位脉冲

图2-7CNT仿真波形

ADD4B模块

(1)模块ADD4B的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entityADD4Bis

port(A:

instd_logic_vector(3downto0);

B:

instd_logic_vector(3downto0);

C:

outstd_logic_vector(3downto0);

COUT:

outstd_logic

);

end;

architectureoneofADD4Bis

signalCRLT:

std_logic_vector(4downto0);

signalAA,BB:

std_logic_vector(4downto0);

begin

AA<='0'&A;

BB<='0'&B;

CRLT<=AA+BB;

C<=CRLT(3downto0);

COUT<=CRLT(4);

end;

(2)模块ADD4B的简单说明

ADD4B模块实现的是4位二进制数的加法运算,并且产生进位输出。

实验仿真波形说明了ADD4B模块符合设计要求的逻辑功能,仿真结果如下图。

(3)模块ADD4B的仿真结果

1001+1001=10010,所以C=0010,进位COUT=1

0001+0001=0010

图2-8ADD4B仿真波形

MULCON模块

(1)模块MULCON的VHDL代码

libraryieee;

useieee.std_logic_1164.all;

entityMULCONis

port(START,I4,BI,CP:

instd_logic;

DONE,RD,CA,CB1,CB0,CC1,CC0,ET:

outstd_logic

);

endMULCON;

architectureoneofMULCONis

signalcurrent_state,next_state:

bit_vector(1downto0);

constantS0:

bit_vector(1downto0):

="00";

constantS1:

bit_vector(1downto0):

="01";

constantS2:

bit_vector(1downto0):

="11";

constantS3:

bit_vector(1downto0):

="10";

begin

COM:

process(current_state,START,BI,I4)

begin

DONE<='0';RD<='0';CA<='0';CB1<='0';CB0<='0';CC1<='0';CC0<='0';ET<='0';

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 演讲主持

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1