可编程ASIC设计及应用 李广军核心语法与基础电路设计_第1页
可编程ASIC设计及应用 李广军核心语法与基础电路设计_第2页
可编程ASIC设计及应用 李广军核心语法与基础电路设计_第3页
可编程ASIC设计及应用 李广军核心语法与基础电路设计_第4页
可编程ASIC设计及应用 李广军核心语法与基础电路设计_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

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_logic;

2、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;Entity u_and2 isP

4、ort( 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_and2;Ar

5、chitecture 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;End behv

6、;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构成;一条“光秃”的信号赋值实际上就是一个process,其敏感信号为

7、右边所有信号。电子科技大学程序例子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常用数据类型Std_logic, std_logic_vector;Integer。电子科技大

8、学常用的语法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个输入任意值该编码器的输出均为”00“。因为CASE语句没有对输入为任意的表示法,故不能使用下面的语句:即:WHEN “XX01“=y=“01”是错误的。所以要正确描述输入之间的这种优先级关系就应选用IF语句。程序如下:LIBRAR

9、Y IEEE;USE IEEE.STD_LOGIC_1164.ALL;电子科技大学 ENTITY encoder IS PORT (input:IN STD_LOGIC_VECTOR(3 DOWNTO 0); y :OUT STD_LOGIC_VECTOR(1 DOWNTO 0);)END encoder;ARCHITECTURE rtl OF encoder ISBEGIN PROCESS (input) BEGIN IF (input(0)=0) then y=“00”:; ELSIF (input(1)=0) then y=“01”; ELSIF (input(2)=0) then y=

10、“10”; ELSE y=“11”; END IF; END PROCESS;END rtl;电子科技大学 在IF语句中首先判断的是input(0),其次是input(1)这正好体现了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 电子科技大学时钟沿的例子Proces

11、s( clk )Begin if( clkevent and clk = 1 ) then dout din1, b= din2, c= dout );din1din2doutabc电子科技大学其他内容Vhdl的数据类型Vhdl的运算(逻辑运算,算术 运算,关系运算,并置运算)Vhdl的信号类属性等等。电子科技大学基础电路设计描述风格;基础组合电路设计; 二选一电路,三八译码器,缓冲器,加法器。基础时序电路设计:寄存器计数器电子科技大学基础组合电路设计电子科技大学例1: 二选一电路设计LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY MUX2to1

12、 IS PORT (S: IN STD_LOGIC; Zero: IN STD_LOGIC; One: IN STD_LOGIC; Y: OUT STD_LOGIC);ZeroOneSY电子科技大学ARCHITECTURE behavior OF MUX2to1 ISBeginProcess(S, Zero, One )Begin - 下一页讲述End processEND behavior;ZeroOneSY电子科技大学方法1:直接逻辑运算Process( S, Zero, One )Begin Y = (not S and Zero ) or ( S and One );End proce

13、ss;ZeroOneSY电子科技大学方法2:if语句Process( 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_LOG

14、IC; dout:OUT STD_LOGIC); END tri_gate;ARCHITECTURE 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电子科技大学则描述为:Architect

15、ure behav of u_FullAdder isSignal 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

16、 downto 0 ); cout = tempout(4);End process;电子科技大学代码评析该代码用5bit半加运算来完成4bit全加,在代码上非常简洁。由综合器自己选择元件库中现成的加法部件来实现加法运算,设计者不必关心其内部电路细节。但是其弱点是,综合器会用5bit加法器来实现,容易造成资源消耗过大。电子科技大学改进方法使用1bit全加器构建abdcincoutFullAdder1b电子科技大学1bit全加器Process( a, b, cin )Begin d = a xor b xor cin; cout = (a and cin ) or (b and cin) or

17、(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 isSignal temp1, temp2,temp3: std_logic_vector( 3 downto 0 );Begin -

18、此处代码下一页说明.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 isSignal temp1, temp2,tem

19、p3: 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),

20、cout );电子科技大学由上可见,硬件描述语言配合了完善的综合工具后,可以使得设计者从烦琐的电路细节中解放出来,专心于系统的功能架构;但是由于综合工具智能化程度的局限性,有时综合工具综合出来的电路并不一定是最优的,这就需要设计者在适当的时候在较低的层次上进行描述,指导综合工具综合出性能或面积优化的代码。电子科技大学对比两种加法器描述方法前一种方法便于使用并行进位逻辑,而后一种方法是串行进位,所以前者速度一般要比后者快;但是在位宽比较大的时候,并行进位的资源消耗会快速上升。实验发现,4bit的并行加法器和串行加法器的资源消耗差不多,因此工程应用中,宽bit的加法器经常采用4bit的并行加法器级

21、联而成。电子科技大学易犯错误电子科技大学实例分析假设,要描述一个与门电路:有很多种描述方法。电子科技大学方法1:直接信号赋值在结构体内,很直观地直接进行赋值:Architecture behav of And2 isBegin y = a and b;End behav;电子科技大学方法2:进程直接信号赋值这种方法直接等效于方法1。注意要将a和b都加入敏感信号表。Architecture behav of And2 isBegin process( a, b ) begin y = a and b; end process;End behav;电子科技大学方法3:进程if条件赋值经过分析发现,

22、实际上y大部分情况下为0,只有a和b都为1的时候,y才会输出1。所以描述如下:Architecture behav of And2 isBegin 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 isBegin process( a, b ) begin if( a = 1 )then y = b;

