收藏 分销(赏)

信息与通信专题数字系统设计进阶设计.pptx

上传人:丰**** 文档编号:4740312 上传时间:2024-10-11 格式:PPTX 页数:80 大小:678.53KB
下载 相关 举报
信息与通信专题数字系统设计进阶设计.pptx_第1页
第1页 / 共80页
信息与通信专题数字系统设计进阶设计.pptx_第2页
第2页 / 共80页
点击查看更多>>
资源描述
一、一、常用组合逻辑电路模块常用组合逻辑电路模块 任一时刻的输出仅仅取决于当时的任一时刻的输出仅仅取决于当时的输入,与电路原来的状态无关,这输入,与电路原来的状态无关,这样的数字电路叫做组合逻辑电路。样的数字电路叫做组合逻辑电路。一、一、常用组合逻辑电路模块常用组合逻辑电路模块(1)编码器)编码器(2)译码器)译码器(3)比较器)比较器(4)数据选择器)数据选择器(5)三态输出电路)三态输出电路(6)算术逻辑单元)算术逻辑单元ALU设计设计(1)编码器)编码器A6A7A5A4A3A2A1A0Y2Y1Y083编码器编码器ENA7 A6 A5 A4 A3 A2 A1 A0Y2 Y1 Y00000000100000000010001000001000100000100001100010000100001000001010100000011010000000111(2)译码器)译码器38译码器译码器A6A7A5A4A3A2A1A0Y2Y1Y0ENa.38译码器译码器例如设计例如设计:四位二进制四位二进制-BCD码,然后将码,然后将BCD码码-七段显示器码。七段显示器码。(1)当输入为)当输入为09的数时,其十位数为的数时,其十位数为0,个位数,个位数=输入。输入。当输入为当输入为1015的数时,其十位数为的数时,其十位数为1,个位数,个位数=输入输入-10。(2)然后将十位和个位的)然后将十位和个位的BCD码转换为七段显示器码。码转换为七段显示器码。(2)译码器)译码器b.码制转换码制转换(3)比较器)比较器 AGTBBLTBAEQBAB如果如果 ab,输出为:输出为:agtb=1,altb=0,aeqb=0;如果如果 ab,输出为:输出为:altb=1,agtb=0,aeqb=0;如果如果 a=b,输出为:输出为:aeqb=1,agtb=0,altb=0。(4)数据选择器)数据选择器 ABCDZS0S1(5)三态输出电路)三态输出电路 library ieee;use ieee.std_logic_1164.all;entity triout is generic(bussize:integer:=8);port (data_in:in std_logic_vector(bussize-1 downto 0);en:in std_logic;data_out:out std_logic_vector(bussize-1 downto 0);end triout;architecture behave of triout is begin data_outZ);end behave;-注意此处的注意此处的“Z”要大写;要大写;AENB(6)算术逻辑单元()算术逻辑单元(ALU)电路设计)电路设计 算术电路单元算术电路单元 逻辑电路单元逻辑电路单元21数据数据选择器选择器输输出出CinABS0S1S2(1)算术电路单元的设计)算术电路单元的设计(2)逻辑电路单元的设计)逻辑电路单元的设计(3)21数据选择器数据选择器的设计的设计ALU运算功能运算功能功能选择功能选择输出输出F执行操作执行操作S2S1S0000F=A+B+Cin加法加法A+B+Cin01F=A-B-Cin减法减法A-B-Cin10F=A+Cin传递传递A+Cin11F=A-Cin传递传递A-Cin100F=ABAND01F=ABOR10F=A+BXOR11F=NOT ANOT算术电路单元算术电路单元 逻辑电路单元逻辑电路单元21数据数据选择器选择器输输出出CinABS0S1S2Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity malu is generic(n:integer:=8);Port(s:in std_logic_vector(2 downto 0);-运算功能选择信号运算功能选择信号 Cin:in std_logic;-初始进位初始进位 A,B:in std_logic_vector(n-1 downto 0);-两个运算输入信号两个运算输入信号 F:out std_logic_vector(n-1 downto 0);-运算结果输出信号运算结果输出信号 Cout:out std_logic);-运算进位输出信号运算进位输出信号End malu;Architecture arith of malu is Signal F1:std_logic_vector(n downto 0);-保存算术运算结果保存算术运算结果 Signal F2:std_logic_vector(n-1 downto 0);-保存逻辑运算结果保存逻辑运算结果BeginB1:Blockbegin process(s(1 downto 0)begin case S(1 downto 0)is when 00=F1 F1 F1 F1 F2 F2F2F2=not A;-Not end case;end process;end block B2;B3:blockBegin F=F1(n-1 downto 0)when s(2)=0 else F2;Cout1000-111LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ffd ISPORT(cp,d:IN STD_LOGIC;q:OUT STD_LOGIC);END ffd;ARCHITECTURE a OF ffd ISBEGIN process(cp)begin if cpevent and cp=1 then q1Not Qn-1 LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY fft ISPORT(cp:IN STD_LOGIC;q:OUT STD_LOGIC);END fft;ARCHITECTURE a OF fft IS signal qn:std_logic;BEGIN process(cp)begin if cpevent and cp=1 then qn=not qn;end if;end process;q=qn;END a;D QCP QRS型触发器型触发器SRQ00Qn-101010111不定不定 LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY ffrs ISPORT(s,r:IN STD_LOGIC;q,nq:OUT STD_LOGIC);END ffrs;ARCHITECTURE a OF ffrs IS signal qn,nqn:std_logic;BEGIN qn=r nor nqn;nqn=s nor qn;q=qn;nq0);elsif(clkEvent and clk=1)then q(3):=q(2);q(2):=q(1);q(1):=q(0);q(0):=din;end if;qout=q;end process;End behave;D QClk QDinClkD QClk QQ0D QClk QQ1D QClk QQ2Q3思考:还有没有第二种语言表示方法进行移位?思考:还有没有第二种语言表示方法进行移位?延迟电路设计延迟电路设计D QCPDinCPD QCPD QCPQ1Q2Q3LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;Entity Delay ISPORT(Din,clk:IN STD_LOGIC;Q1,Q2,Q3:OUT STD_LOGIC);END Delay;ARCHITECTURE a OF Delay IS Signal N1,N2,N3:STD_LOGIC;BEGIN Process(Din,clk)begin if clkevent and clk=1 then N3=N2;N2=N1;N1=Din;end if;end process;Q3=N3;Q2=N2;Q1=N1;END a;微分电路设计微分电路设计D QCPDinCPD QCPQ1Q2OP1OP2微分电路应用微分电路应用-计数器电路中计数器电路中 该微分电路接上计数器就构成了一个同步计数器。这种计数器多了一个该微分电路接上计数器就构成了一个同步计数器。这种计数器多了一个“同步控制信号同步控制信号EC”,计数器是否计数就由它来,计数器是否计数就由它来控制控制。如果将触发计数器计数的信号如果将触发计数器计数的信号Din直接接计数器控制管脚直接接计数器控制管脚EC,本来只希望计,本来只希望计数一次,可能因为输入信号数一次,可能因为输入信号Din过长,超过一个时钟脉冲周期,导致计数器发生过长,超过一个时钟脉冲周期,导致计数器发生误动作,多计数。误动作,多计数。因此,可在因此,可在计数器前接一微分电路计数器前接一微分电路,先将输入信号,先将输入信号Din微分成微分成仅有一个时钟仅有一个时钟脉冲周期宽的信号脉冲周期宽的信号,再提供给计数器,可提高计数器的准确性。,再提供给计数器,可提高计数器的准确性。思考:为什么思考:为什么EC可以使能计数?为什么可以使能计数?为什么Diff信号接到信号接到EC脚而不是脚而不是CP脚?脚?D QCPDinCPD QCPQ1Q2DiffEC Q CP计数器计数器LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY Diff is PORT(Din,Clk :IN STD_LOGIC;OP1,OP2:OUT STD_LOGIC);END Diff;ARCHITECTURE a OF Diff IS SIGNAL Q1,Q2 :STD_LOGIC;BEGINPROCESS(Clk)BEGIN If Clkevent AND Clk=1 THEN Q2=Q1;Q1=Din;End if;END PROCESS;OP1=Q1 AND NOT Q2;OP2=NOT Q1 AND Q2;END a;键盘消抖电路键盘消抖电路对于机械按键,虽然只是按下一次然后放掉,对于机械按键,虽然只是按下一次然后放掉,结果在按键信号稳定前后会出现一些不该存结果在按键信号稳定前后会出现一些不该存在的噪声,如图所示。如果将这样的信号直在的噪声,如图所示。如果将这样的信号直接输入给计数器,结果将可能发生计数超过接输入给计数器,结果将可能发生计数超过一次以上的错误。一次以上的错误。设计原理:设计原理:(1)一般人的按键速度至多是)一般人的按键速度至多是10次次/秒,即一次按键秒,即一次按键时间是时间是100ms,所以按下的时间可估算为,所以按下的时间可估算为50ms。假如。假如采样信号(采样信号(Sample)周期为)周期为8ms,则可采样到,则可采样到6次。次。(2)对于不稳定的噪声在)对于不稳定的噪声在4ms以下,则至多可采样到以下,则至多可采样到一次。一次。(3)对于如图电路,)对于如图电路,RS的组态仅有三种。的组态仅有三种。D QCPKeySamD QCPQ1Q2OPS QR键盘消抖电路键盘消抖电路Q1Q2SROP000100100不变不变1000不变不变11101D QCPKeySamD QCPQ1Q2OPS QR结论:结论:对按键信号对按键信号只有采样到两次只有采样到两次1才会输出才会输出1,两次,两次0才会输出才会输出0。否则。否则保持原状态不变。保持原状态不变。(4)如果按键信号用于计数器计数,那么消抖以)如果按键信号用于计数器计数,那么消抖以后可能宽度过长,而导致超过计数后可能宽度过长,而导致超过计数1次以上的错误次以上的错误发生,所以最好后面再接一个微分电路。发生,所以最好后面再接一个微分电路。D QCPKeySamD QCPQ1Q2DlyoutS QRD QCPDinclkD QCPD1D2DiffoutEC Q CP计数器计数器LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY Debunce isPORT(Clk :IN STD_LOGIC;Key :IN STD_LOGIC;DLY_OUT :OUT STD_LOGIC;DIF_OUT:OUT STD_LOGIC);END Debunce;ARCHITECTURE a OF Debunce ISSIGNAL SAMPLE,DLY,NDLY,DIFF:STD_LOGIC;BEGIND QCPKeyClkD QCPQ1Q2DlyoutS QRD QCPDinclkD QCPD1D2Diffout分频器分频器Free_Counter:Block Signal Q :STD_LOGIC_VECTOR(3 Downto 0);Signal tmp:STD_LOGIC;BeginPROCESS(Clk)BeginIF ClkEvent AND Clk=1 thentmp=Q(2);Q=Q+1;END IF;END PROCESS;SAMPLE=Q(2)AND NOT tmp;-about 8 ms END Block;D QCPKeyClkD QCPQ1分频器分频器Q2Debunce:BlockSIGNAL Q0,Q1,S,R:STD_LOGIC;BeginProcess(Clk)BeginIF ClkEVENT AND Clk=1 THENIF SAMPLE=1 THENQ1=Q0;Q0=KEY;S=Q0 AND Q1;R=NOT Q0 AND NOT Q1;END IF;END IF;End Process;DLY=R NOR NDLY;NDLY=S NOR DLY;DLY_OUT=DLY;End Block Debunce;Differential:BlockSignal D1,D2:STD_LOGIC;BEGINProcess(Clk)BeginIF ClkEVENT AND Clk=1 THEND2=D1;D1=DLY;END IF;End Process;DIFF=D1 AND NOT D2;END Block Differential;DIF_OUT=DIFF;END a;(3)计数器设计)计数器设计LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count IS Generic(n:integer:=3);PORT(clk:in STD_LOGIC;q:out STD_LOGIC_vector(n-1 downto 0);END count;ARCHITECTURE a OF count IS signal tmp:STD_LOGIC_vector(n-1 downto 0);BEGIN process(clk)begin if clkevent and clk=1 then tmp=tmp+1;end if;end process;q=tmp;END a;n位二进制加法计数器位二进制加法计数器24进进制计制计数器数器ENQAQBCLKLIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count24 ISPORT(en,Reset,clk:in STD_LOGIC;qa:out STD_LOGIC_VECTOR(3 DOWNTO 0);-个位数计数个位数计数 qb:out STD_LOGIC_VECTOR(1 DOWNTO 0);-十位数计数十位数计数END count24;ARCHITECTURE a1 OF count24 ISBEGINprocess(clk)variable tma:STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb:STD_LOGIC_VECTOR(1 DOWNTO 0);ResetbeginIf Reset=0 then tma:=0000;tmb:=00;else if clkevent and clk=1 then if en=1 then if tma=1001 then tma:=0000;tmb:=tmb+1;-如果个位数为如果个位数为9,个位数清零,十位数加一,个位数清零,十位数加一 elsif tmb=10 and tma=0011 then tma:=0000;tmb:=00;-如果十位数为如果十位数为2,个位数为,个位数为3,个位数十位数均清零,个位数十位数均清零 else tma:=tma+1;-以上条件均不满足,则个位数加一以上条件均不满足,则个位数加一 end if;end if;end if;end if;qa=tma;qb=tmb;将结果输出将结果输出end process;END a1;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count60 ISPORT(en,Reset,clk:in STD_LOGIC;qa:out STD_LOGIC_VECTOR(3 DOWNTO 0);-个位数计数个位数计数 qb:out STD_LOGIC_VECTOR(2 DOWNTO 0);-十位数计数十位数计数 rco:OUT STD_LOGIC);-计数进位计数进位END count60;ARCHITECTURE a OF count60 ISBEGINprocess(clk)variable tma:STD_LOGIC_VECTOR(3 DOWNTO 0);variable tmb:STD_LOGIC_VECTOR(2 DOWNTO 0);60进进制计制计数器数器ENQAQBCLKRCOResetbeginIf Reset=0 then tma:=0000;tmb:=0000;else if clkevent and clk=1 thenif en=1 thenrco=tmb(2)and tmb(0)and tma(3)and tma(0);-计算是否有进位,即是否计数超过计算是否有进位,即是否计数超过59,超过则有进位,否则无进位,超过则有进位,否则无进位 if tma=1001 then tma:=0000;-如果个位数为如果个位数为9,则个位数清零,则个位数清零 if tmb=101 then tmb:=000;else tmb:=tmb+1;end if;-如果十位数为如果十位数为5,则十位数清零,否则十位数加一,则十位数清零,否则十位数加一 else tma:=tma+1;-如果个位数不为如果个位数不为9,则个位数加一,则个位数加一 end if;end if;end if;end if;qa=tma;qb=tmb;将结果输出将结果输出end process;END a;(4)分频器设计分频器设计 计数器就是对时钟脉冲计数,同时计数器还是一个分频器。计数器就是对时钟脉冲计数,同时计数器还是一个分频器。下图为一个下图为一个3位的计数器的仿真波形图。位的计数器的仿真波形图。一个一个3 bits的计数器,它所能计数的范围为的计数器,它所能计数的范围为07(=23-1)。同)。同理,理,n bits的计数器所能计数范围为的计数器所能计数范围为02n-1。Q0、Q1、Q2的波形频率分别为时钟脉冲信号的波形频率分别为时钟脉冲信号Clk的的1/2、1/4、1/8,由此可以知道,由此可以知道,n bits的计数器可获得的最低分频频率为的计数器可获得的最低分频频率为时钟脉冲信号时钟脉冲信号Clk的的1/2n。输出信号输出信号Q(2downto 0)的频率等于信号的频率等于信号Q2的频率,信号的频率,信号Q(2downto 1)的频率也为信号的频率也为信号Q2的频率。由此可以知道,矢量的频率。由此可以知道,矢量信号的频率为最高位信号的频率。信号的频率为最高位信号的频率。对于对于4MHz频率信号,若得到频率信号,若得到1Hz时钟脉冲信号时钟脉冲信号Clk,通过公,通过公式式f=1/2n可计算出可计算出n22,即应设计一个,即应设计一个22位的计数器。位的计数器。4MHz到到1Hz的分频器的分频器 LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;ENTITY count ISPORT(clk:in STD_LOGIC;q:out STD_LOGIC;END count;ARCHITECTURE a OF count ISsignal tmp:STD_LOGIC_vector(21 downto 0);Beginprocess(clk)beginif clkevent and clk=1 then tmp=tmp+1;end if;end process;q=tmp(21);END a;数控分频器设计数控分频器设计 对于一个加法计数器,装载不同的计数对于一个加法计数器,装载不同的计数初始值时,会有不同频率的溢出输出信号。初始值时,会有不同频率的溢出输出信号。计数器溢出时,输出计数器溢出时,输出1电平,电平,同时溢同时溢出时的出时的1电平反馈给计数器的输入端作为装电平反馈给计数器的输入端作为装载信号;载信号;否则输出否则输出0电平。电平。Library ieee;Use ieee.std_logic_1164.all;Entity speaker isPort(clk :in std_logic;Freq_num:in integer range 0 to 2047;-16#7FF#speaker:out std_logic);End speaker;Architecture a1 of speaker is signal power_speaker:std_logic;beginProcess(clk)variable count11bit:integer range 0 to 2047;Begin if clkevent and clk=1 then if count11bit=2047 then count11bit:=Freq_num;power_speaker=1;else count11bit:=count11bit+1;power_speaker=0;end if;end if;end process;-将输出再进行将输出再进行2分频,将脉冲展宽,以使扬声器有足够功率发音分频,将脉冲展宽,以使扬声器有足够功率发音process(power_speaker)variable count2bit:std_logic;Begin if power_speakerevent and power_speaker=1 then count2bit:=not count2bit;if count2bit=1 then speaker=1;else speaker tone tone tone tone tone tone tone tone tone tone tone tone tone tone tone tone tone=2047;End case;End process;End a1;35 63 5 65 31 2 音调音调音符音符1234567初初始始值值高高1730175017701790181518301930中中1410149015601600162216501690低低77391210361116119712901372次低次低100200300400500600700Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity top isPort(clk :in std_logic;spkout:out std_logic);End top;Architecture a1 of top iscomponent tonePort(index:in integer range 0 to 16;tone :out integer range 0 to 16#7FF#);end component;component speakerPort(clk :in std_logic;Freq_in:in integer range 0 to 16#7FF#;speaker:out std_logic);end component;signal index1:integer range 0 to 16;signal tone2:integer range 0 to 16#7FF#;signal ck4:std_logic;beginprocess(clk)variable q:std_logic_vector(17 downto 0);Begin if clkevent and clk=1 then q:=q+1;end if;ck=q(17);end process;process(ck)Begin if ckevent and ck=1 then if index1=15 then index1=0;else index1=index1+1;end if;end if;end process;u1:tone port map(index1,tone2);u2:speaker port map(clk,tone2,spkout);End a1;(5)ROM设计设计 ROMAddrOeDLibrary ieee;Use ieee.std_logic_1164.all;Entity rom isPort(addr:in std_logic_vector(3 downto 0);oe:in std_logic;D:out std_logic_vector(7 downto 0);End rom;Architecture a of rom isBegind=00000001 when addr=”0000”and oe=1 else 00000100 when addr=”0001”and oe=1 else 00010100 when addr=”0010”and oe=1 else 00100100 when addr=”0011”and oe=1 else 00000101 when addr=”0100”and oe=1 else 00000110 when addr=”0101”and oe=1 else 00010001 when addr=”0110”and oe=1 else 00100001 when addr=”0111”and oe=1 else 00100001 when addr=”1000”and oe=1 else 01000001 when addr=”1001”and oe=1 else 10000001 when addr=”1010”and oe=1 else 01111001 when addr=”1011”and oe=1 else 01111101 when addr=”1100”and oe=1 else 01111101 when addr=”1101”and oe=1 else 00111111 when addr=”1110”and oe=1 else 10111111;End a;(6)堆栈设计)堆栈设计fullDoutStackDinPushPopResetClkempty堆栈存储数据的特点:堆栈存储数据的特点:按照先入后出、后入先出的原则存储数据。按照先入后出、后入先出的原则存储数据。fullDoutStackDinPushPopResetClkempty16字节的堆栈字节的堆栈 library ieee;use ieee.std_logic_1164.all;entity mstack is port(reset,push,pop,clk:in std_logic;din:in std_logic_vector(7 downto 0);empty,full:out std_logic;dout:out std_logic_vector(7 downto 0);end mstack;architecture a1 of mstack is type stack is array(15 downto 0)of std_logic_vector(7 downto 0);begin process(clk,reset)variable s:stack;variable x:std_logic;标记堆栈是否满标记堆栈是否满 variable cnt:integer range 0 to 15;堆栈指针堆栈指针 begin16字节的堆栈字节的堆栈 if reset=1 then dout=00000000;x:=0;cnt:=0;else if clkevent and clk=1 then if push=1 and pop=0 and x=0 then if cnt/=15 then empty=0;s(cnt):=din;cnt:=cnt+1;else s(15):=din;x:=1;end if;elsif push=0and pop=1 and cnt/=0 then if x=0 then cnt:=cnt-1;dout=s(cnt);else dout=s(15);x:=0;end if;elsif cnt=0 then empty=1;end if;end if;end if;full=x;end process;end a1;cnt思考:这个例子是不是空递增堆栈?思考:这个例子是不是空递增堆栈?FIFOFIFO如何实现?如何实现?(7)状态机的电路设计)状态机的电路设计 我们可以用我们可以用输入信号输入信号X和和电路状态电路状态Q来描述时序电路的逻辑来描述时序电路的逻辑功能,这时时序电路称为功能,这时时序电路称为状态机状态机(State Machine)。)。根据输出信号和输入信号以及电路状态的关系,状态机可以根据输出信号和输入信号以及电路状态的关系,状态机可以分为两种:分为两种:穆尔(穆尔(Moore)型)型和和米利(米利(Mealy)型)型。Y=FX,Q Y=FQ 米利(米利(Mealy)型:)型:穆尔(穆尔(Moore)型:)型:一个简单一个简单More型状态机型状态机 S0S2S3/1S1/1/0/0(1)More型状态机型状态机 S0S20/01/0S31/0S11/10/00/10/01/0输入信号影响状态的转换。输入信号影响状态的转换。输出信号和输入信号无关。输出信号和输入信号无关。LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY more ISPORT(Clk,reset:in Std_logic;din:in Std_logic;op:out Std_logic);END more;ARCHITECTURE a OF more ISTYPE STATE_TYPE IS(s0,s1,s2,s3);SIGNAL state:STATE_TYPE;BEGIN S0S20/01/0S31/0S11/10/00/10/01/0PROCESS(clk,reset)BEGIN If reset=1 THENstate IF din=1 THEN state=s1;else state IF din=0 THEN state=s2;else state IF din=0 THEN state=s3;else state IF din=1 THEN state=s0;else state=s1;END IF;End Case;End if;End if;End process;op=1 when state=s1 else 0;END a;S0S20/01/0S31/0S11/10/00/10/01/0(2)Mealy型状态机型状态机 S0S20/01/0S31/1S11/10/00/00/11/1LIBRARY ieee;USE ieee.std_logic_1164.ALL;ENTITY mealy ISPORT(Clk,reset:IN STD_LOGIC;-clock din:IN STD_LOGIC;op:OUT STD_LOGIC);END mealy;ARCHITECTURE a OF mealy ISTYPE STATE_TYPE IS(s0,s1,s2,s3);SIGNAL state:STATE_TYPE;BEGINS0S20/01/0S31/1S11/10/00/00/11/1PROCESS(clk,reset)BEGINIf reset=1 THENstate IF din=1 THEN state=s1;else stateIF din=0 THEN state=s2;else state IF din=0 THEN state=s3;else state IF din=1 THEN state=s0;else state=s1;END IF;END CASE;End if;End if;END PROCESS;op=1 when(state=s0 and din=1)or (state=s1 and din=1)or (state=s3 and din=1)else 0;-输出不仅与状态有关,而且和输入有关输出不仅与状态有关,而且和输入有关。END a;S0S20/01/0S31/1S11/10/00/00/11/1三、A/D控制逻辑电路的实现(1)ADC0809控制电路实现(仿真)控制电路实现(仿真)(2)TLC5510控制电路实现(仿真控制电路实现(仿真+下载实现)下载实现)A/D转换控制转换控制ADC0809是是CMOS的的8位位A/D转换器,片内有转换器,片内有8路模拟路模拟开关,可控制开关,可控制8个模拟量中个模拟量中的一个进入转换器中。的一个进入转换器中。ADC0809的分辨率为的分辨率为8位,位,转换时间约转换时间约100us(128us),含锁存控制的含锁存控制的8路多路开关,路多路开关,输出有三态缓冲器控制,单输出有三态缓冲器控制,单5V电源供电。电源供电。双列直插式封装,共有双列直插式封装,共有28条条引脚。引脚。引脚说明:引脚说明:(1)IN0IN7:8路模拟电压输入,用于输入被转换的模拟电压信号。路模拟电压输入,用于输入被转换的模拟电压信号。(2)地址输入和控制)地址输入和控制ALE为地址锁存允许控制,高电平有效。当其为高电平时,为地址锁存允许控制,高电平有效。当其为高电平时,ADDA、ADDB和和ADDC三条地址线上地址信号得以锁存。三条地址线上地址信号得以锁存。(3)数字量输出及控制线)数字量输出及控制线START为为“启动脉冲启动脉冲”输入,宽度应大于输入,宽度应大于100ns,上升沿清零内部寄存器,下降,上升沿清零内部寄存器,下降沿启动沿启动ADC工作。工作。EOC为转换结束输出线,该线上高电平表示转换结束。为转换结束输出线,该线上高电平表示转换结束。D0D7为数字量输出线,为数字量输出线,D7为最高位。为最高位。OE为为“输出允许输出允许”线,高电平有效。线,高电平有效。(4)电源线及其它)电源线及其它CLOCK为时钟输入线为时钟输入线(最大最大800KHz),可接,可接640KHz时钟,用于提供逐次比较所时钟,用于提供逐次比较所
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服