下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章,基本逻辑电路设计实例,组合逻辑电路设计 时序逻辑电路设计 存储器设计 状态机设计,一、4选1多路选择器,组合逻辑电路的设计,LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY mux4 IS PORT (a,b,c,d,s0,s1: IN std_logic; y: OUT std_logic ); END mux4; ARCHITECTURE func OF mux4 IS VARIABLE sel:std_logic_vector(1 DOWNTO 0); BEGIN sel=s1,PROCESS (s0,s1) sel:=s1s0
2、CASE sel IS WHEN 00= y y y y y = X; END CASE; END PROCESS;,BEGIN PROCESS (s0,s1) BEGIN IF(s0=0and s1=0) THEN y =a; ELSIF(s0=0and s1=1)THEN y =b; ELSIF(s0=1and s1=0)THEN y =c; ELSIF(s0=1and s1=1)THEN y =d; ELSE y = X; END IF; END PROCESS;,二:编码器与译码器,1、优先级8-3编码器,优先编码器就是当有两个或两个以上的输入有效时,仅对优先级高的输入进行编码,LIB
3、RARY IEEE; USE IEEE.std_logic_1164.all; ENTITY encoder8_3 IS PORT (d: IN std_logic_vector(7 downto 0); y0,y1,y2: OUT std_logic ); END encoder8_3; ARCHITECTURE func OF encoder8_3 IS BEGIN PROCESS(d) VARIABLE temp:std_logic_vector(2 downto 0); BEGIN IF(d(7)=1) THEN temp:=“111”; ELSIF(d(6)=1) THEN temp
4、:=“110”;,ELSIF(d(5)=1) THEN temp:=“101”; ELSIF(d(4)=1) THEN temp:=“100”; ELSIF(d(3)=1) THEN temp:=“011”; ELSIF(d(2)=1) THEN temp:=“010”; ELSIF(d(1)=1) THEN temp:=“001”; ELSIF(d(0)=1) THEN temp:=“000”; END IF y(0)=temp(0); y(1)=temp(1); y(2)=temp(2); END PROCESS END func;,普通8-3编码器,CASE d IS WHEN 1000
5、0000= temp temp temp temp temp temp temp temp temp= XXX; END CASE;,2、138译码器,LIBRARY IEEE; USE IEEE.std_logic_1164.all; ENTITY decoder3_8 IS PORT (a2,a1,a0,g1,g2a,g2b: IN std_logic; y: OUT std_logic_vector); END decoder3_8; ARCHITECTURE func OF decoder3_8 IS BEGIN PROCESS(a2,a1,a0,g1,g2a,g2b) VARIABL
6、E temp:std_logic_vector(2 downto 0); BEGIN temp:=a2 IF(g1=1and g2a=0and g2b=0)THEN,CASE temp IS WHEN “000”=yyy=“XXXXXXXX”; END CASE; ELSE y=“11111111” END IF; END PROCESS; END func;,三:加法器,1、一位全加器,半加器h_adder的描述,一位全加器可以由两个半加器和一个与门连接而成。,LIBRARY IEEE; -半加器描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY h_adder I
7、S PORT (a, b : IN STD_LOGIC; co, so : OUT STD_LOGIC); END h_adder; ARCHITECTURE fh1 OF h_adder is BEGIN so = NOT(a XOR (NOT b) ; co = a AND b ; END fh1;,全加器f_adder电路图及其实体模块,LIBRARY IEEE; -1位二进制全加器顶层设计描述 USE IEEE.STD_LOGIC_1164.ALL; ENTITY f_adder IS PORT (ain,bin,cin : IN STD_LOGIC; cout,sum : OUT S
8、TD_LOGIC ); END f_adder; ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder -调用半加器声明语句 PORT ( a,b : IN STD_LOGIC; co,so : OUT STD_LOGIC); END COMPONENT ; COMPONENT or2a PORT (a,b : IN STD_LOGIC; c : OUT STD_LOGIC); END COMPONENT; SIGNAL d,e,f : STD_LOGIC; -定义3个信号作为内部的连接线。 BEGIN u1 : h_adder PORT MAP(a
9、=ain,b=bin,co=d,so=e);-例化语句 u2 : h_adder PORT MAP(a=e, b=cin, co=f,so=sum); u3 : or2a PORT MAP(a=d, b=f, c=cout); END fd1;,2、串行进位加法器,两个多位二进制数相加时,除了最低位之外,每一位相加都必须包括低位进位,因此必须使用全加器。 按照加法规则,只需将低位全加器的进位输出端Ci接到高位全加器的进位输入端Ci+1就可以构成多位二进制加法器。,例:两个二位数相加,串行进位链:,c0 = (a0 and b0) or (a0 or b0)and cin); c1 = (a1
10、and b1) or (a1 or b1)and c0);,时序逻辑电路的设计,时序电路中,任一时刻的输出信号不仅取决于当时的输入信号,而且还取决于电路原来的状态,即还和以前的输入信号及输出有关。也就是说,时序逻辑电路具有记忆功能。,一:时钟信号和复位信号,任何时序电路都是以时钟信号为驱动程序的,时序电路也只有在时钟信号的边沿到来时,其状态才发生改变。 因此,时钟信号通常是描述时序电路的程序的执行条件,时序电路也总是以时钟进程形式来进行描述。,1、时钟信号,1)、进程的敏感信号是时钟信号,PROCESS(clock_Signal) BEGIN IF(clock_edge_condition)T
11、HEN Signal_out= Signal_in; END IF; END PROCESS;,2)、用进程中的WAIT语句等待时钟信号,PROCESS BEGIN WAIT ON(clock_Signal) UNTIL(clock_edge_condition) Signal_out= Signal_in; END PROCESS;,时钟沿描述: 上升沿: If(clkevent and clk=1)Then If(rising_edge(clk)Then Wait Until clk=1 If(clklast_value=0and clkevent and clk=1)Then 下降沿:
12、If(clkevent and clk=0)Then If(falling_edge(clk)Then Wait Until clk=0 If(clklast_value=1and clkevent and clk=0)Then,2、复位信号,触发器的初始状态是由复位信号来设置。 根据复位信号对触发器复位的操作不同,分为同步复位和非同步复位(异步复位)两种。,1)、同步复位,2)、非同步复位,当复位信号有效,且在给定的时钟边沿到来时,触发器才被触发。,一旦复位信号有效,触发器就被触发。,在用VHDL语言描述时,同步复位一定在以时钟为敏感信号的进程中定义,且用If语句来描述必要的复位条件。,PR
13、OCESS(clock_Signal) BEGIN IF(clock_edge_condition)THEN IF(reset_condition)Then Signal_out= reset_value; Else Signal_out= Signal_in; END IF; END IF; END PROCESS;,PROCESS BEGIN Wait on(clock_Signal) Until(clock_edge_condition) IF(reser_condition)Then Signal_out= reset_value; Else Signal_out= Signal_in
14、; END IF; END PROCESS;,在用VHDL语言描述异步复位时,首先在进程的敏感信号中除时钟信号外,还应加上复位信号;然后用If语句来描述必要的复位条件;最后在Eleif段描述时钟信号边沿条件,并加上event属性。,PROCESS(reset_Signal,clock_Signal) BEGIN IF(reset_condition)THEN Signal_out= reset_value; Elsif(clock_event and clock_edge_condition)Then Else Signal_out= Signal_in; END IF; END PROCES
15、S;,二:D触发器,LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY dff IS PORT (data,clk: IN STD_LOGIC; Q: OUT STD_LOGIC);END dff;ARCHITECTURE Behavior OF dff ISBEGIN PROCESS(clk) BEGIN IF clkEVENT AND clk=1 THENQ=data; END IF; END PROCESS;END Behavior;,1、D触发器,不推荐,LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENT
16、ITY dff IS PORT (data,clk: IN STD_LOGIC; Q: OUT STD_LOGIC);END dff;ARCHITECTURE Behavior OF dff ISBEGIN PROCESS BEGIN Wait Until clkEVENT AND clk=1Q=data; END PROCESS;END Behavior;,2、带异步复位上升沿的D触发器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_reset IS PORT (data: IN STD_LOGIC; clk: IN STD_LO
17、GIC; reset: IN STD_LOGIC; Q: OUT STD_LOGIC); END dff_reset;,ARCHITECTURE dff OF dff_reset IS BEGIN PROCESS(clk,reset) BEGIN IF reset=0THEN Q=0; Elsif clkevent and clk=1 THEN Q=data; END IF; END IF; END PROCESS; END dff;,3、带异步置位复位上升沿的D触发器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_asyn IS
18、PORT (data: IN STD_LOGIC; clk: IN STD_LOGIC; reset: IN STD_LOGIC; set: IN STD_LOGIC; Q: OUT STD_LOGIC); END dff_asyn;,ARCHITECTURE dff OF dff_asyn IS BEGIN PROCESS(clk,set,reset) BEGIN IF set=0THEN Q=1; Elsif reset=1THEN Q=0; Elsif clkevent and clk=1 THEN Q=data; END IF; END PROCESS; END dff;,4、带异步复
19、位和输入使能上升沿的D触发器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY dff_ck_en IS PORT (data: IN STD_LOGIC; clk: IN STD_LOGIC; reset: IN STD_LOGIC; en: IN STD_LOGIC; Q: OUT STD_LOGIC); END dff_ck_en;,ARCHITECTURE dff OF dff_ck_en IS BEGIN PROCESS(clk,reset) BEGIN IF reset=0THEN Q=0; Elsif clkevent and c
20、lk=1 THEN IF en=1 THEN Q=data; END IF; END IF; END PROCESS; END dff_ck_en;,三:寄存器,在数字系统中能够用来存储一组二进制码的同步时序逻辑电路,一般由多位触发器连接而成。通常可以按功能分为:锁存器和移位寄存器。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY reg4b IS PORT(load:IN STD_LOGIC din:IN STD_LOGIC_VECTOR(3 DOWNTO 0); dout:OUT STD_LOGIC_VECTOR(3 DOWNTO 0);
21、 END reg4b; ARCHITECTURE behav OF reg4b is BEGIN PROCESS(load,din) BEGIN IF loadevent and load=1 THEN dout=din; END IF; END PROCESS; END behav;,1、4位锁存器,2、串行输入、并行输出移位寄存器,移位寄存器除了具有存储二进制码的功能以外,还具有移位功能。即寄存器里面存储的代码能够在时钟的作用下依次进行左移或者右移。 移位寄存器不仅可以用来存储数据,还可以用来实现数值运算和数据处理等。,LIBRARY IEEE; USE IEEE.STD_LOGIC_11
22、64.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shift IS PORT (clk,rst,data:IN STD_LOGIC; q:OUT STD_LOGIC_VICTOR(7 downto 0); END shift; ARCHITECTURE sh1 OF shift is Signal q_temp:STD_LOGIC_VECTOR(7 downto 0) BEGIN PROCESS(clk,rst) BEGIN IF rst=1 THEN q_temp0); Elsif clkevent and clk=1 THEN q_temp=q
23、_temp(6 downto 0),8位带置位移位锁存器,3、串行输入、串行输出移位寄存器,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY shift IS PORT (clk, a:IN STD_LOGIC; b:OUT STD_LOGIC_VICTOR(4 downto 0); END shift;,ARCHITECTURE sh2 OF shift is COMPONENT dff PORT (d,clk:IN STD_LOGIC; q:OUT STD_LOGIC); S
24、ignal z:STD_LOGIC_VECTOR(4 downto 0) BEGIN z(4)=a; G1:FOR i IN 3 downto 0 GENERATE Dffx:dff PORT MAP (z(i),clk,z(i+1); END GENERATE; b=z(0); END sh2;,3、通用寄存器,通用寄存器可以直接设置初始值,完成双向移位寄存器功能,加法计数器功能、减法计数器功能。初始值并行输入置数。由3位二进制数输入控制工作模式。当寄存器计数为0时,引脚term输出高电平。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEE
25、E.STD_LOGIC_UNSIGNED.ALL; ENTITY unic IS GENERIC (n: Positive:=8); PORT (clk,shl,shr:IN STD_LOGIC; mode:OUT STD_LOGIC_VICTOR(2 downto 0) datain:IN STD_LOGIC_VICTOR(n-1) downto 0) dataout:OUT STD_LOGIC_VICTOR(n-1) downto 0) term:OUT STD_LOGIC); END unic;,ARCHITECTURE v1 OF unic is Signal temp:STD_LOG
26、IC_VECTOR(n-1) downto 0) BEGIN PROCESS BEGIN WAIT until rising_edge(clk) CASE mode IS WHEN “000”=temp0); WHEN “001”=temptemptemptemptempNULL; END CASE; END PROCESS;,PROCESS(temp) BEGIN term=1; FOR i IN temprange LOOP IF temp(i)=1 THEN; temp=0 EXIT; END IF; END LOOP; END PROCESS; dataout=temp; END v1
27、;,4、移位寄存器,移位寄存器除了具有存储代码的功能以外,还具有移位功能。所谓移位功能,是指寄存器里存储的代码能在移位脉冲的作用下依次左移或右移。因此,移位寄存器不但可以用来寄存代码,还可用来实现数据的串/并转换、数值的运算以及数据处理等。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY SHIFTER IS PORT(DATA:IN STD_LOGIC_VECTOR(7 DOWNTO 0); SHIFT_LEFT,SHIFT_RIGHT:IN STD_LOGIC; RESET:IN STD_LOGIC; MODE:IN STD_LOGIC_
28、VECTOR(1 DOWNTO 0); QOUT:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0); END SHIFTER; ARCHITECTURE ART OF SHIFTER IS BEGIN PROCESS BEGIN,WAIT UNTIL(RISING_EDGE(CLK); IF(RESET=1)THEN QOUTQOUTQOUTQOUTNULL; END CASE; END IF; END PROCESS; END ARCHITECTURE ART;,四:计数器 计数器是在数字系统中使用最多的时序电路,它不仅能用于对时钟脉冲计数,还可以用于分频、定时、产生节
29、拍脉冲和脉冲序列以及进行数字运算等。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNTM60 IS PORT(CI:IN STD_LOGIC; NRESET:IN STD_LOGIC; LOAD:IN STD_LOGIC; D:IN STD_LOGIC_VECTOR(7 DOWNTO 0); CLK:IN STD_LOGIC; CO:OUT STD_LOGIC; QH:BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0); QL:BUFFER STD_L
30、OGIC_VECTOR(3 DOWNTO 0); END CNTM60;,1、同步计数器 模为60,带异步复位、同步置数功能的8421BCD码计数器。,ARCHITECTURE ART OF CNTM60 IS BEGIN CO=1WHEN(QH=0101AND QL=1001AND CI=1)ELSE0; PROCESS(CLK,NRESET) IS BEGIN IF(NRESET=0)THEN QH=0000; QL=“0000”; ELSIF(CLKEVENT AND CLK=1)THEN IF(LOAD=1)THEN QH=D(7 DOWNTO 4); QL=D(3 DOWNTO 0)
31、;,ELSIF(CI=1)THEN IF(QL=9)THEN QL=0000; IF(QH=5)THEN QH=0000; ELSE QH=QH+1; END IF; ELSE QL=QL+1; END IF; END IF; END IF; END PROCESS; END ART;,2、异步计数器 用VHDL语言描述异步计数器,与同步计数器不同之处主要表现在对各级时钟的描述上。下面是一个由4个触发器构成的异步计数器。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY DIFFR IS PORT(CLK,CLR,D:IN STD_LOGIC;
32、 Q,QB;OUT STD_LOGIC); END DIFFR; ARCHITECTURE ART1 OF DIFFR IS SIGNA Q_IN:STD_LOGIC; BEGIN Q=Q_IN; QB=NOT Q_IN;,PROCESS(CLK,CLR) IS BEGIN IF(CLR=1)THEN Q_IN=0; ELSIF (CLKEVENT AND CLK=1) THEN Q_IN=D; END IF; END PROCESS; END ART1;,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY RPLCOUNT IS PORT(CL
33、K,CLR:IN STD_LOGIC; COUNT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END RPLCOUNT; ARCHITECTURE ART2 OF RPLCOUNT IS SIGNA COUNT_IN:STD_LOGIC_VECTOR(4 DOWNTO 0); COMPONENT DIFFR IS PORT(CLK,CLR,D:IN STD_LOGIC; Q,QB:OUT STD_LOGIC); END COMPONENT DIFFR;,BEGIN COUNT_IN(0)COUNT_IN(I), CLR=CLR, D=COUNT_IN(I+1), Q=
34、COUNT_IN(I), QB=COUNT_IN(I+1); END GENERATE GEN1; END ART2;,存储器设计,半导体存储器从功能上可以分为只读存储器和随机存储器两大类。 两类存储器描述中的相同问题存储器中的数据类型: 通常用数组来描述存储器结构,数组的元素就是存储器中的数据。,1ROM 只读存储器在正常工作时从中读取数据,不能快速地修改或重新写入数,适用于存储固定数据的场合。下面是一个容量为2564的ROM存储的例子,该ROM有8位地址线ADR(0)ADR(7),4位数据输出线DOUT(0)DOUT(3)及使能信号EN。,注意:需要初始化,LIBRARY IEEE; US
35、E IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; USE STD.TEXTIO.ALL; ENTITY ROM IS PORT(EN:IN STD_LOGIC; ADR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); END ROM;,ARCHITECTURE ART OF ROM IS SUB TYPE WORD IS STD_LOGIC_VECTOR(3 DOWNTO 0); TYPE MEMORY IS ARRAY(0 TO
36、 255) OF WORD; SIGNA ADR_IN:INTEGER RANGE 0 TO 255; VARIABLE ROM:MEMORY; VARIABLE START_UP:BOOLEAN:=TRUE; VARIABLE L:LINE; VARIABLE J:INTEGER; FILE ROMIN:TEXT IS IN “ROMIN”; BEGIN PROCESS(EN,ADR) IS BEGIN,IF START_UP THEN FOR J IN ROMRANGE LOOP READLINE(ROMIN,1); READ(1,ROM(J); END LOOP; START_UP:=F
37、ALSE END IF; ADR_IN=CONV_INTEGER(ADR); IF(EN=1)THEN DOUT=ROM(ADR_IN); ELSE DOUT=ZZZZ; END IF; END PROCESS; END ART;,初始化,2SRAM RAM和ROM的主要区别在于RAM描述上有读和写两种操作,而且在读/写上对时间有较严格的要求。下面是一个88位的双口SRAM。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTI
38、TY DPRAM IS GENERIC(WIDTH:INTEGER :=8; DEPTH:INTEGER :=8; ADDER:INTEGER :=3); PORT(DATAIN:IN STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); DATAOUT:OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); CLOCK,WE,RE:IN STD_LOGIC; WADD,RADD:IN STD_LOGIC_VECTOR(ADDER-1 DOWNTO 0); END DPRAM;,ARCHITECTURE ART OF DPRAM IS TYPE MEM
39、 IS ARRAY(0 TO DEPTH-1) OF STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); SIGNA RAMTMP:MEM; BEGIN,PROCESS(CLOCK) IS BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF(WE=1)THEN RAMTMP(CONV_INTEGER(WADD)=DATAIN; END IF; END IF; END PROCESS;,PROCESS(CLOCK) IS BEGIN IF(CLOCKEVENT AND CLOCK=1)THEN IF (RE=1) THEN DATAOUT=RA
40、MTMP(CONV_INTEGER(RADD); END IF; END IF; END PROCESS; END ART;,3队列 先进先出队列FIFO,作为数据缓冲器,通常其数据存放结构完全与RAM一致,只是存取方式有所不同。,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_ARITH.ALL; ENTITY REG_FIFO IS GENERIC(WIDTH:INTEGER :=8; DEPTH:INTEGER :=8; ADDR:INTEGER :=3); PORT(DATA:IN STD_LOGIC_VECT
41、OR(WIDTH-1 DOWNTO 0); Q:OUT STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); ACLR,CLOCK,WE,RE:IN STD_LOGIC; EF,FF :OUT STD_LOGIC; END REG_FIFO;,TYPE MEM IS ARRAY(0 TO DEPTH-1) OF STD_LOGIC_VECTOR(WIDTH-1 DOWNTO 0); SIGNA RAMTMP:MEM; SIGNA WADD :STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); SIGNA RADD:STD_LOGIC_VECTOR(ADDR-
42、1 DOWNTO 0); SIGNA WORDS:STD_LOGIC_VECTOR(ADDR-1 DOWNTO 0); ARCHITECTURE ART OF REG_FIFO IS,BEGIN PROCESS(ACLR,CLOCK) IS BEGIN IF (ACLR=0) THEN WADD0); ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1) THEN IF (WADD=WORDS) THEN WADD0); ELSE WADD=WADD+1; END IF; END IF; END IF; END PROCESS;,PROCESS(CLOCK
43、) IS BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1) THEN RAMTMP(CONV_INTEGER(WADD)=DATA; END IF; END IF; END PROCESS;,PROCESS(ACLR,CLOCK) IS BEGIN IF (ACLR=0) THEN RADD0); ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1) THEN IF (RADD=WORDS) THEN RADD0); ELSE RADD=RADD+1; END IF; END IF; END IF; END
44、PROCESS;,PROCESS(CLOCK) IS BEGIN IF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1) THEN Q=RAMTMP(CONV_INTERGER(RADD); END IF; END IF; END PROCESS;,PROCESS(ACLR,CLOCK) IS BEGIN IF (ACLR=0) THEN FF=0; ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (WE=1AND RE=0) THEN IF (WADD=RADD-1) OR (WADD=DEPTH-1)AND(RADD=0) THE
45、N FF=1; END IF; ELSE FF=0; END IF; END IF; END PROCESS;,PROCESS(ACLR,CLOCK) IS BEGIN IF (ACLR=0) THEN EF=0; ELSIF (CLOCKEVENT AND CLOCK=1) THEN IF (RE=1AND WE=0) THEN IF (WADD=RADD+1) OR (RADD=DEPTH-1)AND(WADD=0) THEN EF=0; END IF; ELSE EF=1; END IF; END IF; END PROCESS; END ART;,状态机的VHDL设计,1、 状态机的基
46、本结构和功能 状态机是一类很重要的时序电路,是许多数字电路的核心部件。状态机的一般形式如图所示。,状态机的基本操作有两种: (1) 状态机内部状态转换。状态机的下一状态由状态译码器根据当前状态和输入条件决定。 (2) 产生输出信号序列。输出信号由输出译码器根据当前状态和输入条件决定。 在产生输出的过程中,由是否使用输入信号可以确定状态机的类型。两种典型的状态机是摩尔(MOORE)状态机和米立(MEALY)状态机。,使用枚举类数据类型来定义状态机的状态,并使用多进程方式来描述状态机的内部逻辑。,多进程中,一个用来描述时序逻辑,包括状态寄存器的工作和状态的输出;一个描述组合逻辑,包括进程间状态值的
47、传递逻辑以及状态转换值的输出。 进程间一般是并行运行的,但由于敏感信号的设置不同以及电路的延迟,在时序上,进程间的动作是有先后的。 用于进程间信息传递的信号,在状态机设计中称为反馈信号。,2、 一般状态机的VHDL设计,图:一般状态机结构框图,LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY s_machine IS PORT (clk,reset: IN STD_LOGIC; state_inputs: IN STD_LOGIC_VECTOR (0 TO 1); comb_outputs: OUT INTEGER RANGE 0 TO 15
48、); END s_machine; ARCHITECTURE behv OF s_machine IS TYPE FSM_ST IS (s0, s1, s2, s3); SIGNAL current_state, next_state: FSM_ST; BEGIN REG: PROCESS (reset,clk) -主控时序进程 BEGIN IF reset = 1 THEN current_state = s0; ELSIF clk=1 AND clkEVENT THEN current_state = next_state; END IF; END PROCESS REG;,WHEN s3
49、 = comb_outputs = 14; IF state_inputs=11 THEN next_state= s3; ELSE next_state= s0; END IF; END CASE; END PROCESS COM; END BEHV;,3、 Mealy状态机和Moore状态机的VHDL设计,图:Mealy类型的状态机的逻辑电路框图,图:Moore类型的状态机的逻辑电路框图,有限状态机FSM由以下三部分组成: 当前状态寄存器电路:为时序电路,由时钟信号和次态逻辑电路控制状态的变化。 次态逻辑电路:为组合电路,次态由输入信号和当前状态决定。 输出逻辑电路:对于Mealy类型的状态机,输出由当前状态和输入信号决定;对于Moore类型的状态机,输出仅由当前状态决定。,1、用VHDL描述一个状态转换图如图所示的Mealy类型的状态机。输入信号为data_in,时钟输入信号为clock,复位控制信号为reset(低电平 有效),输出信号为data_out。状态机有 5个状态,复位控制信号reset有效时,状态机的状态为st0状态。,LIB
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026宁夏教育厅招聘教研员8人笔试模拟试题及答案解析
- 2026福建医科大学附属医院招聘41人笔试参考题库及答案解析
- 2026年3月江苏扬州市教育系统事业单位招聘教师5人笔试备考试题及答案解析
- 2026年南充科技职业学院单招综合素质考试题库有答案详细解析
- 2026上海复旦大学彭慧胜院士团队招聘物理相关背景博士后笔试模拟试题及答案解析
- 中建安装南京公司2026届春季校园招聘笔试模拟试题及答案解析
- 2026四川广安市中医医院招聘12人笔试备考试题及答案解析
- 2026内蒙古包头市昆都仑区青年志愿者协会招聘见习岗位人员20人笔试参考题库及答案解析
- 2026年郑州市郑盐盐业集团有限公司招聘一批工作人员笔试备考试题及答案解析
- 2026届江苏省无锡市南长实验中学初三下学期期末考试(英语试题理)试题含解析
- 2025年安徽审计职业学院单招职业适应性测试试题及答案解析
- 2026年春节后复工复产“开工第一课”安全生产培训课件
- 达芬奇油画解读
- 环境微生物学课件 02第二章原核生物
- 中日粗糙度对照表
- SMT炉后检查作业指导书V1.0
- 胸膜疾病讲解
- 高二物理竞赛弗兰克-赫兹实验课件
- 发电企业安全生产标准化规范及达标评级标准解读下课件
- 中国个省级行政区轮廓图
- 人格与健康的关系
评论
0/150
提交评论