1、可编程ASIC核心语法与基础电路设计核心语法与基础电路设计学时分配:学时分配:4电子科技大学进度 1.绪论。2.设计流程。3.模块化硬件与进程模型。4.信号传输模型。5.核心语法与基础电路设计。6.状态机设计。7.可靠设计与高速设计。8.可编程逻辑器件。9.数字信号处理的fpga实现。10.数字系统的RTL设计。电子科技大学程序结构 Library;-库,包等的说明 Entity;-实体说明 Architecture;-结构体描述电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;Entity u1 isPort(a:in std_log
2、ic;b:in std_logic;c:out std_logic);End u1;Architecture behv of u1 isBegin c=a and b;End behv;u1电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;Entity u1 isPort(a:in std_logic;b:in std_logic;c:out std_logic);End u1;Architecture behv of u1 isBegin c=a and b;End behv;u1表示使用表示使用 ieee库。这是最库。这是最常用的库
3、说明,绝大多数常用的库说明,绝大多数的的VHDL代码都使用这个代码都使用这个库。库。电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;Entity u1 isPort(a:in std_logic;b:in std_logic;c:out std_logic);End u1;Architecture behv of u1 isBegin c “0000”)成立成立;对于后者,有对于后者,有(“1001”“0000”)成立成立;电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;En
4、tity u_and2 isPort(a:in std_logic;b:in std_logic;c:out std_logic);End u_and2;Architecture behv of u_and2 isBegin c=a and b;End behv;u1声明元件的实体。声明元件的实体。语法:语法:Entity is.End;电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;Entity u_and2 isPort(a:in std_logic;b:in std_logic;c:out std_logic);End u_an
5、d2;Architecture behv of u_and2 isBegin c=a and b;End behv;u1元件的外部端口。语法:端口名:信号方向 数据类型;注意最后一个端口注意最后一个端口说明语句不要加分说明语句不要加分号!号!电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;Entity u_and2 isPort(a:in std_logic;b:in std_logic;c:out std_logic);End u_and2;Architecture behv of u_and2 isBegin c=a and b;
6、End behv;u1元件的结构体说明。元件的结构体说明。语法:语法:Architecture of isBeginEnd;电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;Entity u_and2 isPort(a:in std_logic;b:in std_logic;c:out std_logic);End u_and2;Architecture behv of u_and2 isBegin c=a and b;End behv;u1结构体描述。结构体描述。绝大多数情况下由绝大多数情况下由process构构成;成;一条一条“光秃
7、光秃”的信号赋值实的信号赋值实际上就是一个际上就是一个process,其敏其敏感信号为右边所有信号。感信号为右边所有信号。电子科技大学程序例子abcLibrary ieee;Use ieee.std_logic_1164.all;Entity u_and2 isPort(a:in std_logic;b:in std_logic;c:out std_logic);End u_and2;Architecture behv of u_and2 isBegin c=a and b;End behv;u1电子科技大学关于信号方向INININOUTBUFFERINOUTOUT电子科技大学VHDL常用数据
8、类型 Std_logic,std_logic_vector;Integer。电子科技大学常用的语法常用的语法1:if条件判断条件判断 IF 条件条件THEN 顺序处理语句;顺序处理语句;ELSE 顺序处理语句;顺序处理语句;END IF;注意,注意,if语句只能用语句只能用在在process,函数,函数,子过程之中!子过程之中!电子科技大学If的例子 Process(a)Begin if(a=1)then b=0;else b b b b1b2b3,即当即当b0、b1同为同为0时,输出编码为时,输出编码为00。换言之,当。换言之,当b00时,其余时,其余3个输入任意值该编码器的输出个输入任意值
9、该编码器的输出均为均为”00“。因为因为CASE语句没有对输入为任语句没有对输入为任意的表示法,故不能使用下面的语句:意的表示法,故不能使用下面的语句:即:即:WHEN“XX01“=y=“01”是错误的。是错误的。所以要正确描述输入之间的这种优先级关系就所以要正确描述输入之间的这种优先级关系就应选用应选用IF语句。程序如下:语句。程序如下:LIBRARY IEEE;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_1164.ALL;电子科技大学 ENTITY encoder ISENTITY encoder IS PORT
10、(input:IN STD_LOGIC_VECTOR(3 DOWNTO 0);PORT (input:IN STD_LOGIC_VECTOR(3 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);)y:OUT STD_LOGIC_VECTOR(1 DOWNTO 0);)END encoder;END encoder;ARCHITECTURE ARCHITECTURE rtlrtl OF encoder IS OF encoder ISBEGINBEGIN PROCESS(input)PROCESS(input)BEGIN BEGIN IF(input(0
11、)=0)then y=“00”:;IF(input(0)=0)then y=“00”:;ELSIF(input(1)=0)then y=“01”;ELSIF(input(1)=0)then y=“01”;ELSIF(input(2)=0)then y=“10”;ELSIF(input(2)=0)then y=“10”;ELSE y=“11”;ELSE y=“11”;END IF;END IF;END PROCESS;END PROCESS;END END rtlrtl;电子科技大学 在在IF语句中首先判断的是语句中首先判断的是input(0),其次是其次是input(1)这正好体现了这正好体现
12、了input(0)的优的优先级最高,只要先级最高,只要input(0)0就优先对它就优先对它编码。编码。电子科技大学常用语法3:时钟沿判断 上升沿:If(clkevent and clk=1)then 或者 if(rising_edge(clk)then 下降沿:if(clkevent and clk=0)then 或者 if(falling_edge(clk)then 电子科技大学时钟沿的例子 Process(clk)Begin if(clkevent and clk=1)then dout din1,b=din2,c=dout);din1din2doutabc电子科技大学其他内容 Vhdl
13、的数据类型的数据类型 Vhdl的运算的运算(逻辑运算,算术逻辑运算,算术 运算,关系运算,并置运算运算,关系运算,并置运算)Vhdl的信号类属性的信号类属性 等等。等等。电子科技大学基础电路设计 描述风格;描述风格;基础组合电路设计;基础组合电路设计;二选一电路,三八译码器,缓冲器,加二选一电路,三八译码器,缓冲器,加法器。法器。基础时序电路设计:基础时序电路设计:寄存器寄存器 计数器计数器电子科技大学基础组合电路设计电子科技大学例1:二选一电路设计 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX2to1 IS PORT(S:IN STD
14、_LOGIC;Zero:IN STD_LOGIC;One:IN STD_LOGIC;Y:OUT STD_LOGIC);ZeroOneSY电子科技大学 ARCHITECTURE behavior OF MUX2to1 IS Begin Process(S,Zero,One)Begin -下一页讲述 End process END behavior;ZeroOneSY电子科技大学方法1:直接逻辑运算 Process(S,Zero,One)Begin Y=(not S and Zero)or(S and One);End process;ZeroOneSY电子科技大学方法2:if语句 Process
15、(S,Zero,One)Begin if(S=0)then Y=Zero;else Y Y Y Y Y Y Y Y Y Y Y=“01111111”;END CASE;ELSE Y=“11111111”;END IF;END PROCESS;END behavior;注意不要漏掉此句电子科技大学例3 三态门三态门电路三态门电路电子科技大学 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY rei_gate IS PORT(din,en:IN STD_LOGIC;dout:OUT STD_LOGIC););END tri_gate;ARCHITECT
16、URE tri_gate OF tri_gate IS BEGIN tri_gate1:PROCESS(din,en)BEGINIF(en=1)THEN dout=din;ELSE dout=Z;END IF;END PROCESS;END tri_gate;电子科技大学例4:四位全加器设计dinadinbdoutcincoutDina和和dinb为两路为两路4 bit的输入,的输入,cin为进位输入;为进位输入;Dout为为4bit的输出,的输出,cout为进位输出。为进位输出。444电子科技大学 则描述为:则描述为:Architecture behav of u_FullAdder is
17、Signal atemp,btemp,tempout:std_logic_vector(4 downto 0);Begin Process(cin,dina,dinb,atemp,btemp,tempout).End behav;电子科技大学 Process(cin,dina,dinb,atemp,btemp,tempout)Begin atemp=0&dina;btemp=0&dinb;tempout=cin+atemp+btemp;dout=tempout(3 downto 0);cout=tempout(4);End process;电子科技大学代码评析 该代码用该代码用5bit半加运算
18、来完成半加运算来完成4bit全加,全加,在代码上非常简洁。在代码上非常简洁。由综合器自己选择元件库中现成的加法由综合器自己选择元件库中现成的加法部件来实现加法运算,设计者不必关心部件来实现加法运算,设计者不必关心其内部电路细节。其内部电路细节。但是其弱点是,综合器会用但是其弱点是,综合器会用5bit加法器来加法器来实现,容易造成资源消耗过大。实现,容易造成资源消耗过大。电子科技大学改进方法 使用1bit全加器构建abdcincoutFullAdder1b电子科技大学1bit全加器 Process(a,b,cin)Begin d=a xor b xor cin;cout=(a and cin)o
19、r(b and cin)or(a and b);End process;电子科技大学4bit全加器abdcincoutabdcincoutabdcincoutabdcincouttemp1temp2temp3a(3)a(2)a(1)a(0)b(3)b(2)b(1)b(0)cind(3)d(2)d(1)d(0)cout电子科技大学代码实现 总框架:总框架:Entity FullAdder4b is.End FullAdder4b;Architecture struct of FullAdder4b is Signal temp1,temp2,temp3:std_logic_vector(3 do
20、wnto 0);Begin -此处代码下一页说明此处代码下一页说明.End struct;Port(a :in std_logic_vector(3 downto 0);b :in std_logic_vector(3 downto 0);cin :in std_logic;d :out std_logic_vector(3 downto 0);cout:out std_logic;);电子科技大学代码实现 总框架:总框架:Entity FullAdder4b is.End FullAdder4b;Architecture struct of FullAdder4b is Signal tem
21、p1,temp2,temp3:std_logic_vector(3 downto 0);Begin -此处代码下一页说明此处代码下一页说明.End struct;电子科技大学 U0:FullAdder1b port map(a(0),b(0),cin,d(0),temp1);U1:FullAdder1b port map(a(1),b(1),temp1,d(0),temp2);U2:FullAdder1b port map(a(2),b(2),temp2,d(0),temp3);U3:FullAdder1b port map(a(3),b(3),temp3,d(0),cout );电子科技大学
22、 由上可见,硬件描述语言配合了完善的综合工由上可见,硬件描述语言配合了完善的综合工具后,可以使得设计者从烦琐的电路细节中解具后,可以使得设计者从烦琐的电路细节中解放出来,专心于系统的功能架构;放出来,专心于系统的功能架构;但是由于综合工具智能化程度的局限性,有时但是由于综合工具智能化程度的局限性,有时综合工具综合出来的电路并不一定是最优的,综合工具综合出来的电路并不一定是最优的,这就需要设计者在适当的时候在较低的层次上这就需要设计者在适当的时候在较低的层次上进行描述,指导综合工具综合出性能或面积优进行描述,指导综合工具综合出性能或面积优化的代码。化的代码。电子科技大学对比两种加法器描述方法对比
23、两种加法器描述方法 前一种方法便于使用并行进位逻辑,而后一种前一种方法便于使用并行进位逻辑,而后一种方法是串行进位,所以前者速度一般要比后者方法是串行进位,所以前者速度一般要比后者快;快;但是在位宽比较大的时候,并行进位的资源消但是在位宽比较大的时候,并行进位的资源消耗会快速上升。耗会快速上升。实验发现,实验发现,4bit的并行加法器和串行加法器的的并行加法器和串行加法器的资源消耗差不多,因此工程应用中,宽资源消耗差不多,因此工程应用中,宽bit的加的加法器经常采用法器经常采用4bit的并行加法器级联而成。的并行加法器级联而成。电子科技大学易犯错误电子科技大学实例分析 假设,要描述一个与门电路
24、:有很多种描述方法。&aby电子科技大学方法1:直接信号赋值 在结构体内,很直观地直接进行赋值:Architecture behav of And2 is Begin y=a and b;End behav;电子科技大学方法2:进程直接信号赋值 这种方法直接等效于方法1。注意要将a和b都加入敏感信号表。Architecture behav of And2 is Begin process(a,b)begin y=a and b;end process;End behav;电子科技大学方法3:进程if条件赋值 经过分析发现,实际上经过分析发现,实际上y大部分情况下为大部分情况下为0,只,只有有a
25、和和b都为都为1的时候,的时候,y才会输出才会输出1。所以描述。所以描述如下:如下:Architecture behav of And2 is Begin process(a,b)begin if(a=1 and b=1)then y=1;end if;end process;End behav;这个描述是错这个描述是错误的,为什么误的,为什么?电子科技大学方法4:进程if条件赋值 经过分析发现,经过分析发现,a=1时,时,y会跟踪会跟踪b的变化,即的变化,即 y=b。Architecture behav of And2 is Begin process(a,b)begin if(a=1)th
26、en y=b;end if;end process;End behav;这个描述还是这个描述还是错误的,为什错误的,为什么么?电子科技大学基础时序电路设计电子科技大学例1:基本的触发器基本的触发器 1、D触发器(触发器(DFF)电路设计电路设计 例例6-17:正边沿触发器的正边沿触发器的DFF设计设计(寄存器寄存器)其其VHDL描述如下:描述如下:dqclk电子科技大学 LIBRARY IEEELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;ENTITY ENTITY dff_logicdff_logic
27、IS IS PORTPORT(d d,clkclk:ININ STD_LOGIC STD_LOGIC;q q:OUT STD_LOGICOUT STD_LOGIC););END END dff_logicdff_logic;电子科技大学 ARCHITECTURE example OF ARCHITECTURE example OF dff_logicdff_logic IS IS BEGIN BEGIN PROCESSPROCESS(clkclk)BEGIN BEGIN IFIF(clkEVENTclkEVENT AND AND clkclk=1=1)THEN THEN q=d q=d;END
28、 IF;END IF;END PROCESS END PROCESS;END exampleEND example;电子科技大学 例例2:把上例中的:把上例中的clkEVENT条件条件去掉并把去掉并把d加到进程敏感表中。加到进程敏感表中。就可得到一个电平敏感就可得到一个电平敏感D D触发器(即锁存器)触发器(即锁存器)PROCESSPROCESS(clkclk,d d)BEGIN BEGIN IF IF(clkclk=1=1)THENTHEN q=d q=d;END IF END IF;ENF PROCESSENF PROCESS;你突然回你突然回忆到了什忆到了什么么.电子科技大学在组合电路描
29、述中注意补全所有条件 上述与门方法上述与门方法3的正确描述的正确描述:process(a,b)begin if(a=1 and b=1)then y=1;else y=0;-!end if;end process;电子科技大学 上述与门方法上述与门方法4的正确描述:的正确描述:process(a,b)begin if(a=1)then y=b;else y=0;-!end if;end process;电子科技大学 锁存和寄存的差别:锁存和寄存的差别:区别:区别:锁存是电平起作用锁存是电平起作用 寄存是时钟有效沿起作用寄存是时钟有效沿起作用!在设计中,应该尽量避免使用锁存在设计中,应该尽量避免
30、使用锁存!因为!因为锁存要占去大量的触发器资源,而且会对电路锁存要占去大量的触发器资源,而且会对电路带来某种不稳定的隐患。带来某种不稳定的隐患。在组合逻辑的组合进程中,在组合逻辑的组合进程中,条件语句描述时应该指定条件语句描述时应该指定所有条件下所有输出的状态,以避免锁存。比如所有条件下所有输出的状态,以避免锁存。比如if/case语句的所有分支必须定义全部的输出才可能避免出现语句的所有分支必须定义全部的输出才可能避免出现锁存。锁存。电子科技大学条件完整但仍然生成锁存器的描述 Architecture behav of And2 is Begin process(a,b)begin if(a=
31、1)then y=b;else y=y;-保持原值,导致综合器生成锁存器!保持原值,导致综合器生成锁存器!end if;end process;End behav;电子科技大学时序电路设计中的复位/置位 异步复位异步复位:Process(clk,areset)Begin if(areset=1)then q=0;elsif(clkevent and clk=1)then q=d;end if;End process;异步条件判断在时钟沿异步条件判断在时钟沿判断语句之前。不管时判断语句之前。不管时钟沿是否到达,只要异钟沿是否到达,只要异步信号有效,则后面的步信号有效,则后面的q=0将被执行。将被
32、执行。-注意异步复注意异步复/置位置位信号要放在敏感信号信号要放在敏感信号表中表中电子科技大学时序电路设计中的复位/置位 同步复位:同步复位:Process(clk)Begin if(clkevent and clk=1)then if(reset=1)then q=0;else q=d;end if;end if;End process;同步条件判断在时钟同步条件判断在时钟沿判断语句之后,当沿判断语句之后,当reset有效时有效时,不会立即不会立即进行复位,而是在时钟进行复位,而是在时钟沿处复位。沿处复位。电子科技大学异步复位(左)和同步复位(右)波形clkresetdqclkaresetd
33、q有利于整个系统有利于整个系统各模块的同时复各模块的同时复位位/置位置位(初始化初始化)电子科技大学例3:带异步复位和异步置位的寄存器设计 PROCESSPROCESS(clkclk,resetreset,presetpreset)BEGINBEGIN IFIF(reset=1reset=1)THENTHEN q q=0=0;ELSIF ELSIF(preset=1preset=1)THENTHEN q q=1=1;-本例中,本例中,reset的优先级高于的优先级高于preset ELSIFELSIF(rising_edgerising_edge(clkclk)THENTHEN q q=d=d
34、;END IF END IF;END PROCESSEND PROCESS;电子科技大学例例4:带时钟使能的寄存器设计:带时钟使能的寄存器设计Process(clk)Begin if(clkevent and clk=1)then if(en=1)then q=d;end if;end if;End process;这里是一个条这里是一个条件不完整,但件不完整,但是不会生存锁是不会生存锁存器的例子存器的例子电子科技大学例例5:八位带:八位带异步清除异步清除和和时钟使能时钟使能的的寄存器寄存器 LIBRARY IEEE;LIBRARY IEEE;USE IEEE.std_logic_1164.a
35、ll;USE IEEE.std_logic_1164.all;ENTITY reg8bit ISENTITY reg8bit IS PORT(PORT(clkclk:IN STD_LOGIC;:IN STD_LOGIC;reset:IN STD_LOGIC;reset:IN STD_LOGIC;en:IN STD_LOGIC;en:IN STD_LOGIC;din:IN STD_LOGIC_VECTOR(7 DOWNTO 0);din:IN STD_LOGIC_VECTOR(7 DOWNTO 0);doutdout:OUT STD_LOGIC_VECTOR(7 DOWNTO 0);:OUT S
36、TD_LOGIC_VECTOR(7 DOWNTO 0);END reg8bit;END reg8bit;电子科技大学 ARCHITECTURE behavior OF reg8bit IS Begin process(clk,reset)begin if(reset=0)then-这里低电平有效这里低电平有效 dout 0);elsif(clkevent and clk=1)then if(en=1)then-时钟使能时钟使能 dout=din;end if;end if;end process;END behavior;电子科技大学沿判断后的信号赋值都是寄存沿判断后的信号赋值都是寄存器赋值器
37、赋值 Process(clk)Begin if(clkevent and clk=1)then sig1=din;sig2=sig1 and sig;end if;End process;clksig1sigdinsig2电子科技大学对比沿判断之后的变量赋值对比沿判断之后的变量赋值 Process(clk)Variable var:std_logic;Begin if(clkevent and clk=1)then var:=din;dout=var and sig;end if;End process;sigDin(var)sig2clk电子科技大学但是但是,并不是时钟沿判断后的变并不是时钟
38、沿判断后的变量赋值都不会产生寄存器量赋值都不会产生寄存器 Process(clk)Varialbe var:std_logic;Begin if(clkevent and clk=1)then var:=din;end if;dout=var;End process;sig2clkdin电子科技大学例子:例子:二进制同步计数器二进制同步计数器 同步计数器就是指在时钟脉冲的作用下,组成计数同步计数器就是指在时钟脉冲的作用下,组成计数器的各个触发器的状态同时发生变化的一类计数器。器的各个触发器的状态同时发生变化的一类计数器。先来看一个比较简单的计数器:先来看一个比较简单的计数器:四位二进制计数器,
39、它带有异步复位控制端、同步四位二进制计数器,它带有异步复位控制端、同步预置控制端、同步使能端和进位输出瑞。这种四位预置控制端、同步使能端和进位输出瑞。这种四位二进制计数器的电路框图如图所示。其中:二进制计数器的电路框图如图所示。其中:输入端口输入端口 R是异步复位控制端是异步复位控制端 输入端口输入端口 S是同步预置控制端是同步预置控制端 输入端口输入端口 EN是同步使能端是同步使能端 输出瑞口输出瑞口 CO是进位输出端是进位输出端电子科技大学 四位二进制计数器的电路框图四位二进制计数器的电路框图电子科技大学 四位二进制计数器的功能表四位二进制计数器的功能表电子科技大学在功能表中在功能表中 没
40、有给出进位输出端口没有给出进位输出端口 CO的功能描述,它的功能是:的功能描述,它的功能是:当 四 位 二 进 制 计 数 器 计 数当 四 位 二 进 制 计 数 器 计 数为为”1111”时,如果遇到时钟上时,如果遇到时钟上升沿,它的输出为升沿,它的输出为1。电子科技大学四位二进制计数器的四位二进制计数器的VHDL描述描述 如图所示的四位二进制计数器的如图所示的四位二进制计数器的VHDL描述如下。描述如下。源代码中的同步预置值是根据实际源代码中的同步预置值是根据实际设计要求 来 定 的设计要求 来 定 的,这 里 我们 假 定这 里 我们 假 定为为”1010“电子科技大学 library
41、 library ieeeieee;use ieee.stdic_1164use ieee.stdic_1164allall;use use ieeeieeestd_logic_arithstd_logic_arithallall;use use ieee.std_logic_unsigned.allieee.std_logic_unsigned.all;entity counter isentity counter is port(port(clk,areset,sset,enableclk,areset,sset,enable:in Std_logic;in Std_logic;coutc
42、out:outout std_logic std_logic;q q:buffer std_logic_vector(3 buffer std_logic_vector(3 downtodownto 0)0););end counterend counter;architecurearchitecure rtlrtl of counter is of counter is beginbegin电子科技大学 process(clk,areset)beqin if(areset=1)then q 0);cout=0;elsif(clkevent and clk=1)then if(sset=1)t
43、hen q=”1010”;cout=0;elsif (enable=1)then if(q=“1111”)then计数上限。计数上限。cout=1;q=“0000”;else cout=0;q=q+1;end if;end if;end if;end process;end rtl;请画出请画出cout输输出出1时的波时的波形,注意形,注意cout脉冲对准的是脉冲对准的是q为为“1111”时,时,还是还是q为为“0000”时。时。电子科技大学 process(clk,areset,q)beqin if(areset=1)then q 0);elsif(clkevent and clk=1)th
44、en if(sset=1)then q=”1010”;elsif (enable=1)then q=q+1;end if;end if;end if;if(q=“1111”)then计数上限。计数上限。cout=1;else cout=0;end if;end process;如果把代如果把代码改成这码改成这种形式呢,种形式呢,波形又如波形又如何?何?注意注意!电子科技大学 另外,注意包引用中的另外,注意包引用中的std_logic_unsigned:加法运算用到。加法运算用到。q的信号方向为的信号方向为buffer,因为它既是输出,因为它既是输出,又是反馈回来做内部模块的输入,如又是反馈回来
45、做内部模块的输入,如q=q+1;If(q )等等电子科技大学带有异步复位带有异步复位reset、异步预置异步预置preset信号和时钟使能信号信号和时钟使能信号ce的的8位计数器位计数器 LIBRARY IEEELIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALLUSE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;-!-!ENTITY ENTITY asyn_load_cntasyn_load_cnt IS IS PORT(clkPOR
46、T(clk,cece,resetreset,presetpreset,loadload:IN STD_LOGIC IN STD_LOGIC;d d:IN STD_LOGIC_VECTOR(7 DOWNTO 0)IN STD_LOGIC_VECTOR(7 DOWNTO 0);q q:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0)BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0);END END asyn_load_cntasyn_load_cnt;电子科技大学 ARCHITECTURE behavioral OF ARCHITECTURE behavi
47、oral OF asyn_load_cntasyn_load_cnt IS IS BEGINBEGIN电子科技大学 PROCESS(clkPROCESS(clk,resetreset,presetpreset)BEGIN BEGIN IF(reset=1)THEN q 0)IF(reset=1)THEN q 0);ELSIF(preset=1)THEN(others=1)ELSIF(preset=1)THEN(others=1);ELSEIF(clkeventELSEIF(clkevent AND AND clkclk=1)THEN=1)THEN IF(ceIF(ce=1)THEN=1)THE
48、N q=q+1 q=q+1;END IF END IF;END IFEND IF;END PROCESSEND PROCESS;END behavioral;END behavioral;电子科技大学小结小结(1)VHDL核心语法:核心语法:程序结构;程序结构;std_logic_unsigned与与std_logic_signed的区别;的区别;信号方向,信号方向,buffer与与inout的区别;的区别;if条件判断条件判断,case分支判断分支判断(注意注意others),if与与case的区的区别别(前者带有优先级前者带有优先级);for循环循环(自学自学);时钟沿判断;时钟沿判断;p
49、ort map。电子科技大学小结小结(2)基础组合电路设计基础组合电路设计 常用方法:直接逻辑运算,常用方法:直接逻辑运算,if/case条件分支,条件分支,portmap模块拼接,及这几种方法的混合;模块拼接,及这几种方法的混合;三态门中的高阻,及其应用;三态门中的高阻,及其应用;易犯错误:易犯错误:if/case条件分支不完整导致锁存条件分支不完整导致锁存器的生成;器的生成;电子科技大学小结小结(3)基础时序电路设计基础时序电路设计 寄存器与锁存器的描述及其时序区别;寄存器与锁存器的描述及其时序区别;异步复位异步复位/置位与同步复位置位与同步复位/置位在描述方法置位在描述方法上和时序上的区别;上和时序上的区别;时钟使能;时钟使能;沿判断后的沿判断后的信号赋值信号赋值都是寄存器赋值。注意都是寄存器赋值。注意其时序特点;其时序特点;沿判断后的沿判断后的变量赋值变量赋值可能生成寄存器,也可可能生成寄存器,也可能不生成。能不生成。电子科技大学