时序电路VHDL设计(时序逻辑部分)_第1页
时序电路VHDL设计(时序逻辑部分)_第2页
时序电路VHDL设计(时序逻辑部分)_第3页
时序电路VHDL设计(时序逻辑部分)_第4页
时序电路VHDL设计(时序逻辑部分)_第5页
已阅读5页,还剩96页未读 继续免费阅读

下载本文档

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

文档简介

1、第五章第五章 第三讲第三讲数字电路与逻辑设计数字电路与逻辑设计常用组合逻辑电路常用组合逻辑电路VHDL设计实例设计实例组合逻辑电路设计组合逻辑电路设计1. 分析逻辑问题,抽象输入、输出逻辑变量。分析逻辑问题,抽象输入、输出逻辑变量。2. 列真值表、写函数表达式。列真值表、写函数表达式。3. 采用基本门电路、采用基本门电路、PLD实现实现。实体实体 (A,B,C)结构体结构体a1库、程序包声明库、程序包声明结构框图ABC结构体结构体a1数字电路的数字电路的VHDL表述表述实体描述实体描述ENTITY entity_name ISPORT(input1_name : IN STD_LOGIC;in

2、put2_name : IN STD_LOGIC_VECTOR (a2 downto a1);output1_name:OUT STD_LOGIC;output2_name:OUT STD_LOGIC_VECTOR(b2 downto b1) );END entity_name;- STD_LOGIC:描述描述1位宽度的电路端口,如单独的逻辑变量位宽度的电路端口,如单独的逻辑变量A,可描述为可描述为A: IN STD_LOGIC;- STD_LOGIC_VECTOR (a2 downto a1):描述多位宽度的电路:描述多位宽度的电路端口,如一组逻辑变量的组合(端口,如一组逻辑变量的组合(D3

3、,D2,D1,D0)4位宽度,可位宽度,可描述为描述为D : in std_logic_vector(3 downto 0);ARCHITECTURE a OF entity_name ISSIGNAL signal_name: STD_LOGIC;BEGIN- VHDL语句语句;- 逻辑电路描述,输入输出的逻辑关系描述;逻辑电路描述,输入输出的逻辑关系描述;END a;结构体描述结构体描述VHDL参考书参考书VHDL设计指南(第二版)设计指南(第二版) 作者:(美)阿森顿作者:(美)阿森顿 译者译者: 葛红葛红出版社:机械工业出版社(出版社:机械工业出版社(2005)CPLD/FPGA应用开

4、发技术与工程实践应用开发技术与工程实践作者:求是科技作者:求是科技出版社:人民邮电出版社(出版社:人民邮电出版社(2005)(1)三态输出电路)三态输出电路 (2)比较器)比较器 (3)数据选择器)数据选择器 (4)编码器)编码器(5)译码器)译码器 一、常用组合逻辑电路设计一、常用组合逻辑电路设计(1)三态输出电路)三态输出电路(1位位)AENBEN=1 B=A;EN=0 B=高阻态library ieee;use ieee.std_logic_1164.all;entity triout isport (A: in std_logic; en: in std_logic; B: out s

5、td_logic);end triout;architecture behave of triout isbegin B = A when en=1 else Z; end behave; -注意此处的注意此处的“Z”要大写;要大写;三态输出电路(三态输出电路(多位多位) A7-A0ENB7-B0EN=1 B=A;EN=0 B=高阻态88library ieee;use ieee.std_logic_1164.all;entity triout isport(A: in std_logic_vector(7 downto 0); en: in std_logic; B: out std_log

6、ic_vector(7 downto 0);end triout;architecture behave of triout isbegin A = B when en=1 else ZZZZZZZZ; end behave; -注意多位时用双引号;注意多位时用双引号;(1)三态输出电路)三态输出电路 (2)数据选择器)数据选择器 (3)比较器)比较器 (4)编码器)编码器(5)译码器)译码器 一、常用组合逻辑电路设计一、常用组合逻辑电路设计(2)数据选择器)数据选择器4选1 MUX ABCDYS0S1输出端输出端library ieee;use ieee.std_logic_1164.all

7、;entity mux41 is Port( A,B,C,D: in std_logic; sel : in std_logic_vector(1 downto 0); Y : out std_logic);end mux41;architecture archmux of mux41 is begin Y b, 输出为:输出为:agtb=1, altb= 0 , aeqb=0;如果如果 ab, 输出为:输出为:altb=1, agtb= 0 , aeqb=0;如果如果 a=b, 输出为:输出为:aeqb=1, agtb= 0 , altb=0。Library ieee;Use ieee.st

