首页计算机计算机工程EDA技术及数字系统的应用 04 第四章_硬件描述语言AHDL.pptx

04 第四章_硬件描述语言AHDL.pptx

页数:35页文件大小:622.0 KB来源: EDA技术及数字系统的应用ppt课件

本课件介绍硬件描述语言的基本特点与设计流程,并以AHDL为重点讲解数值、符号名、节点与组等基本元素,说明TDF文件的子设计段、逻辑段与变量段结构、函数模块的引用方式,并给出编码器、译码器、移位寄存器与状态机等设计实例。

第四章硬件描述语言AHDL章节封面,标示本章涵盖HDL概述与AHDL语言的语法规则与设计实例
硬件描述语言HDL概述页,说明HDL以形式化方法描述数字逻辑关系及AHDL、ABEL-HDL、VHDL、Verilog HDL四类语言
硬件描述语言与软件语言对比示意图,展示软件程序经编译器与HDL程序经综合器生成网表文件的不同流程
查看本课件的文字版(共 35 页,供检索与复制)

第1页:硬件描述语言AHDL章节封面

《EDA技术及数字系统的应用》第四章封面,主题为硬件描述语言与AHDL。

第2页:硬件描述语言HDL概述

一·硬件描述语言(HDL)概述HDL(HardwareDescriptionLanguage)是一种用形式化方法来表示数字逻辑关系的语言,采用语言的方式而非图形等方式描述硬件电路。常用硬件描述语言:

  • AHDL
  • ABEL-HDL
  • VHDL
  • Verilog HDLIEEE标准·容易修改、容易保存

第3页:硬件语言与软件语言的比较

C、ASM程序CPU指令/数据代码:010010 100010 110软件程序编译器COMPILER

  • 软件语言设计目标流程硬件描述语言综合器SYNTHESIZER为ASIC设计提供的电路网表文件
  • 硬件语言设计目标流程HDL程序硬件语言与其它软件语言的不同

第4页:HDL描述方式的设计过程

原理图/HDL文本编辑综合FPGA/CPLD适配FPGA/CPLD器件和电路系统时序与功能门级仿真1、功能仿真2、时序仿真逻辑综合器结构综合器1、isp方式下载2、JTAG方式下载3、针对SRAM结构的配置4、OTP器件编程功能仿真FPGA/CPLD编程下载HDL描述方式的设计过程

第5页:硬件测试与设计流程

硬件测试设计要求选择文本输入方式设计HDL文本代码存盘、源文件取名(.vhd .tdf)将源文件设置成Project选择器件引脚锁定建立仿真波形文件仿真测试波形分析启动编译编译编程下载/配置

第6页:AHDL的基本元素

二· AHDL硬件描述语言

  • AHDL数值
  • 符号名
  • 关键字和保留标识符
  • 节点和组
  • 符号(一般符号、运算符号和比较符号)
  • 逻辑表达式1.AHDL的基本元素

第7页:组的概念与分类

组组是多个节点的集合,被当作一个整体来操作。常把相同类型的符号名和端口名称当作组来说明和应用。一个组最多可包括256个成员(或位)。

  • 单值域组(b[3..0])
  • b3, b2, b1, b0 (having 4 members)
  • MSBis b3,LSBis b0
  • 双值域组(a[3..0][2..0])
  • a3_2, a3_1, a3_0, a2_2, a2_1, a2_0, a1_2, a1_1,a1_0, a0_2, a0_1, a0_0 (having 12 members)
  • MSBis a3_2,LSBis a0_0

第8页:组的赋值与运算示例

a[7..4] = b[9..6]; a[9..8] = VCC; a[9..8] = 1; a[9..8] = 3; a[3..0] = GND a[3..0] = 0; temp = b0& b1;a[2..1] = temp; out[ ] = a[ ] & b[ ];(a[3..0], b[3..0] : input;out[3..0] : output;)a7=b9, a6=b8, a5=b7, a4=b6a[9..8] connect to VCCa[9..8] = B"01"a[9..8] = B"11"a[3..0] connect to GNDa[3..0] = B"0000"a2 = temp, a1 = temp 组的操作out0 = a0 & b0;out1 = a1 & b1;out2 = a2 & b2;out3 = a3 & b3;

