650 likes | 945 Views
§ 3.9 基本逻辑电路设计. 基本逻辑电路: 组合逻辑电路、 时序逻辑电路 一 组合逻辑电路设计 简单门电路、编码器、译码器、 加法器、多路选择器、三态门等。. 1 、基本门电路. 2 、编码器 设计一个 8 输入优先级编码器, y0 级别最低, y7 级别最高;输出为 3 位编码。. 方法 1 : 利用 if 多选择语句自顶向下的优先特性. 方法 2 : 进程内为顺序语句,最先描述优先级最低, 最后描述优先级最高,可实现优先级编码。. 方法 3 :利用条件赋值语句
E N D
§3.9 基本逻辑电路设计 基本逻辑电路: 组合逻辑电路、 时序逻辑电路 一 组合逻辑电路设计 简单门电路、编码器、译码器、 加法器、多路选择器、三态门等。
2、编码器 设计一个 8 输入优先级编码器,y0 级别最低, y7 级别最高;输出为3位编码。
方法1:利用 if 多选择语句自顶向下的优先特性
方法2:进程内为顺序语句,最先描述优先级最低, 最后描述优先级最高,可实现优先级编码。
方法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、译码器 译码器是编码器的逆过程。如 3-8 译码器:
方法1:使用逻辑左移运算符 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decoder is port(inp : in std_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;
方法2:使用process语句 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decoder is port(inp : in std_logic_vector(2 downto 0); outp : out std_logic_vector(7 downto 0)); end decoder; architecture rtl of decoder is begin process(inp) begin outp<=(others=>’0’); outp(conv_integer(inp))<=‘1’; end process; end rtl;
3-8译码器仿真结果: 译码输出低有效
4、加法器 带进位的 4位加法器符号如下: Sum(i) = a(i) b(i) cin C(i+1) = a(i) b(i) +((a(i) + b(i) ) c(i)
5、多路选择器 前面用 if 语句、case 语句、条件赋值语句、选择赋值语句分别描述过4选1选择器。 6、三态门及总线缓冲器 VHDL语言通过指定大写的Z值表示高阻状态 a : std_logic; a_bus:std_logic_vector(7 downto 0); 指定高阻状态如下: a <= ‘Z’ ; a_bus <= “ZZZZZZZZ” ;
二 时序逻辑电路设计 触发器、寄存器、计数器、分频器、信号发生器等。 一)时序电路特殊信号的描述 时钟信号和复位信号 1、时钟信号描述 常用的描述方式: 1)进程的敏感信号是时钟信号,在进程内 部用if 语句描述时钟的边沿条件。
如: process (clock_signal) begin if (clock_edge_condition) then signal_out <= signal_in ; ┇ 其它时序语句 ┇ end if ; end process ;
2)在进程中用wait until语句描述时钟信号,此 时进程将没有敏感信号。 如: process begin wait until (clock_edge_condition); signal_out <= signal_in ; ┇ 其它时序语句 ┇ end process ;
注意: a.在对时钟边沿说明时,一定要注明是上升沿 还是下降沿。 b.一个进程中只能描述一个时钟信号。 c.wait until 语句只能放在进程的最前面或 最后面。 3)时钟边沿的描述 时钟上升沿: (clock’event and clock = ‘1’) 时钟下降沿: (clock’event and clock = ‘0’)
2、触发器的复位信号描述 1)同步复位:在只有以时钟为敏感信号的进程 中定义。 如: process (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 ;
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 ;
二) 常用时序电路设计 1、触发器(Flip_Flop) 1)D触发器
2)T触发器 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 clk’event and clk=‘1’ then if t=‘1’ then q<=not q; else q<=q; end if; end process; end rtl; T Q Clk Q
3)RS触发器 S Q library ieee; use ieee.std_logic_1164.all; 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 Clk Q R process(r, s, clk) begin if clk’event 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;
2、寄存器 8位串行输入、串行输出移位寄存器: z0 z1 z2 z3 z4 z5 z6 z7 z8
3、计数器 计数器分为:同步计数器 异步计数器 (1)同步计数器 同步计数器指在时钟脉冲(计数脉冲)的控 制下,构成计数器的各触发器状态同时发生变化 的计数器。
(2)异步计数器 异步计数器又称为行波计数器,它的低位计数器的输出作为高位计数器的时钟信号。 异步计数器采用行波计数,使计数延迟增加,计数器工作频率较低。 描述异步计数器与同步计数器的不同主要体现在对各级时钟脉冲的描述上。