《《基本逻辑电路设计》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《基本逻辑电路设计》PPT课件.ppt(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第三章第三章 硬件描述语言(硬件描述语言(VHDLVHDL)第三部分第三部分 基本逻辑电路设计基本逻辑电路设计1基本逻辑电路:组合逻辑电路、时序逻辑电路一 组合逻辑电路设计 简单门电路、编码器、译码器、加法器、多路选择器、三态门等。3.9 基本逻辑电路设计21、基本门电路32、编码器 设计一个 8 输入优先级编码器,y0 级别最低,y7 级别最高;输出为3位编码。Y7=1Vec=111Y6=1Vec=110Y5=1Vec=101Y4=1Vec=100Y3=1Vec=011Y2=1Vec=010Y1=1Vec=001Y0=1Vec=0004方法方法1 1:利用 if 多选择语句自顶向下的优先特
2、性5方法方法2 2:进程内为顺序语句,最先描述优先级最低,最后描述优先级最高,可实现优先级编码。6方法方法3 3:利用条件赋值语句:利用条件赋值语句 architecture behavior of priority is begin vec=“111”when y7=1 else “110”when y6=1 else “101”when y5=1 else “100”when y4=1 else “011”when y3=1 else “010”when y2=1 else “001”when y1=1 else “000”when y0=1 else “XXX”;end behavior
3、;73、译码器 译码器是编码器的逆过程。如 3-8 译码器:sel=000Y=00000001sel=001Y=00000010sel=010Y=00000100sel=011Y=00001000sel=100Y=00010000sel=101Y=00100000sel=110Y=01000000sel=111Y=100000008方法方法1 1:使用逻辑左移运算符:使用逻辑左移运算符 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder is port(inp:in st
4、d_logic_vector(2 downto 0);outp:out std_logic_vector(7 downto 0);end decoder;architecture rtl of decoder is begin outp=“00000001”sll(conv_integer(inp);end rtl;9方法方法2 2:使用:使用processprocess语句语句 library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder is port(inp:in std_l
5、ogic_vector(2 downto 0);outp:out std_logic_vector(7 downto 0);end decoder;architecture rtl of decoder is begin process(inp)begin outp0);outp(conv_integer(inp)=1;end process;end rtl;10方法方法3 3:使用:使用 case case 语句实现。语句实现。11译码输出低有效12方法方法4 4:使用条件赋值语句:使用条件赋值语句133-8译码器仿真结果:译码输出低有效144、多路选择器 前面用 if 语句、case 语句
6、、条件赋值语句、选择赋值语句分别描述过4选1选择器。5、三态门及总线缓冲器 VHDL语言通过指定大写的Z值表示高阻状态 a:std_logic;a_bus:std_logic_vector(7 downto 0);指定高阻状态如下:a=Z;a_bus=“ZZZZZZZZ”;151)三态门电路描述16三态门仿真结果:172)单向总线缓冲器183)双向总线缓冲器19二 时序逻辑电路设计 触发器、寄存器、计数器、分频器、信号发生器等。一)时序电路特殊信号的描述 时钟信号和复位信号 1、时钟信号描述 常用的描述方式:1)进程的敏感信号是时钟信号,在进程内 部用if 语句描述时钟的边沿条件。20如:pr
7、ocess(clock_signal)begin if(clock_edge_condition)then signal_out=signal_in;其它时序语句 end if;end process;212)在进程中用wait until语句描述时钟信号,此 时进程将没有敏感信号。如:process begin wait until(clock_edge_condition);signal_out=signal_in;其它时序语句 end process;22 注意:a.在对时钟边沿说明时,一定要注明是上升沿 还是下降沿。b.一个进程中只能描述一个时钟信号。c.wait until 语句只能
8、放在进程的最前面或 最后面。3)时钟边沿的描述 时钟上升沿:(clockevent and clock=1clockevent and clock=1)时钟下降沿:(clockevent and clock=0clockevent and clock=0)232、触发器的复位信号描述 1)同步复位:在只有以时钟为敏感信号的进程 中定义。如:process(clock_signal)begin if(clock_edge_condition)then if(reset_condition)then signal_out=reset_value;else signal_out=signal_in;
9、end if;end if;end process;24 2)异步复位:进程的敏感信号表中除时钟信 号外,还有复位信号。如:process(reset_signal,clock_signal)begin if(reset_condition)then signal_out=reset_value;elsif(clock_edge_condition)then signal_out=signal_in;end if;end process;25二)常用时序电路设计 1、触发器(Flip_Flop)1)D触发器26异步置位/复位D触发器27同步复位D触发器28比较:异步置位的锁存器(Latch)2
10、9 library ieee;use ieee.std_logic_1164.all;entity t_ff is port(t,clk:in std_logic;q:buffer std_logic);end t_ff;architecture rtl of t_ff is begin process(clk)begin if clkevent and clk=1 then if t=1 then q=not q;else q=q;end if;end process;end rtl;TClkQQ2)T触发器30 library ieee;use ieee.std_logic_1164.al
11、l;entity rs_ff is port(r,s,clk:in std_logic;q,qn:buffer std_logic);end rs_ff;architecture rtl of rs_ff is begin process(r,s,clk)begin if clkevent and clk=1 then if s=1 and r=0 then q=0;qn=1;elsif s=0 and r=1 then q=1;qn=0;elsif s=0 and r=0 then q=q;qn=q n;else null;end if;end if;end process;end rtl;
12、SClkQQRSRQQn00QQn01101001113)RS触发器312、寄存器 8位串行输入、串行输出移位寄存器:z0z1z2z3z4z5z6z7z8328位移位寄存器描述(结构描述)33移位寄存器仿真结果:343、计数器 计数器分为:同步计数器 异步计数器(1)同步计数器 同步计数器指在时钟脉冲(计数脉冲)的控 制下,构成计数器的各触发器状态同时发生变化 的计数器。35带允许端的十二进制计数器36可逆计数器(加减计数器)37可逆计数器仿真结果:38例:六十进制(分、秒)计数器394060进制计数器仿真结果:41(2)异步计数器 异步计数器又称为行波计数器,它的低位计数器的输出作为高位计数
13、器的时钟信号。异步计数器采用行波计数,使计数延迟增加,计数器工作频率较低。描述异步计数器与同步计数器的不同主要体现在对各级时钟脉冲的描述上。42例:由8个触发器构成的行波计数器:43 基本元件 dffr 的描述:44 采用元件例化描述8位行波计数器:458 位行波计数器仿真结果:464、序列信号发生器、检测器 1)“01111110”序列发生器4748仿真结果:492)序列信号检测器,检测“01111110”50515253简洁的序列信号检测器:5455三 存储器设计1、ROM56572、SRAM5859仿真结果:60加法器 带进位的 4位加法器符号如下:Sum(i)=a(i)b(i)cinC(i+1)=a(i)b(i)+(a(i)+b(i)c(i)61方法1:用for loop语句实现 62方法2:直接使用加法“+”函数:63加法器仿真结果:64