第9页:TDF文件的结构

TDF文件中的这些语句不是必须的Logic(逻辑)段Variable(变量)段Subdesign(子设计)段Options(选择)语句FunctionPrototype语句Parameter(参数)语句Define(定义)语句Constant(常量)语句Include(包含)语句Title(标题)语句TDF文件包含的三段:子设计段、变量段、逻辑段.vhd.gdf.tdf.smf.wdf.edf.sch.xnf低层的设计文件通过逻辑段被连接到高层的TDFs文件2. AHDL文件的基本结构

第10页:子设计段

·子设计段格式为:SUBDESIGN子设计名(输入端口:端口类型;...输出端口:端口类型;...)端口类型:INPUT(输入)、OUTPUT(输出)、BIDIR(双向)。输入端口输出端口双向端口子设计名

第11页:逻辑段

·逻辑段格式如下:BEGIN语句;...END;常用的语句有:

  • 逻辑等式
  • 逻辑控制等式
  • Case语句
  • For语句
  • If语句
  • Defaults(默认)语句
  • 真值表语句
  • 函数内部直接引用语句

第12页:变量段

·变量段格式为:VARIABLE变量名:变量类型;...

  • 节点说明:NODE、TRI_STATE_NODE
  • 实例说明:(函数的调用)
  • 寄存器说明:DFF、DFFE、JKFF、JKFFE ···
  • 状态机说明:MACHINE WITH STATES(状态名);变量类型:

第13页:节点说明示例

SUBDESIGNdecode1( a0, a1, b, d: input;out2, out3 : output;)variabletemp : node;begintemp = a0 & !a1;out2 =temp# b;out3 =temp& d;end;temp节点说明

第14页:寄存器说明示例

寄存器说明SUBDESIGN bus_reg( clk, d[7..0] : input;q[7..0] : output;)variableff[7..0] :dff;beginff[].clk = clk;ff[].d = d[];q[] = ff[].q;end;ff[0].clk = clk;ff[1].clk = clk;ff[2].clk = clk;ff[3].clk = clk;ff[4].clk = clk;ff[5].clk = clk;ff[6].clk = clk;ff[7].clk = clk;ff[0].d = d[0];ff[1].d = d[1];ff[2].d = d[2];ff[3].d = d[3];ff[4].d = d[4];ff[5].d = d[5];ff[6].d = d[6];ff[7].d = d[7];q[0] = ff[0].q;q[1] = ff[1].q;q[2] = ff[2].q;q[3] = ff[3].q;q[4] = ff[4].q;q[5] = ff[5].q;q[6] = ff[6].q;q[7] = ff[7].q;

第15页:AHDL模板

I forgot …If-then-elsecase-end caseloop-end loop??…???· AHDL模板

第16页:IF语句与真值表语句模板

IF语句逻辑段子设计段逻辑段真值表语句重新输入

第17页:函数模块及其引用

.函数模块及其引用在TDF文件的逻辑段中可以调用基本元件、函数和已设计的模块进行逻辑设计,在调用前,需要对这些基本元件和函数模块进行说明即函数原型说明和变量名定义(变量段)。函数原型说明:函数原型语句和包含语句

第18页:包含语句与函数原型语句

包含语句函数原型语句变量名定义74151包含文件包含语句

第19页:元件函数(符号)库

元件函数(符号)库

  • 基本元件:主要是缓冲器、触发器和锁存器;
  • 强函数:带参数设置模式的库函数(LPM);
  • 宏函数:具有一定功能的函数模块,如74系列数字集成电路的逻辑功能。系统提供了三种函数库:OK!

第20页:函数模块的引用方式

函数模块的引用 采用实例说明方式来调用函数模块; 采用内部直接引用方式来调用函数模块。SUBDESIGN flip_flop( d, clk:input ;q:output ; )beginq =dff(d , clk , , ) ;end ;Method 1SUBDESIGN flip_flop( d, clk : input ;q : output ; )variabletemp :dff;begintemp.d = d;temp.clk = clk;q = temp.q;end;Method 2调用D触发器FUNCTIONdff(d, clk, clrn, prn)RETURNS (q);直接调用实例说明

