版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、3.1 三态门及双向电路设计三态门及双向电路设计3.2 分频器电路设计分频器电路设计3.3 存储器电路设计存储器电路设计3.4 状态机设计状态机设计3.5 序列信号产生与检测电路设计序列信号产生与检测电路设计3.6 运算电路设计运算电路设计第第3章章 数字电路数字电路VHDL设计进级设计进级 3.1 3.1 三态及双向电路设计三态及双向电路设计u 三态门描述三态门描述u 双向电路描述双向电路描述Company Logo 一、三态门描述一、三态门描述u三态电路的描述非常广泛,在常见的数据总线、地址总线,乃三态电路的描述非常广泛,在常见的数据总线、地址总线,乃至控制总线有时都需引入三态设计。至控制
2、总线有时都需引入三态设计。 u三态门的描述,首先需将某信号定义为三态门的描述,首先需将某信号定义为STD_LOGIC型,利型,利用用STD_LOGIC数据类型中的取值数据类型中的取值Z(高阻)对信号赋值;(高阻)对信号赋值;u通常采用条件信号赋值(通常采用条件信号赋值(WHENELSE)语句描述,当使)语句描述,当使能有效时端口响应输入或输出数据,使能无效时端口输出为高阻。能有效时端口响应输入或输出数据,使能无效时端口输出为高阻。 【例例3-1】 1位三态门的位三态门的VHDL描述描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;ENTITY tri_gat
3、e ISPORT (datain: IN STD_LOGIC; en: IN STD_LOGIC; dataout : OUT STD_LOGI);END tri_gate;ARCHITECTURE one OF tri_gate ISBEGIN dataout = datain WHEN en =1 ELSE Z;END one; 一、三态门描述一、三态门描述【例例3-2】 8位三态门电路设计位三态门电路设计(8位单向总线驱动器位单向总线驱动器)DOUT7.0ENDIN7.0ENTRI_BUF8DOUT7.0DIN7.0 一、三态门描述一、三态门描述LIBRARY IEEE;USE IEEE
4、.STD_LOGIC_1164.ALL;ENTITY Tri_buf8 IS PORT (din:IN STD_LOGIC_VECTOR(7 DOWNTO 0); en:IN STD_LOGIC; dout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END Tri_buf8ARCHITECTURE one OF tri_buf8 ISBEGIN dout=din WHEN en=1 ELSE ZZZZZZZZ;END one;8位三态门电路位三态门电路 (8位单向总线驱动器位单向总线驱动器)VHDL描述描述 一、三态门描述一、三态门描述Company Logou数据总线
5、往往是双向的,在进行双向电路设计时,端数据总线往往是双向的,在进行双向电路设计时,端口方向应为口方向应为 INOUT类型,结构体部分对输出信号必须类型,结构体部分对输出信号必须进行有条件的三态控制。进行有条件的三态控制。 二、双向电路描述二、双向电路描述【例例3-3】双向端口信号作一个信号的输入,作另一信号的输双向端口信号作一个信号的输入,作另一信号的输出的电路描述出的电路描述Bidir_busfrom_coreto_coreq_inenclk 二、双向电路描述二、双向电路描述q_outq_inoutLIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;ENTITY
6、 dir_data ISPORT ( from_core: IN STD_LOGIC_VECTOR(7 DOWNTO 0); to_core: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); en, clk:IN STD_LOGIC; q_inout: INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);END dir_data;ARCHITECTURE two OF dir_data ISSIGNAL a,b: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN 二、双向电路描述二、双向电路描述PROCESS(en,a,q_inout)
7、 BEGINIF en=1 THEN b= q_inout; q_inout=ZZZZZZZZ; ELSE q_inout=a; b= q_inout; END IF;END PROCESS; 二、双向电路描述二、双向电路描述PROCESS(clk) BEGINIF clkEVENT AND clk=1 THEN a= from_core; to_core = b; END IF;END PROCESS;END two; 二、双向电路描述二、双向电路描述例例3-3的的RTL电路电路【例例3-4】双向端口信号既作信号输入,又作信号输出的电路。双向端口信号既作信号输入,又作信号输出的电路。 二、双
8、向电路描述二、双向电路描述LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;ENTITY dir_bus ISPORT (clk ,rst : IN STD_LOGIC; rw: IN STD_LOGIC; address: IN STD_LOGIC_VECTOR(1 DOWNTO 0); data:INOUT STD_LOGIC_VECTOR(7 DOWNTO 0);END dir_bus;ARCHITECTURE two OF dir_bus ISSIGNAL data_in: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data
9、_out: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data_a: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL data_b: STD_LOGIC_VECTOR(7 DOWNTO 0);BEGIN data_in= data; 二、双向电路描述二、双向电路描述PROCESS(clk,rst) BEGIN IF rst=1 THEN data_a0 ); data_b0); ELSIF clkEVENT AND clk=1 THEN IF rw=1 THEN IF address=00 THEN data_a=data_in; ELSI
10、F address=01THEN data_b=data_in; ELSE NULL; END IF; ELSE NULL; END IF; END IF;END PROCESS;PROCESS(clk) BEGIN IF clkEVENT AND clk=1 THEN IF rw=0 THEN IF address=00 THEN data_out=data_a; ELSIF address=01THEN data_out=data_b; ELSE NULL; END IF; ELSE NULL; END IF; END IF;END PROCESS;DataZ); END two; 二、双
11、向电路描述二、双向电路描述u 偶数分频偶数分频u 奇数分频奇数分频u 2 2N N分频分频u 半整数分频半整数分频u 数控分频数控分频3.2 3.2 分频器电路设计分频器电路设计Company Logo一、偶数分频一、偶数分频对时钟进行偶数分频,使占空比为对时钟进行偶数分频,使占空比为50%,可使用一个计,可使用一个计数器,对输入时钟进行模数器,对输入时钟进行模n(n为偶数)计数,在前为偶数)计数,在前n/2个时钟内,使输出为高(或低)电平,在后个时钟内,使输出为高(或低)电平,在后n/2个时钟个时钟内使输出为低(或高)电平,即可实现对输入时钟的内使输出为低(或高)电平,即可实现对输入时钟的n
12、分分频。频。设计思路设计思路【例例3-5】设计一个设计一个8分频电路分频电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fdiv8 IS GENERIC (n:INTEGER:=8);PORT(clr,clkin: IN STD_LOGIC; clkout: OUT STD_LOGIC);END fdiv8;ARCHITECTURE one OF fdiv8 ISSIGNAL cnt: INTEGER RANGE 0 TO
13、 n-1;BEGIN一、偶数分频一、偶数分频PROCESS(clkin,clr)BEGIN IF clr=1 THEN cnt=0; ELSIF RISING_EDGE(clkin) THEN IF cnt=n-1 THEN cnt=0; ELSE cnt=cnt +1; END IF; END IF;END PROCESS;clkout=1 WHEN cnt INTEGER(n/2) ELSE 0;END one;一、偶数分频一、偶数分频一、偶数分频一、偶数分频8分频电路的仿真波形分频电路的仿真波形T_out=8T_inF_in=8F_outCompany Logo二、奇数分频二、奇数分频设
14、计思路设计思路u对时钟进行奇数分频,如果对占空比不作要求的话,其设对时钟进行奇数分频,如果对占空比不作要求的话,其设计方法与偶数分频是相同的。计方法与偶数分频是相同的。u如果要使占空比为如果要使占空比为50%,其方法是分别对输入时钟的上,其方法是分别对输入时钟的上升沿和下降沿进行模升沿和下降沿进行模n(n为奇数)计数,在计数值为小于为奇数)计数,在计数值为小于(n-1)/2时,使信号输出为高(或低)电平,在计数值为时,使信号输出为高(或低)电平,在计数值为大于等于大于等于(n-1)/2时使信号输出为低(或高)电平,从而时使信号输出为低(或高)电平,从而得到两个占空比为得到两个占空比为(n-1)
15、/2 :n的分频信号的分频信号,然后将这两个信然后将这两个信号相或即可实现对输入时钟的号相或即可实现对输入时钟的n(n为奇数为奇数)分频。分频。【例例3-6】设计一个设计一个5分频电路分频电路(占空比占空比2:5)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fdiv5a IS GENERIC (n:INTEGER:=5);PORT(clr,clkin: IN STD_LOGIC; Clkout: OUT STD_LOGIC
16、);END fdiv5a;ARCHITECTURE one OF fdiv5a ISSIGNAL cnt: INTEGER RANGE 0 TO n-1;BEGIN二、奇数分频二、奇数分频PROCESS(clkin,clr)BEGIN IF clr=1 THEN cnt=0; ELSIF RISING_EDGE(clkin) THEN IF cnt=n-1 THEN cnt=0; ELSE cnt=cnt +1; END IF; END IF;END PROCESS;clkout=1 WHEN cnt INTEGER(n/2) ELSE 0;END one;二、奇数分频二、奇数分频5分频电路的
17、仿真波形(占空比分频电路的仿真波形(占空比2:5)二、奇数分频二、奇数分频T_out=5T_inF_in=5F_out【例例3-7】设计一个设计一个5分频电路分频电路(占空比占空比1:2)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY fdiv5a IS GENERIC (n:INTEGER:=5);PORT(clr,clkin: IN STD_LOGIC; Clkout: OUT STD_LOGIC);END fdiv5a;
18、ARCHITECTURE two OF fdiv5b ISSIGNAL clka,clkb:STD_LOGIC;SIGNAL cnt1,cnt2: INTEGER RANGE 0 TO n-1;BEGIN二、奇数分频二、奇数分频PROCESS(clkin,clr)BEGIN IF clr=1 THEN cnt1=0; ELSIF RISING_EDGE(clkin) THEN IF cnt1=n-1 THEN cnt1=0; ELSE cnt1=cnt1 +1; END IF; END IF;END PROCESS;clka=1 WHEN cnt INTEGER(n/2) ELSE 0;二、奇
19、数分频二、奇数分频PROCESS(clkin,clr)BEGIN IF clr=1 THEN cnt2=0; ELSIF FALLING_EDGE(clkin) THEN IF cnt2=n-1 THEN cnt2=0; ELSE cnt2=cnt2+1; END IF; END IF;END PROCESS;clkb=1 WHEN cnt2 INTEGER(n/2) ELSE 0;Clkout=clka OR clkb;END one;二、奇数分频二、奇数分频5分频电路的仿真波形(占空比分频电路的仿真波形(占空比1:2)二、奇数分频二、奇数分频T_out=5T_inF_in=5F_out占空
20、比占空比1:2三、三、2 2N N分频器分频器u如一个电路中需要用到多个时钟,若输入系统时钟频率恰为如一个电路中需要用到多个时钟,若输入系统时钟频率恰为2的的n次幂,则可用一个次幂,则可用一个M位的二进制计数器对输入系统时钟位的二进制计数器对输入系统时钟进行计数,该计数器第进行计数,该计数器第0位为输入时钟的二分频,第位为输入时钟的二分频,第1位为输位为输入时钟的四分频,第入时钟的四分频,第2位为输入时钟的位为输入时钟的8分频,依此类推,第分频,依此类推,第n-1位为输入时钟的位为输入时钟的2n分频。分频。 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;US
21、E IEEE.STD_LOGIC_UNSIGNED.ALLENTITY fdiv IS PORT(clk_1024,clr:IN STD_LOGIC; clk_512,clk_64,clk_4,clk_1:OUT STD_LOGIC);END fdiv;ARCHITECTURE one OF fdiv ISSIGNAL cnt:STD_LOGIC_VECTOR(9 DOWNTO 0);BEGIN三、三、2 2N N分频器分频器【例例3-8】设计一分频器设计一分频器,输入频率为输入频率为1024HZ,输出频率为输出频率为512HZ,64HZ,4HZ,1HZ.PROCESS(clk_1024,cl
22、r) BEGIN IF(clr=1)THEN cnt0); ELSIF RISING_EDGE(clk_1024)THEN cnt=cnt +1; END IF;END PROCESS;Clk_512=cnt(0); Clk_64 = cnt(3); Clk_4 =cnt(7); Clk_1 =cnt(9);END one;N位二进制计数器,位二进制计数器,第第n-1位为输入时钟位为输入时钟的的2n分频分频三、三、2 2N N分频器分频器异或门异或门模模N计数器计数器2分频器分频器 clkclk /(N-0.5)clk /(2N-1)半整数分频设计原理框图半整数分频设计原理框图四、半整数分频器
23、四、半整数分频器u在某些场合下,用户所需要的频率与频率时钟源可能不是整数倍关系,如在某些场合下,用户所需要的频率与频率时钟源可能不是整数倍关系,如有一个有一个5 MHz的时钟源,但电路中需要产生一个的时钟源,但电路中需要产生一个2 MHz的时钟信号,由于的时钟信号,由于分频比为分频比为2.5,因此整数分频器将不能胜任。,因此整数分频器将不能胜任。u对于分频系数为对于分频系数为N-0.5的分频器,称为半整数分频。下图是一种通用的半的分频器,称为半整数分频。下图是一种通用的半整数分频电路的设计框图,由一个异或门、一个模整数分频电路的设计框图,由一个异或门、一个模N的计数器和一个的计数器和一个2分频
24、分频电路构成。电路构成。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fdiv25a ISGENERIC (n:INTEGER:=3); PORT (clkin: IN STD_LOGIC; clkout: OUT STD_LOGIC );END fdiv25a; ARCHITECTURE one OF fdiv25a ISSIGNAL clk, div2: STD_LOGIC;SIGNAL c_out: STD_LOGIC;SIGNAL count: INTEGER RANGE
25、 0 TO n-1;BEGINclk=clkin XOR div2;四、半整数分频器四、半整数分频器【例例3-9】设计一个设计一个2.5分频电路分频电路PROCESS(clk)BEGIN IF(clkevent AND clk=1) THEN IF(count=n-1) THEN count=0; c_out=1; ELSE count=count+1; c_out=0; END IF; END IF;END PROCESS; 四、半整数分频器四、半整数分频器PROCESS(c_out)BEGIN IF RISING_EDGE(c_out) THEN div2=NOT div2; END IF
26、;END PROCESS;Clkout=c_out;END one;2.5分频电路仿真波形图分频电路仿真波形图四、半整数分频器四、半整数分频器T_out=2.5T_inF_in=2.5F_out2.5分频内部电路分频内部电路Company Logou数控分频器的功能就是在输入端给定不同的输入数据数控分频器的功能就是在输入端给定不同的输入数据时,将对输入的时钟信号有不同的分频比。时,将对输入的时钟信号有不同的分频比。u数控分频器一般是用计数值可并行预置的加法计数器数控分频器一般是用计数值可并行预置的加法计数器完成的,即计数器不是从完成的,即计数器不是从0开始计数,而是从某个初值开始计数,而是从某
27、个初值开始计数。初值不同,则分频系数不同,计数器计满开始计数。初值不同,则分频系数不同,计数器计满后重新加载初值,根据计算器的溢出标志控制产生分后重新加载初值,根据计算器的溢出标志控制产生分频输出信号频输出信号。五、数控分频器五、数控分频器【例例3.2-5】设计一个数控分频器设计一个数控分频器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY dvf IS PORT ( clkin : IN STD_LOGIC; data : IN STD_LOGIC_VECTOR(7 DOWNTO 0
28、); clkout : OUT STD_LOGIC );END dvf;ARCHITECTURE one OF dvf ISSIGNAL full : STD_LOGIC;SIGNAL Cnt1: STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL Cnt2: STD_LOGIC; BEGIN五、数控分频器五、数控分频器PROCESS(clkin)BEGIN IF clkinEVENT AND clkin = 1 THEN IF cnt1 = 11111111 THEN cnt1 = data; full = 1; ELSE cnt1= cnt1 + 1; full = 0
29、; END IF; END IF;END PROCESS ;PROCESS(full)BEGIN IF fullEVENT AND fullL = 1 THEN cnt2= NOT cnt2; END IF;END PROCESS ; clkout=cnt2;END one; 五、数控分频器五、数控分频器五、数控分频器五、数控分频器数控分频电路的仿真波形图数控分频电路的仿真波形图u RAM的设计的设计u FIFO的设计的设计u LIFO的设计的设计3.3 3.3 存储器电路设计存储器电路设计Company LogouRAM是并行寄存器的集合,主要用于数据存储。是并行寄存器的集合,主要用于数据存
30、储。u数据可被写入任意内部寄存器单元,也可从任意内部寄存器数据可被写入任意内部寄存器单元,也可从任意内部寄存器单元读出;单元读出;u每个寄存器单元对应有一个地址,由地址线确定对某个寄存每个寄存器单元对应有一个地址,由地址线确定对某个寄存器单元进行数据读写;器单元进行数据读写;uRAM在时钟和写使能有效时,将外部数据写入某地址对应的在时钟和写使能有效时,将外部数据写入某地址对应的单元;在时钟和读使能有效时,将某地址对应单元的数据读出;单元;在时钟和读使能有效时,将某地址对应单元的数据读出;uRAM有单口有单口RAM(读写地址线合用)和双口(读写地址线合用)和双口RAM(读写地(读写地址线分开)之
31、分。址线分开)之分。 一、一、RAM设计设计一、一、RAM设计设计【例例3-11】168的单口的单口RAM设计设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;USE IEEE.STD_LOGIC_UNSIGNED.All;ENTITY s_ram ISPORT (addr: IN STD_LOGIC_VECTOR(3 DOWNTO 0); clk: IN STD_LOGIC; wr: IN STD_LOGIC; data_in: IN STD_LOGIC_VECTOR(7 DOWNTO 0); data_out:OUT STD_LOGIC_VECTOR(7
32、 DOWNTO 0);END s_ram ;ARCHITECTURE one OF s_ram ISTYPE mem IS ARRY(15 DOWNTO 0) OF STD_LOGIC_VECTOR(7 DOWNTO 0);自定义一维数组类型,自定义一维数组类型, 1616个元个元素,每个元素的位宽为素,每个元素的位宽为8 8位。位。一、一、RAM设计设计SIGNAL ram_mem:mem;BEGIN PROCESS(clk) BEGIN IF clkEVENT AND clk=1 THEN IF wr=1 THEN ram_mem(CONV_INTEGER(addr)= data_in;
33、END IF; END IF;END PROCESS;data_out =ram_mem(CONV_INTEGER(addr);END one;二进制数转换二进制数转换为整数函数为整数函数写入数据写入数据输出数据输出数据【例例3.3-2】 64*8的双口的双口RAM设计设计一、一、RAM设计设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;USE IEEE.STD_LOGIC_UNSIGNED.All;ENTITY d_ram ISPORT (w_addr: IN STD_LOGIC_VECTOR(5 DOWNTO 0); r_addr: IN STD_LO
34、GIC_VECTOR(3 DOWNTO 0); clk:IN STD_LOGIC; wr:IN STD_LOGIC; data_in: IN STD_LOGIC_VECTOR(7 DOWNTO 0); data_out:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END d_ram ;ARCHITECTURE two OF d_ram ISTYPE dmem IS ARRY(63 DOWNTO 0) OF STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL dram_mem: dmem;SIGNAL read_adder: STD_LOGIC_VECT
35、OR(3 DOWNTO 0); BEGIN PROCESS(clk) BEGIN IF clkEVENT AND clk=1 THEN IF wr=1 THEN dram_mem(CONV_INTEGER(w_addr)= data_in; END IF; read_addr= r_addr END IF;END PROCESS;data_out =dram_mem(CONV_INTEGER(read_addr); END two;一、一、RAM设计设计Company Logo二、二、FIFO设计设计uFIFO(first in,first out)是队列数据存储的寄存器;)是队列数据存储的寄
36、存器;uFIFO对数据的存储与读取是先进先出,即数据在时钟和一定的使能控制对数据的存储与读取是先进先出,即数据在时钟和一定的使能控制下,逐个写入队列,然后按照写入的顺序逐个读出。下,逐个写入队列,然后按照写入的顺序逐个读出。uFIFO不但可用来存贮数据,有时也可用于时钟不同的模块之间进行数据不但可用来存贮数据,有时也可用于时钟不同的模块之间进行数据通信。通信。如:如:有甲、乙两模块,甲在时钟有甲、乙两模块,甲在时钟A的控制下进行数据收发,乙在时钟的控制下进行数据收发,乙在时钟B的控制下的控制下进行数据收发,这两个模块间是不能直接连接进行数据通信的。此时可用进行数据收发,这两个模块间是不能直接连
37、接进行数据通信的。此时可用FIFO连接这两个模块,进行异步时钟的同步,即甲模块按时钟连接这两个模块,进行异步时钟的同步,即甲模块按时钟A的时序对的时序对FIFO写数据,数据存到一定状态后,发出标志信号,乙模块接到标志信号写数据,数据存到一定状态后,发出标志信号,乙模块接到标志信号后再按时钟后再按时钟B从从FIFO读数据,这样就可完成这两个模块间的数据通信。读数据,这样就可完成这两个模块间的数据通信。二、二、FIFO设计设计【例例3-13】字宽为字宽为8,深度为,深度为16的的FIFO设计设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.All;USE IEEE.ST
38、D_LOGIC_UNSIGNED.All;ENTITY fifo ISPORT (clk:IN STD_LOGIC; rst: IN STD_LOGIC; wr: IN STD_LOGIC; rd: IN STD_LOGIC; data_in: IN STD_LOGIC_VECTOR(7 DOWNTO 0); empt: OUT STD_LOGIC; -存储状态空标志存储状态空标志 full: OUT STD_LOGIC; -存储状态满标志存储状态满标志 data_out: OUT STD_LOGIC_VECTOR(7 DOWNTO 0);END fifo ;ARCHITECTURE thre
39、e OF fifo ISTYPE fifo_type IS ARRY(15 DOWNTO 0) OF STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL fifo_mem:fifoy_type; -定义存贮单元定义存贮单元SIGNAL rd_ptr:INTEGER RANGE 0 TO 15; -定义读指针定义读指针SIGNAL wr_ptr:INTEGER RANGE 0 TO 15; -定义写指针定义写指针BEGIN PROCESS(clk) VARIABLE cnt: INTEGER RANGE 0 TO 16; -存存贮单贮单元使用元使用统计统计 BEGIN IF
40、clkEVENT AND clk=1 THEN二、二、FIFO设计设计IF rst=1 THEN -复复位位 FOR i IN 15 DOWNTO 0 LOOP -对对所有存所有存贮单贮单元元清清零零 fifo_mem(i)0); END LOOP; rd_ptr=0; -读指针复位读指针复位 wr_ptr=0; -写指针复位写指针复位 cnt:=0; -统计计数器复位统计计数器复位 empt=1; -空标志位置空标志位置1 1 full=0; -满标志位置满标志位置0 0 ELSIF wr=1THEN -写使能有效写使能有效 fifo_mem(wr_ptr)= data_in; -写入数据写
41、入数据 IF cnt16 THEN -统计计数器未满(有空存贮单元)统计计数器未满(有空存贮单元) cnt:=cnt+1; -统计计数器加统计计数器加1 1 IF wr_ptr15 THEN wr_ptr= wr_ptr+1; ELSE wr_ptr0 THEN -有单元数据可读有单元数据可读 cnt:=cnt-1; -统计计数器减统计计数器减1 1 IF rd_ptr15 THEN rd_ptr= rd_ptr+1; -读指针小于读指针小于1515,则加,则加1 1 ELSE rd_ptr=0; -读指针清零读指针清零 END IF; END IF;END IF;IF cnt=0 THEN
42、empt=1;-;-统计计数器为统计计数器为0 0,发出存储状态为空标志,发出存储状态为空标志ELSE empt=0;END IF;二、二、FIFO设计设计 IF cnt=16 THEN full=1; -统计计数器为统计计数器为1616,发出存储状态为满标志,发出存储状态为满标志 ELSE full=0; END IF;END IF;END PROCESS;data_out Z); -读使能有效,将数据送到数据输出端,否则为高阻读使能有效,将数据送到数据输出端,否则为高阻END three;二、二、FIFO设计设计Company LogouLIFO(last in,first out)为后进
43、先出存贮器,是一种为后进先出存贮器,是一种堆栈形式的数据存储的寄存器,即数据在时钟和一定的使堆栈形式的数据存储的寄存器,即数据在时钟和一定的使能控制下,逐个写入存储器,而读数据时则是逆向读出。能控制下,逐个写入存储器,而读数据时则是逆向读出。读写用同一个指针。其程序编写思路与读写用同一个指针。其程序编写思路与FIFO设计方法相似。设计方法相似。三、三、LIFO设计设计三、三、LIFO设计设计【例例3-14】字宽为字宽为8,深度为,深度为16的的LIFO设计设计LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.All;USE IEEE.STD_LOGIC_UNSIGNE
44、D.All;ENTITY lifo ISPORT (clk: IN STD_LOGIC; rst: IN STD_LOGIC; wr: IN STD_LOGIC;- rd: IN STD_LOGIC; data_in: IN STD_LOGIC_VECTOR(7 DOWNTO 0); empt: OUT STD_LOGIC; full: OUT STD_LOGIC; data_out:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END lifo ;ARCHITECTURE one OF lifo ISTYPE lifo_type IS ARRY(15 DOWNTO 0)
45、 OF STD_LOGIC_VECTOR(7 DOWNTO 0);SIGNAL lifo_mem:lifo_type; -定义存贮单元定义存贮单元SIGNAL rw_ptr:INTEGER RANGE 0 TO 15; -定义读写指针定义读写指针BEGIN PROCESS(clk) VARIABLE cnt: INTEGER RANGE 0 TO 16; -记录存贮单元使用记录存贮单元使用BEGIN IF clkEVENT AND clk=1 THEN三、三、LIFO设计设计 IF rst=1 THEN -复位复位 FOR i IN 15 DOWNTO 0 LOOP -对所有存贮单元清零对所有
46、存贮单元清零 lifo_mem(i)0); END LOOP; rw_ptr=0; -读写指针复位读写指针复位 cnt:=0; -记录复位记录复位 empt=1; -空标志位置空标志位置1 1 full=0; -满标志位置满标志位置0 0 ELSIF wr=1THEN -写使能有效写使能有效 fifo_mem(rw_ptr)= data_in; -写入数据写入数据 IF cnt16 THEN -有空存贮单元有空存贮单元 cnt:=cnt+1; -记录指针加记录指针加1 1 IF rw_ptr15 THEN rw_ptr0 THEN -有单元数据可读有单元数据可读 cnt:=cnt-1; -记录
47、指针减记录指针减1 1 IF rw_ptr0 THEN rw_ptr= rw_ptr-1; -读写指针大于读写指针大于0 0,则减,则减1 1 END IF; END IF;END IF;IF cnt=0 THEN empt=1; -记录指针为记录指针为0 0,发出存储状态为空标志,发出存储状态为空标志ELSE empt=0;END IF;三、三、LIFO设计设计 IF cnt=16 THEN full=1; -记录指针为记录指针为1616,发出存储状态为满标志,发出存储状态为满标志 ELSE full=0; END IF;END IF;END PROCESS;data_out Z);-读使能
48、有效,将数据送到数据输出端,否则为高阻(不占用数据线)。读使能有效,将数据送到数据输出端,否则为高阻(不占用数据线)。END one;三、三、LIFO设计设计u 数字类型定义语句数字类型定义语句u 状态机的结构状态机的结构u Moore状态机描述状态机描述u Mealy状态机描述状态机描述3.4 3.4 状态机设计状态机设计一、数据类型定义语句一、数据类型定义语句 TYPE 数据类型名数据类型名 IS 数据类型定义数据类型定义 OF 基本数据类型基本数据类型;1 1、表达格式、表达格式2 2、格式说明、格式说明(1)数据类型名数据类型名:由设计者自定,要符合标识符的规定;由设计者自定,要符合标
49、识符的规定;(2)数据类型定义数据类型定义:用来描述所定义的数据类型的表达方式和表达内容;用来描述所定义的数据类型的表达方式和表达内容;(3)OF 基本数据类型基本数据类型:一般为已有的标准预定义数据类型,该部分不是一般为已有的标准预定义数据类型,该部分不是必须的;必须的;(4) 数据类型定义语句一般放在结构体中的说明部分。数据类型定义语句一般放在结构体中的说明部分。例例: :TYPE st IS ARRAY(0 TO 15) OF STD_LOGIC; TYPE week IS (sun,mon,tue,wed,thu,fri,sat); TYPE m_st IS ( st0,st1,st2
50、,st3,st4,st5 ) ; SIGNAL present_st,next_st: m_st ; 枚举数据类型是一种特殊的数据类型,一般用文字符号表枚举数据类型是一种特殊的数据类型,一般用文字符号表示,主要是为了便于设计、阅读、编译与优化。在进行电示,主要是为了便于设计、阅读、编译与优化。在进行电路综合时,是用一组二进制数来编码的,其实际电路是由路综合时,是用一组二进制数来编码的,其实际电路是由一组触发器实现的。一组触发器实现的。一、数据类型定义语句一、数据类型定义语句 1 1、状态机的说明部分、状态机的说明部分 状态机的说明部分一般放在结构体状态机的说明部分一般放在结构体ARCHITEC
51、TURE和和BEGIN之间;之间;首先使用首先使用TYPE语句定义新的数据类型,一般将该数据类型定义为枚举型,语句定义新的数据类型,一般将该数据类型定义为枚举型,其元素采用文字符号表示,作为状态机的状态名。其元素采用文字符号表示,作为状态机的状态名。然后用然后用SIGNAL语句定义状态变量(如现态和次态),将其数据类型定义语句定义状态变量(如现态和次态),将其数据类型定义为由为由TYPE语句定义的新数据类型。语句定义的新数据类型。二、状态机的结构二、状态机的结构 例:例:ARCHITECTURE OF IS TYPE new_state IS(s0,s1,s2,s3,s4); SIGNAL p
52、resent_state,next_state : new_state; BEGIN 二、状态机的结构二、状态机的结构 2 2、状态机的进程部分、状态机的进程部分 P1:PROCESS (clk, rst)BEGIN IF (rst=1) THEN -复位,由现态(复位,由现态(present_state)转入初始状态)转入初始状态 present_state=初始状态初始状态; ELSIF (clkEVENT AND clk = 1) THEN present_state IF (转换条件转换条件) THEN (给次态赋值给次态赋值); END IF; WHEN -其他所有状态转换的描述其他
53、所有状态转换的描述 END CASE; END PROCESS P2;二、状态机的结构二、状态机的结构 进程进程2 2:状态转移进程,根据现态和输入条件,给次态赋值:状态转移进程,根据现态和输入条件,给次态赋值P3: PROCESS (present_state, 输入信号输入信号) -(Mealy型型) BEGIN CASE present_state IS WHEN 初始状态初始状态= IF (输入信号的变化输入信号的变化) THEN (输出赋值输出赋值); -输出值由当前状态值与输入信号共同决定输出值由当前状态值与输入信号共同决定 END IF; WHEN -其他所有状态下输出的描述其他
54、所有状态下输出的描述 END CASE; END PROCESS P3 ; 二、状态机的结构二、状态机的结构 进程进程3 3:输出描述进程,给输出赋值:输出描述进程,给输出赋值根据根据现态现态给输出赋值为给输出赋值为Moore型状态机;型状态机;根据根据现态现态和和输入条件输入条件给输出赋值为给输出赋值为Mealy型状态机型状态机或者:或者:P3: PROCESS (present_state, 输入信号输入信号) -(Moore型型) BEGIN CASE present_state IS WHEN 初始状态初始状态= (输出赋值输出赋值); -输出值仅由当前状态值决定输出值仅由当前状态值决
55、定 WHEN -其他所有状态下输出的描述其他所有状态下输出的描述 END CASE; END PROCESS P3 ;二、状态机的结构二、状态机的结构 P1: PROCESS (clk, rst) BEGIN IF (rst=1) THEN present_state=初始状态初始状态; -复位,由现态(复位,由现态(present_state)转入初始状态)转入初始状态 ELSIF (clkEVENT AND clk = 1) THEN present_state IF(转换条件转换条件) THEN (次态赋值次态赋值); END IF; IF (转换条件转换条件) THEN (输出赋值输出
56、赋值); END IF; - 其他所有状态转换的描述,其他所有状态下输出的描述其他所有状态转换的描述,其他所有状态下输出的描述 END CASE; END PROCESS P2;二、状态机的结构二、状态机的结构 进程进程2 2:状态转移与输出描述进程,给次态和输出赋值:状态转移与输出描述进程,给次态和输出赋值PROCESS (clk, rst)BEGIN IF (rst=1) THEN current_state IF(转换条件转换条件) THEN (当前状态赋值当前状态赋值) ; END IF; IF (转换条件转换条件) THEN (输出赋值输出赋值); END IF; -其他所有状态转换
57、的描述,其他所有状态下输出的描述其他所有状态转换的描述,其他所有状态下输出的描述 END CASE; END IF; END PROCESS;(3)单进程状态机基本结构)单进程状态机基本结构二、状态机的结构二、状态机的结构 Company Logou状态机是一种描述数字控制系统的方法,主要用来构成顺序状态机是一种描述数字控制系统的方法,主要用来构成顺序控制模型。控制模型。u状态机克服了纯硬件数字系统顺序控制方式不灵活的缺点;状态机克服了纯硬件数字系统顺序控制方式不灵活的缺点;u状态机易构成性能良好的同步时序逻辑模块。状态机易构成性能良好的同步时序逻辑模块。u状态机设计方案相对固定,结构清晰,易
58、于理解,易于修改,状态机设计方案相对固定,结构清晰,易于理解,易于修改,是数字系统中一种最常用的设计方法。是数字系统中一种最常用的设计方法。二、状态机的结构二、状态机的结构 状态机特点状态机特点Company Logou对一个实际工程,若要用状态机实现控制,首先要对实现工程的控制器对一个实际工程,若要用状态机实现控制,首先要对实现工程的控制器功能进行分析,将控制功能分解为若干步,每一步对应一个状态,确定各功能进行分析,将控制功能分解为若干步,每一步对应一个状态,确定各状态间转换的输入条件是什么,输出是如何变化的,并将这种控制关系用状态间转换的输入条件是什么,输出是如何变化的,并将这种控制关系用
59、状态转换图来表示。然后根据状态转换图来描述其状态机控制程序代码。状态转换图来表示。然后根据状态转换图来描述其状态机控制程序代码。uMoore型状态机:型状态机:输出仅由其所处状态决定,与当前输入无关。从输出输出仅由其所处状态决定,与当前输入无关。从输出时序上看,只有当时钟信号变化使状态发生变化时才导致输出的变化,因时序上看,只有当时钟信号变化使状态发生变化时才导致输出的变化,因此此Moore型属于同步输出状态机。型属于同步输出状态机。 u mealy型状态机:型状态机:输出信号值根据当前状态值和外部输入信号确定;输出信号值根据当前状态值和外部输入信号确定;一旦输入信号或状态发生变化时,输出信号
60、立即发生变化。一旦输入信号或状态发生变化时,输出信号立即发生变化。状态机设计方法状态机设计方法状态机设计类型状态机设计类型二、状态机的结构二、状态机的结构 St3/1101St0/0000St1/1000St2/0110a=01a=10/11状态状态/ /输出输出输入输入a=00/01a=10a=11a=00a=11/00a = 10a=00/11a=01a=10/01rst=1【例例3-15】如下图是一个如下图是一个Moore型状态转换图,试采用型状态转换图,试采用单进程状态机结构进行描述。单进程状态机结构进行描述。三、三、MooreMoore状态机描述状态机描述LIBRARY IEEE;U
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (新教材)2026人教版三年级下册数学 2.2.4 商末尾有0的除法 教学课件
- 2026新教材人教版二年级下册数学 我的时间小书 教学课件
- 2025 网络基础之无线电力传输与物联网设备供电课件
- 统编版语文五年级下册第一单元 质量评价卷(含答案)
- 2026年迁移户口合同(1篇)
- 机械加工件项目可行性研究报告
- 2026年及未来5年市场数据云南省废水污染物处理市场供需格局及未来发展趋势报告
- 刑罚的目的功能和基本原则
- 2026年及未来5年市场数据中国酸奶燕麦片行业市场发展数据监测及投资前景展望报告
- 2025 高中信息技术数据与计算之算法的分块矩阵乘法算法课件
- 小学生心理健康教育方式的研究结题报告
- 山西省煤矿建设施工管理标准
- 220kV输电线路220kV间隔扩建工程施工组织设计(定稿)
- 四川省达州市教育专业能力测验教师招聘考试
- LY/T 2899-2017湿地生态系统服务评估规范
- GB/T 19092-2003煤粉浮沉试验方法
- 古诗词诵读《江城子 乙卯正月二十日夜记梦》课件(19张PPT)
- 20世纪世界文学思潮 外国文学史
- MCC码总览对照表(全)
- 施工安全风险告知牌
- 公共关系的产生及其发展课件
评论
0/150
提交评论