1、library ieee;use ieee.std_logic_1164.all;entity test isport(clk:in std_logic;count:out std_logic_vector(3 downto 0);end test;architecture rtl of test is beginif clkevent and clk=1 then count=count+1;end if;end rtl;,library ieee;use ieee.std_logic_1164.all;entity test isport(d1,d2:in std_logic;sel:in
2、 std_logic;q:out std_logic);end test;architecture rtl of test is beginprocess(d1,d2,sel)beginq=d1 when sel=0 else d2;end process;end rtl;,1,常见错误:,基本逻辑电路:组合逻辑电路、时序逻辑电路3.9.1组合逻辑电路设计简单门电路、编码器、译码器、加法器、多路选择器、三态门等。,2,3.9基本逻辑电路设计,1、基本门电路,3,2、编码器,设计一个 8 输入优先级编码器,y0 级别最 低,y7 级别最高;输出为3位编码。,4,方法1:利用if 多选择语句自顶向
3、下的优先特,性,5,方法2:进程内为顺序语句,最先描述优先级最 低,最后描述优先级最高,可实现优先级编,码。,6,方法3:利用条件赋值语句 architecturebehaviorofpriority is beginvec=“111”wheny7=1 else“110”wheny6=1 else“101”wheny5=1 else“100”wheny4=1 else“011”wheny3=1 else“010”wheny2=1 else“001”wheny1=1 else“000”wheny0=1 else“XXX”;endbehavior;,7,3、译码器译码器是编码器的逆过程。如 3-8
4、 译码器:,8,方法1:使用逻辑左移运算符library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder isport(inp:in std_logic_vector(2 downto 0);outp:out std_logic_vector(7 downto 0);end decoder;architecture rtl of decoder is beginoutp=“00000001”sll(conv_integer(inp);end rtl;,9,方法2:使用process语
5、句library ieee;,use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity decoder isport(inp:in std_logic_vector(2 downto 0);outp:out std_logic_vector(7 downto 0);end decoder;architecture rtl of decoder is beginprocess(inp)beginoutp0);outp(conv_integer(inp)=1;end process;end rtl;,10,方法3:使用 c
6、ase 语句实现。,11,译码输出 低有效,12,方法4:使用条件赋值语句,13,3-8译码器仿真结果:,译码输出 低有效,14,4、加法器带进位的 4位加法器符号如下:,15,方法1:用for loop语句实现,16,17,方法2:直接使用加法“+”函数:,18,19,加法器仿真结果:,20,5、多路选择器,前面用if 语句、case 语句、条件赋值语句、选择赋值语句分别描述过 4 选 1 选择器。6、三态门及总线缓冲器VHDL语言通过指定大写的 Z 值表示高阻状 态a:std_logic;a_bus:std_logic_vector(7downto0);指定高阻状态如下:a=Z;,a_bu
7、s=“ZZZZZZZZ”;,21,1)三态门电路描述,22,三态门仿真结果:,23,2)单向总线缓冲器,24,3)双向总线缓冲器,25,26,3.9.2时序逻辑电路设计,27,触发器、寄存器、计数器、分频器、信号发生器等。一、时序电路特殊信号的描述 时钟信号和复位信号1、时钟信号描述常用的描述方式:1)进程的敏感信号是时钟信号,在进程内部 用if 语句描述时钟的边沿条件。,如:process(clock_signal)beginif(clock_edge_condition)then signal_out=signal_in;其它时序语句endif;endprocess;,28,2)在进程中用
8、 waituntil 语句描述时钟信号,此时进程将没有敏感信号。如:processbeginwaituntil(clock_edge_condition);signal_out=signal_in;其它时序语句endprocess;,29,注意:在对时钟边沿说明时,一定要注明是上升 沿还是下降沿。一个进程中只能描述一个时钟信号。Waituntil 语句只能放在进程的最前面或 最后面。3)时钟边沿的描述 时钟上升沿:(clockeventandclock=1)时钟下降沿:(clockeventandclock=0),30,2、触发器的复位信号描述1)同步复位:在只有以时钟为敏感信号的进程中定义。
9、如:process(clock_signal)beginif(clock_edge_condition)then if(reset_condition)thensignal_out=reset_value;elsesignal_out=signal_in;endif;endif;,end,process;,31,2)异步复位:进程的敏感信号表中除时钟 信号外,还有复位信号。如:process(reset_signal,clock_signal)beginif(reset_condition)then signal_out=reset_value;elsif(clock_edge_conditi
10、on)then signal_out=signal_in;endif;,end,process;,32,二、常用时序电路设计1、触发器(Flip_Flop)1)D触发器,33,异步置位/复位D触发器,34,同步复位D触发器,35,比较:异步置位的锁存器(Latch),36,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 beginprocess(clk)be
11、ginif clkevent and clk=1 then q=not q;end if;end process;end rtl;,37,2、寄存器8位串行输入、串行输出移位寄存器:,38,方法一:8位移位寄存器的结构化描述,39,方法二:直接用信号连接描述,40,41,移位寄存器仿真结果:,42,3、计数器,43,计数器分为:同步计数器异步计数器(1)同步计数器同步计数器指在时钟脉冲(计数脉冲)的 控制下,构成计数器的各触发器状态同时发生变 化的计数器。,带允许端的十二进制计数器,44,45,可逆计数器(加减计数器),46,47,可逆计数器仿真结果:,48,例:六十进制(分、秒)计数器,49
12、,50,60进制计数器仿真结果:,51,(2)异步计数器,异步计数器又称为行波计数器,它的低位 计数器的输出作为高位计数器的时钟信号。异步计数器采用行波计数,使计数延迟增 加,计数器工作频率较低。描述异步计数器与同步计数器的不同主要 体,现在对各级时钟脉冲的描述上。,52,例:由8个触发器构成的行波计数器:,53,基本元件 dffr 的描述:,54,采用元件例化描述8位行波计数器:,55,8 位行波计数器仿真结果:,56,4、序列信号发生器、检测器1)“01111110”序列发生器,57,58,59,60,仿真结果:,61,2)序列信号检测器,检测“01111110”,62,63,64,65,
13、简洁的序列信号检测器:,66,67,3.9.3存储器设计,1、RO,M,68,69,2、SRAM,70,71,72,仿真结果:,73,3.10状态机的VHDL设计,74,状态机的分类:摩尔型状态机(Moore)米勒型状态机(Mealy),3.10.1摩尔状态机的VHDL设计,次态 逻辑,状态,寄存器,输出,逻辑,摩尔型状态机的输出仅与当前状态有关复位信号,时钟信号,输入,次态,75,当前 状态,输出,摩尔型状态机真值表:,76,77,78,79,80,3.10.2米勒状态机的VHDL设计,次态 逻辑,状态,寄存器,输出,逻辑,米勒型状态机的输出不仅是当前状态的函数,也是输入信号的函数。复位信号,时钟 信号,输入,次态,当前 状态,输出,81,米勒型状态机真值表:,82,83,84,85,86,
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1