23、 end if; end process;End behav;这个描述还是错误的,为什么?电子科技大学基础时序电路设计电子科技大学例1:基本的触发器1、 D触发器(DFF)电路设计 例6-17: 正边沿触发器的DFF设计(寄存器) 其VHDL描述如下:电子科技大学LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY dff_logic IS PORT(d,clk:IN STD_LOGIC; q:OUT STD_LOGIC);END dff_logic;电子科技大学ARCHITECTURE example OF dff_logic IS BEGIN PR

24、OCESS(clk) BEGIN IF(clkEVENT AND clk=1) THEN q = d; END IF; END PROCESS;END example;电子科技大学 例2:把上例中的clkEVENT条件去掉并把d加到进程敏感表中。就可得到一个电平敏感D触发器(即锁存器)PROCESS(clk,d)BEGIN IF (clk =1)THEN q = d; END IF;ENF PROCESS;你突然回忆到了什么.电子科技大学在组合电路描述中注意补全所有条件上述与门方法3的正确描述:process( a, b ) begin if( a = 1 and b = 1 ) then y

25、 = 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;电子科技大学 锁存和寄存的差别:区别:锁存是电平起作用寄存是时钟有效沿起作用!在设计中,应该尽量避免使用锁存!因为锁存要占去大量的触发器资源,而且会对电路带来某种不稳定的隐患。在组合逻辑的组合进程中, 条件语句描述时应该指定所有条件下所有输出的状态,以避免锁存。比如if/case语句的所有分支必须定义全部的输出才可

26、能避免出现锁存。电子科技大学条件完整但仍然生成锁存器的描述Architecture behav of And2 isBegin process( a, b ) begin if( a = 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 i

27、f;End process;异步条件判断在时钟沿判断语句之前。不管时钟沿是否到达,只要异步信号有效,则后面的q= 0将被执行。-注意异步复/置位信号要放在敏感信号表中电子科技大学时序电路设计中的复位/置位同步复位: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有效时, 不会立即进行复位,而是在时钟沿处复位。电子科技大学异步复位(左)和同步复位(右)波形有利于整

28、个系统各模块的同时复位/置位(初始化)电子科技大学例3:带异步复位和异步置位的寄存器设计PROCESS(clk,reset,preset)BEGIN IF(reset=1)THEN q=0; ELSIF(preset =1)THEN q=1;-本例中, reset的优先级高于preset ELSIF(rising_edge(clk)THEN q= d; END IF;END PROCESS;电子科技大学例4:带时钟使能的寄存器设计Process( clk ) Begin if( clkevent and clk = 1 ) then if ( en = 1 ) then q = d; end

29、if; end if;End process;这里是一个条件不完整,但是不会生存锁存器的例子电子科技大学例5:八位带异步清除和时钟使能的寄存器LIBRARY IEEE;USE IEEE.std_logic_1164.all;ENTITY reg8bit ISPORT ( clk: IN STD_LOGIC; reset: IN STD_LOGIC; en: IN STD_LOGIC; din: IN STD_LOGIC_VECTOR (7 DOWNTO 0); dout: OUT STD_LOGIC_VECTOR (7 DOWNTO 0);END reg8bit;电子科技大学ARCHITECT

30、URE behavior OF reg8bit ISBegin 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;电子科技大学沿判断后的信号赋值都是寄存器赋值Process( clk )Begin if( clkevent and clk = 1 ) then sig1 = din; si

31、g2 = 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电子科技大学但是,并不是时钟沿判断后的变量赋值都不会产生寄存器Process( clk )Varialbe var : std_logic;Begin if(cl

32、kevent and clk = 1 )then var := din; end if; dout = var;End process;sig2clkdin电子科技大学例子: 二进制同步计数器同步计数器就是指在时钟脉冲的作用下,组成计数器的各个触发器的状态同时发生变化的一类计数器。先来看一个比较简单的计数器:四位二进制计数器,它带有异步复位控制端、同步预置控制端、同步使能端和进位输出瑞。这种四位二进制计数器的电路框图如图所示。其中:输入端口 R是异步复位控制端输入端口 S是同步预置控制端输入端口 EN是同步使能端输出瑞口 CO是进位输出端电子科技大学 四位二进制计数器的电路框图电子科技大学 四

33、位二进制计数器的功能表电子科技大学在功能表中没有给出进位输出端口CO的功能描述,它的功能是:当四位二进制计数器计数为”1111”时,如果遇到时钟上升沿,它的输出为1。电子科技大学四位二进制计数器的VHDL描述如图所示的四位二进制计数器的VHDL描述如下。源代码中的同步预置值是根据实际设计要求来定的,这里我们假定为”1010“电子科技大学library ieee;use ieee.stdic_1164all;use ieeestd_logic_arithall;use ieee.std_logic_unsigned.all;entity counter is port( clk,areset,s

34、set,enable: in Std_logic; cout:out std_logic; q:buffer std_logic_vector(3 downto 0) );end counter;architecure rtl of counter isbegin电子科技大学process(clk,areset) beqin if( areset=1) then q 0) ; cout = 0; elsif(clkevent and clk=1) then if(sset=1)then 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) then if(sset=1)then q =”1010”

温馨提示

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

评论

0/150

提交评论