8、d_logic_1164.all;Use ieee.std_logic_unsigned.all;ENTITY cmpab IS PORT ( A, B :in std_logic_vector(7 downto 0); AGTB, ALTB, AEQB : out std_logic);END cmpab;ARCHITECTURE a OF cmpab ISBEGIN aeqb= 1 when a=b else 0; agtbb else 0; altb = 1 when aB then agtb=1; elsif A=B then aeqb=1; else altb=1; end if;

9、end process; END b;(1)三态输出电路)三态输出电路 (2)比较器)比较器 (3)数据选择器)数据选择器 (4)编码器)编码器(5)译码器)译码器 一、常用组合逻辑电路设计一、常用组合逻辑电路设计(4)编码器)编码器I6I7I5I4I3I2I1I0Y2Y1Y083编码器编码器I7 I6 I5 I4 I3 I2 I1 I0Y2 Y1 Y01111111000011111101001111110110101111011101111101111100110111111011011111111001111111111LIBRARY ieee; USE ieee.std_logic_1

10、164.all; ENTITY encoder IS PORT(i : IN STD_LOGIC_VECTOR(7 DOWNTO 0); y: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); END encoder; ARCHITECTURE rtl OF encoder IS BEGIN y = 111 when i = 01111111 else 110 when i = 10111111 else 101 when i = 11011111 else 100 when i = 11101111 else 011 when i = 11110111 else 010 w

11、hen i = 11111011 else 001 when i = 11111101 else 000 when i = 11111110 else XXX;END rtl; STD_LOGIC类型端口的值空间。例如类型端口的值空间。例如A:OUT STD_LOGIC; 则则A可赋予可赋予 0 、1 、Z 、,形式如下A= 0 ; Type Std_Logic Is ( U, -Undefined X , -Forcing Unknown 0 , -Forcing 0 1 , -Forcing 1 Z , -Hign Impedance W, -Weak Unknown L , -Weak

12、0; H , -Weak 1;- , -Dont Care;) 标准逻辑类型对数字逻辑电路的逻辑特性描述更加完整,真实,因此在VHDL程序中,对逻辑信号的定义通常采用标准逻辑类型(1)三态输出电路)三态输出电路 (2)比较器)比较器 (3)数据选择器)数据选择器 (4)编码器)编码器(5)译码器)译码器 一、常用组合逻辑电路设计一、常用组合逻辑电路设计(2)译码器)译码器A. 38译码器译码器LIBRARY ieee; USE ieee.std_logic_1164.all; ENTITY decode_3to8 IS PORT(a,b,c,G1,G2A,G2B: IN STD_LOGIC;

13、Y: OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END decode_3to8; ARCHITECTURE rtl OF decode_3to8 IS SIGNAL indata: STD_LOGIC_VECTOR(5 DOWNTO 0); BEGIN indata=G1&G2A&G2B&c&b&a; y= 11111110 when indata=100000 else 11111101 when indata=100001 else 11111011 when indata=100010 else 11110111 when

14、 indata=100011 else 11101111 when indata=100100 else 11011111 when indata=100101 else 10111111 when indata=100110 else 01111111 when indata=100111 else 11111111;END rtl;译码器译码器(2)译码器)译码器B. 数码管译码器数码管译码器A3A2A1A0abcdefgLibrary ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity bcd i

15、sPort( A : in std_logic_vector(3 downto 0);Seven : out std_logic_vector(6 downto 0);End bcd;Architecture a of bcd isBeginSeven= 0111111 when A=0000 else -0 0000110 when A=0001 else -1 1011011 when A=0010 else -2 1001111 when A=0011 else -3 1100110 when A=0100 else -4 1101101 when A=0101 else -5 1111

16、101 when A=0110 else -6 0000111 when A=0111 else -7 1111111 when A=1000 else -8 1101111 when A=1001 else -9 0000000 ;End a;例例1 1:组合逻辑设计:组合逻辑设计 四舍五入电路四舍五入电路 输入输入8421BCD8421BCD码,输出码,输出F F。library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.all;use ieee.std_logic_unsigned.all;entity sswr

17、isport(d:in std_logic_vector(3 downto 0); y:out std_logic);end sswr;architecture behave of sswr isbegin y = 0 when 0=d and d5 else 1 when 5=d and d10 else Z;end behave;例例2 2: :设计组合逻辑电路设计组合逻辑电路设计一个设计一个1bit全加器。全加器。输入输入 X,Y,CI 输出输出 Z,COlibrary ieee;use ieee.std_logic_1164.all;use ieee.std_logic_arith.a

18、ll;use ieee.std_logic_unsigned.all;entity full_bit_adder isport(a,b,ci:in std_logic; y,cout:out std_logic);end full_bit_adder;architecture bh1 of full_bit_adder isbegin y = (not a)and (not b)and ci) or (not a)and (b) and (not ci) or (a)and (not b)and(not ci) or (a) and (b)and(ci); cout = (b and ci)

