页数:35页文件大小:622.0 KB来源: EDA技术及数字系统的应用ppt课件
本课件介绍硬件描述语言的基本特点与设计流程,并以AHDL为重点讲解数值、符号名、节点与组等基本元素,说明TDF文件的子设计段、逻辑段与变量段结构、函数模块的引用方式,并给出编码器、译码器、移位寄存器与状态机等设计实例。
《EDA技术及数字系统的应用》第四章封面,主题为硬件描述语言与AHDL。
一·硬件描述语言(HDL)概述HDL(HardwareDescriptionLanguage)是一种用形式化方法来表示数字逻辑关系的语言,采用语言的方式而非图形等方式描述硬件电路。常用硬件描述语言:
C、ASM程序CPU指令/数据代码:010010 100010 110软件程序编译器COMPILER
原理图/HDL文本编辑综合FPGA/CPLD适配FPGA/CPLD器件和电路系统时序与功能门级仿真1、功能仿真2、时序仿真逻辑综合器结构综合器1、isp方式下载2、JTAG方式下载3、针对SRAM结构的配置4、OTP器件编程功能仿真FPGA/CPLD编程下载HDL描述方式的设计过程
硬件测试设计要求选择文本输入方式设计HDL文本代码存盘、源文件取名(.vhd .tdf)将源文件设置成Project选择器件引脚锁定建立仿真波形文件仿真测试波形分析启动编译编译编程下载/配置
二· AHDL硬件描述语言
组组是多个节点的集合,被当作一个整体来操作。常把相同类型的符号名和端口名称当作组来说明和应用。一个组最多可包括256个成员(或位)。
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;TDF文件中的这些语句不是必须的Logic(逻辑)段Variable(变量)段Subdesign(子设计)段Options(选择)语句FunctionPrototype语句Parameter(参数)语句Define(定义)语句Constant(常量)语句Include(包含)语句Title(标题)语句TDF文件包含的三段:子设计段、变量段、逻辑段.vhd.gdf.tdf.smf.wdf.edf.sch.xnf低层的设计文件通过逻辑段被连接到高层的TDFs文件2. AHDL文件的基本结构
·子设计段格式为:SUBDESIGN子设计名(输入端口:端口类型;...输出端口:端口类型;...)端口类型:INPUT(输入)、OUTPUT(输出)、BIDIR(双向)。输入端口输出端口双向端口子设计名
·逻辑段格式如下:BEGIN语句;...END;常用的语句有:
·变量段格式为:VARIABLE变量名:变量类型;...
SUBDESIGNdecode1( a0, a1, b, d: input;out2, out3 : output;)variabletemp : node;begintemp = a0 & !a1;out2 =temp# b;out3 =temp& d;end;temp节点说明寄存器说明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;I forgot …If-then-elsecase-end caseloop-end loop??…???· AHDL模板
IF语句逻辑段子设计段逻辑段真值表语句重新输入
.函数模块及其引用在TDF文件的逻辑段中可以调用基本元件、函数和已设计的模块进行逻辑设计,在调用前,需要对这些基本元件和函数模块进行说明即函数原型说明和变量名定义(变量段)。函数原型说明:函数原型语句和包含语句
包含语句函数原型语句变量名定义74151包含文件包含语句
元件函数(符号)库
函数模块的引用 采用实例说明方式来调用函数模块; 采用内部直接引用方式来调用函数模块。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);直接调用实例说明直接调用函数模块实例说明方式调用函数模块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]);
. AHDL的描述语句
原理图与文本描述的关系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文本inputbidirdfftriA、设计编码器和译码器;B、设计显示译码电路;C、10位移位寄存器设计;D、一个模可变的二进制加法计数器;E、有限状态机设计;F、竞赛抢答器设计;G、数字钟设计;五.数字电路的设计实例
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优先编码器
设计译码器图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;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、设计显示译码器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位移位寄存器设计
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;E、有限状态机设计
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语句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;
本页为「G、数字钟设计」实例页,源文件仅提取到标题,电路结构与AHDL代码以图片形式呈现,建议对照原课件图片补充本页要点说明。
AHDL语言设计小结
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}