第21页:直接调用函数模块

直接调用函数模块实例说明方式调用函数模块FUNCTION4count(clk, clrn, setn, ldn, cin, dnup, d, c, b, a)RETURNS (qd, qc, qb, qa, cout ) ;FUNCTION16dmux(d, c, b, a) RETURNS (q[15..0]);

第22页:AHDL的描述语句

. AHDL的描述语句

  • 逻辑等式(赋值语句)
  • 真值表
  • Case语句(情况语句)
  • IF Then语句
  • Defaults语句(默认语句)
  • 常量(Constant)语句
  • 参数(Parameters)语句

第23页:原理图与文本描述的关系

原理图与文本描述的关系SUBDESIGN tri_io( clk, enable :input;io :bidir; )variabletemp1 :dff;temp2 :tri;begintemp1.d = io;temp1.clk = clk;temp2.in = temp1.q;temp2.oe = enable;io = temp2.out;end;clk, enable :input;io :bidir;原理图AHDL文本inputbidirdfftri

第24页:数字电路设计实例目录

A、设计编码器和译码器;B、设计显示译码电路;C、10位移位寄存器设计;D、一个模可变的二进制加法计数器;E、有限状态机设计;F、竞赛抢答器设计;G、数字钟设计;五.数字电路的设计实例

第25页:编码器设计

A、设计编码器SUBDESIGNbcd8_3(D7,D6,D5,D4,D3,D2,D1,D0:INPUT;Y[2..0]:OUTPUT;)BEGINIFD7THENY[]=7;ELSIFD6THENY[]=6;ELSIFD5THENY[]=5;ELSIFD4THENY[]=4;ELSIFD3THENY[]=3;ELSIFD2THENY[]=2;ELSIFD1THENY[]=1;ELSEY[]=0;ENDIF;END;图10.1.1优先编码器

第26页:3线-8线译码器设计

设计译码器图10.1.23线-8线译码器SUBDESIGNabcd3_8(a,b,c:INPUT;Y[7..0]:OUTPUT;)BEGINCASE(a,b,c)ISWHEN0=>Y[7..0]=1;WHEN1=>Y[7..0]=2;WHEN2=>Y[7..0]=4;WHEN3=>Y[7..0]=8;WHEN4=>Y[7..0]=16;WHEN5=>Y[7..0]=32;WHEN6=>Y[7..0]=64;WHENOTHERS=>Y[7..0]=128;ENDCASE;END;

第27页:显示译码电路设计

SUBDESIGNdeled1(num[3..0]:INPUT;a,b,c,d,e,f,g:OUTPUT;)BEGINTABLEnum[3..0]=>a,b,c,d,e,f,g;H"0"=>1,1,1,1,1,1,0;H"1"=>0,1,1,0,0,0,0;H"2"=>1,1,0,1,1,0,1;H"3"=>1,1,1,1,0,0,1;H"4"=>0,1,1,0,0,1,1;H"5"=>1,0,1,1,0,1,1;H"6"=>1,0,1,1,1,1,1;H"7"=>1,1,1,0,0,0,0;H"8"=>1,1,1,1,1,1,1;H"9"=>1,1,1,1,0,1,1;H"A"=>1,1,1,0,1,1,1;H"B"=>0,0,1,1,1,1,1;H"C"=>1,0,0,1,1,1,0;H"D"=>0,1,1,1,1,0,1;H"E"=>1,0,0,1,1,1,1;H"F"=>1,0,0,0,1,1,1;ENDTABLE;END;图10.1.4七段显示译码器B、设计显示译码器

第28页:10位移位寄存器设计

SUBDESIGNshift10(in,clock:INPUT;out,q[9..0]:OUTPUT;)VARIABLEff[9..0]:DFF;BEGINff[].clk=clock;q[]=ff[].q;--触发器向下移位ff[9..1].d=ff[8..0].q;ff0.d=in;out=ff9.q;END;C、10位移位寄存器设计