19、or (a and ci) or (a and b);end bh1;architecture bh2 of full_bit_adder isbegin y = a xor b xor ci; cout = (a and b) or (a and ci) or (b and ci);end bh2;configuration con1 of full_bit_adder isfor bh2end for;end con1;总结:总结:VHDL+PLD组合逻辑电路设计组合逻辑电路设计逻辑问题逻辑问题(逻辑输入、输出,逻辑函数)(逻辑输入、输出,逻辑函数)1.输入逻辑变量输入逻辑变量描述:描述:

20、 1位的输入变量位的输入变量标准逻辑类型,标准逻辑类型,std_logic 多位的输入变量多位的输入变量标准逻辑序列类型标准逻辑序列类型 std_logic_vector2.输出逻辑变量输出逻辑变量描述:描述: 同输入。同输入。3.逻辑关系逻辑关系描述:描述: 列出真值表列出真值表 适用于输入变量较少、或函数有效输入值较适用于输入变量较少、或函数有效输入值较少的情况。少的情况。 求取逻辑函数表达式求取逻辑函数表达式 输出变量较少或输出变量相互独立的情况。输出变量较少或输出变量相互独立的情况。 逻辑关系高级抽象表述逻辑关系高级抽象表述 逻辑关系概括逻辑关系概括直接逻辑描述;直接逻辑描述; 码制转