第29页:模可变二进制加法计数器

D、一个模可变的二进制加法计数器SUBDESIGN6bin_cnt(clk,clr,m[1..0]:INPUT;q[5..0],co:OUTPUT;)VARIABLEcount[5..0]:DFF;BEGINcount[].clk=clk;count[].clrn=!co&!clr;CASEm[1..0]ISWHEN0=>IFcount[].q<6THEN--00时,6进制计数count[].d=count[].q+1;co=GND;ELSEco=VCC;ENDIF;WHEN1=>IFcount[].q<12THEN--01时,12进制计数count[].d=count[].q+1;co=GND;ELSEco=VCC;ENDIF;WHEN2=>IFcount[].q<24THEN--10时,24进制计数count[].d=count[].q+1;co=GND;ELSEco=VCC;ENDIF;WHEN3=>IFcount[].q<60THEN--11时,60进制计数count[].d=count[].q+1;co=GND;ELSEco=VCC;ENDIF;WHENOTHERS=>count[].d=0;ENDCASE;q[]=count[];END;

第30页:有限状态机设计

E、有限状态机设计

  • 状态机定义(变量段)
  • 逻辑等式(逻辑段)
  • 真值表或Case语句中的状态转换(逻辑段)在变量段中,定义状态机名及其状态,或定义状态位。时钟信号、置位信号和时钟使能信号控制状态机中的触发器,在逻辑段中,应该对这些信号进行定义。

第31页:步进电机状态机设计

SUBDESIGN stepper( clk,reset,RL : INPUT ;Y[3..0] : OUTPUT; )VARIABLEss:MACHINEWITH STATES (s0,s1,s2,s3);BEGINss.clk=clk;ss.reset=reset;CASE ss ISWHEN s0=> Y[3..0]=B "0001";IF RL THEN ss=s1; ELSE s=s3; END IF;WHEN s1=> Y[3..0]=B "0010";IF RL THEN ss=s2; ELSE ss=s0; END IF;WHEN s2=> Y[3..0]=B "0100";IF RL THEN ss=s3; ELSE ss=s1; END IF;WHEN s3=> Y[3..0]=B "1000";IF RL THEN ss=s0; ELSE ss=s2; END IF;END CASE;END;0/0010RL/Y[3..0]1/00011/00101/10000/00010/01001/01000/1000S0S1S2S3图10.3.1状态转移图四个状态逻辑等式CASE语句

第32页:竞赛抢答器设计

F、竞赛抢答器设计SUBDESIGNqan_da_c(d[7..1]:INPUT;clk,clr:INPUT;q[7..1],c:OUTPUT;)VARIABLEff[7..1]:DFFE;BEGINff[].clk=clk;ff[].clrn=!clr;ff[].d=d[];q[]=ff[].q;c=ff1#ff2#ff3#ff4#ff5#ff6#ff7;ff[].ena=!c;END;

第33页:数字钟设计

本页为「G、数字钟设计」实例页,源文件仅提取到标题,电路结构与AHDL代码以图片形式呈现,建议对照原课件图片补充本页要点说明。

第34页:AHDL语言设计小结

AHDL语言设计小结

  • AHDL是一种逻辑描述的并行语言,在逻辑段中定义的所有行为是在同一时间内并行进行运算,而不是相继进行。对于同一节点或变量(为高电平有效),进行多次赋值的等式间呈现逻辑关系(或)。
  • 一个TDF文件必须有一个子设计段和一个逻辑段。可以有选择地包括一个变量段、选择语句、标题语句和默认语句,以及一个或多个包含语句、常量语句、定义语句和函数原型语句。
  • AHDL特别适合于描述复杂的组合逻辑、组运算、状态机、真值表和参数化的逻辑。

第35页:组合逻辑与时序逻辑的实现

  • 组合逻辑可以用逻辑表达式、等式、真值表、种类繁多的强函数和宏函数实现,If Then语句和Case语句是实现条件逻辑的理想选择。
  • 时序逻辑可以用状态机、寄存器或锁存电路实现,LPM功能也是有效的。状态机的实现常采用真值表和Case语句。
顶部目录