21、换等问题(数值运算类)。码制转换等问题(数值运算类)。设计题一:四位二进制数转换为设计题一:四位二进制数转换为BCD码。码。entity bin2bcd isport(d_bin: in std_logic_vector(3 downto 0); d_bcd_H,d_bcd_L: out std_logic_vector(3 downto 0);end bin2bcd;architecture aa of bin2bcd isBegind_bcd_L= d_bin when d_bin10 else d_bin+6;d_bcd_H= “0000” when d_bin10 else “0001

22、”;end aa;entity bcd2b isport(d:in std_logic_vector(3 downto 0); Bh,Bl:out std_logic_vector(3 downto 0);end bcd2b;architecture aa of bcd2b issignal a,b:std_logic_vector(7 downto 0);begina = 0000&d;b = a when d10 else a+6;Bh = b(7 downto 4);Bl = b(3 downto 0);end aa;architecture ab of bcd2b isbegi

23、nBh 9 else 0000;Bl 9 else d;end ab;设计题二:设计一位设计题二:设计一位BCD码加法器码加法器entity bcd_adder isport(d1,d2:in std_logic_vector(3 downto 0); Bh,Bl:out std_logic_vector(3 downto 0);end bcd_adder;architecture aa of bcd_adder issignal a,b,t,s:std_logic_vector(7 downto 0);begina = 0000&d1;b = 0000&d2;t = a +

24、b ;s = t when t10 else t+6;Bh = s(7 downto 4);Bl = s(3 downto 0);end aa;码制转换设计题:将设计题:将4位自然二进制数转换为位自然二进制数转换为BCD码,并码,并通过数码管显示转换结果。通过数码管显示转换结果。四位二进制码转换为四位二进制码转换为BCD码,并译码显示。码,并译码显示。(数码管为共阴极)(数码管为共阴极)Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity bcd isPort( A : in std_lo

25、gic_vector(3 downto 0);bcd0,bcd1 : out std_logic_vector(3 downto 0);seven0,seven1 : out std_logic_vector(6 downto 0);End bcd;Architecture a of bcd is signal tmp:std_logic_vector(3 downto 0);Begin bcd0 = A when (A10) else A+6; bcd1 = “0000” when (A10) else “0001”; tmp = bcd0; seven0=0111111 when tmp=

26、0000 else -0 0000110 when tmp=0001 else -1 1011011 when tmp=0010 else -2 1001111 when tmp=0011 else -3 1100110 when tmp=0100 else -4 1101101 when tmp=0101 else -5 1111101 when tmp=0110 else -6 0000111 when tmp=0111 else -7 1111111 when tmp=1000 else -8 1101111 when tmp=1001 else -9 0000000 ;seven1=“

27、0111111” when (A1000-111D触发器触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff ISPORT( cp,d: IN STD_LOGIC; q: OUT STD_LOGIC);END dff;ARCHITECTURE a OF dff ISBEGIN process(cp) begin if cpevent and cp=1 then q=d; end if; end process;END a;状态方程: J-K触发器特性表触发器特性表J KQn+1功能说明功能说明0 00 11 01 1Qn01Qn不变不变置

28、置 0置置 1翻转翻转nn1nQKQJQJK触发器触发器cpCPI. 依据依据状态方程状态方程实现实现JK触发器触发器USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.ALL;entity jkjk is port(j,k,clk: in std_logic; q,qn: buffer std_logic);end jkjk;buffer端口模式:端口既作为实体的输出,又回端口模式:端口既作为实体的输出,又回到实体内部做驱动信号。到实体内部做驱动信号。architecture bh of jkjk is begin process

29、(clk) begin if clkevent and clk=0 then q = (j and (not q) OR (not k) and q); qn = not(j and (not q) OR (not k) and q); end if; end process;end bh;nn1nQKQJQII. 依据依据状态转换表状态转换表实现实现JK触发器触发器USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.ALL;entity jkjk is port(j,k,clk: in std_logic; q,qn: buffe

30、r std_logic);end jkjk;architecture bh2 of jkjk1 is begin process(clk) begin if clkevent and clk=0 then if j=0 and k=1 then q =0; qn =1; elsif j=1 and k=0 then q=1; qn =0; elsif j=0 and k=0 then q = q; qn = qn; elsif j=1 and k=1 then q= not q; qn = not qn; end if; end if; end process;end bh2;(3)-A 简单

31、计数器设计简单计数器设计计数器CLKQ3Q2Q1Q0四位加计数器四位加计数器LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.ALL;ENTITY counter ISPORT( clk: in STD_LOGIC;q: buffer STD_LOGIC_vector(3 downto 0);END counter;buffer端口模式:端口既作为实体的输出,又回端口模式:端口既作为实体的输出,又回到实体内部做驱动信号。到实体内部做驱动信号。ARCH

32、ITECTURE a OF counter ISBEGIN process(clk) begin if (clkevent and clk=1) then q=q+1; end if; end process;END a;四位加计数器四位加计数器计数器CLKCLR(3)-B 带带同步同步清零、清零、同步同步置数置数功能的计数器功能的计数器LDQ3Q2Q1Q0 D3D2D1D0控制信号控制信号CLR、LD:具有更高优先级:具有更高优先级LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee

33、.std_logic_arith.ALL;ENTITY counter ISPORT( clk,clr,ld: in STD_LOGIC; d: in STD_LOGIC_vector(3 downto 0);q: buffer STD_LOGIC_vector(3 downto 0);END counter;ARCHITECTURE a OF counter ISBEGIN process(clk) begin if (clkevent and clk=1) then if(clr=1) then q=0000; elsif(ld=1)then q=d; else q=q+1; end if

34、; end if;end process;END a;计数器CLKCLR(3)-C 带带异步异步清零、清零、同步同步置数置数功能的计数器功能的计数器LDQ3Q2Q1Q0 D3D2D1D0LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.ALL;ENTITY counter ISPORT( clk,clr,ld: in STD_LOGIC; d: in STD_LOGIC_vector(3 downto 0);q: buffer STD_LOGIC_v

35、ector(3 downto 0);END counter;ARCHITECTURE a OF counter ISBEGIN process(clk,clr) begin if(clr=1) then q=“0000”; elsif (clkevent and clk=1 )then if(ld=1) then q=d; else q=q+1; end if; end if; end process;END a;(3)-D 带带进位进位计数器设计计数器设计计数器CLKQ3Q2Q1Q0四位加计数器四位加计数器COUTLIBRARY ieee;USE ieee.std_logic_1164.AL

36、L;USE ieee.std_logic_unsigned.ALL;USE ieee.std_logic_arith.ALL;ENTITY counter ISPORT( clk: in STD_LOGIC; q: buffer STD_LOGIC_vector(3 downto 0); cout: out std_logic); END counter;ARCHITECTURE a OF counter ISBEGIN ARCHITECTURE b OF counter ISBEGIN process(clk) begin if (clkevent and clk=1) then q=q+1

37、; end if; end process; cout=1 when q=15 else 0;END b;进程进程设计状态转换设计状态转换并列语句并列语句实现输出实现输出ARCHITECTURE b OF counter ISBEGIN process(clk) begin if (clkevent and clk=1) then if(q9)then q=q+1; else q=“0000”; end if; end if; end process; cout=1 when q=9 else 0;END b;进程进程设计状态转换设计状态转换并列语句并列语句实现输出实现输出(4) 分频器Tclk = 1 usTcout = 10us计数器就是对时钟脉冲计数,同时计数器就是对时钟脉冲计数,同时 计数器还是一个分频器。计数器还是一个分频器。fclk = 1x106 Hzfcout = 1x105 Hz(3)移位寄存器设计)移位寄存器设计4位右移移位寄存器位右移移位寄存器Reset:异步清零异步清零右移移位寄存器右移移位寄存器dinresetclkQAQBQCQDlibrary ieee;use i

温馨提示

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

评论

0/150

提交评论