EDA技术与应用:第7章 EDA技术的应用_第1页
EDA技术与应用:第7章 EDA技术的应用_第2页
EDA技术与应用:第7章 EDA技术的应用_第3页
EDA技术与应用:第7章 EDA技术的应用_第4页
EDA技术与应用:第7章 EDA技术的应用_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、2022-3-171第7章 EDA技术的应用 本章概要:本章通过用硬件描述语言本章概要:本章通过用硬件描述语言VHDL和和Verilog HDL实现的设计实例,进一步介绍实现的设计实例,进一步介绍EDA技术在组合逻辑、时技术在组合逻辑、时序逻辑电路设计以及在测量仪器、通信系统和自动控制等技序逻辑电路设计以及在测量仪器、通信系统和自动控制等技术领域的综合应用。本章列出的全部术领域的综合应用。本章列出的全部HDL源程序均通过源程序均通过MAX+plusII或或ModelSim工具软件的编译。工具软件的编译。知识要点:知识要点:(1)VHDL的组合逻辑、时序逻辑以及综合应用实例。的组合逻辑、时序逻辑

2、以及综合应用实例。(2)Verilog HDL的组合逻辑、时序逻辑以及综合应用的实的组合逻辑、时序逻辑以及综合应用的实例。例。(3)VHDL和和Verilog HDL实现系统设计的实例。实现系统设计的实例。 2022-3-1727.1 7.1 组合逻辑电路设计应用组合逻辑电路设计应用7.1.1 8 8位乘法器的设计位乘法器的设计8 8位乘法器的元件符号如图位乘法器的元件符号如图8.18.1所示,所示,a7.0a7.0和和b7.0b7.0是被乘数和乘数输入端,是被乘数和乘数输入端,q15.0q15.0是乘积是乘积输出端。输出端。 图图8.1 8位乘法器元件符号位乘法器元件符号2022-3-173

3、用用VHDL描述的描述的8位乘法器源程序如下:位乘法器源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY mul ISPORT(a,b: IN integer range 0 to 255;q: OUT integer range 0 to 65535); END mul; ARCHITECTURE one OF mul IS BEGIN q S S S S S S S S S S S S S S S S S = B0000; END CASE;END PROCESS ;END struc;2022-3-179Verilog HDL描述

4、如下描述如下:Module hcoder(x,y,s);input3:0 x,y;output3:0s;reg3:0s;alwaysbegincase (x,y) 8b11101110:s=0;8b11101101:s=1;8b11101011:s=2;8b11100111:s=3;8b11011110:s=4;2022-3-17108b11011101: s=5;8b11011011: s=6;8b11010111: s=7;8b10111110: s=8;8b10111101: s=9;8b10111011: s=10;8b10110111: s=11;8b01111110: s=12;8

5、b01111101: s=13;8b01111011: s=14;8b01110111: s=15; default :s=0;endcase endendmodule2022-3-17117.1.3 译码器设计译码器设计3线线-8线译码器的元件符号如图线译码器的元件符号如图8.6所示,所示,ENA是译码是译码器的使能控制输入端,当器的使能控制输入端,当ENA=1时,译码器不能工作,时,译码器不能工作,8线线输出输出Y7.0=11111111(译码器的输出有效电平为低电平);(译码器的输出有效电平为低电平);当当ENA=0时,译码器工作。时,译码器工作。C、B、A是是3线数据输入端,译线数据输

6、入端,译码器处于工作状态时,当码器处于工作状态时,当CBA=000时,时,Y7.0=11111110(即(即Y0=0);当);当CBA=001时,时,Y7.0=11111101(即(即Y1=0);依此类推。);依此类推。 图图8.6 3线线-8线译码器的元件符号线译码器的元件符号2022-3-1712用用VHDL描述的源程序如下:描述的源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Decoder ISPORT(a,b,c,ena:IN BIT; y:OUT BIT_VECTOR(7 DOWNTO 0); END Decoder; A

7、RCHITECTURE one OF Decoder ISBEGIN PROCESS(a,b,c,ena)VARIABLE cba:BIT_VECTOR(2 DOWNTO 0); BEGINcba:=(c & b & a); 2022-3-1713IF (ena=1) THEN y y y y y y y y y NULL;END CASE; END IF; END PROCESS; END one; 2022-3-1714用用Verilog HDL描述的描述的3线线-8线译码器源程序如下:线译码器源程序如下:moduledecoder(a,b,c,ena,y);inputa,

8、b,c,ena;output7:0 y;reg7:0y;alwaysbeginif (ena=1) y = b11111111; elsecase (c,b,a) b000: y= b11111110;b001: y= b11111101;2022-3-1715b010: y= b11111011;b011: y= b11110111;b100: y= b11101111;b101: y= b11011111;b110: y= b10111111;b111: y= b01111111; default : y= b11111111; endcaseendendmodule 2022-3-171

9、67.1.4 16选1数据选择器设计数据选择器设计16选选1数据选择器的元件符号如图数据选择器的元件符号如图8.8所示,所示,ENA是使是使能控制输入端,当能控制输入端,当ENA=1时,电路不能工作,输出时,电路不能工作,输出Y=0;ENA=0时,电路处于工作状态。时,电路处于工作状态。A15.0是数据输入端,是数据输入端,S3、S2,S1和和S0是数据选择控制端,当电路处于工作状态时是数据选择控制端,当电路处于工作状态时(ENA=0),若),若S3S2S1S0=0000,则输入,则输入A0被选中,输出被选中,输出Y=A0;若;若S3S2S1S0=0001,则输入,则输入A1被选中,输出被选中

10、,输出Y=A1;依此类推。;依此类推。 图图8.8 16选选1数据选择器元件符号数据选择器元件符号2022-3-1717用用VHDL描述的描述的16选选1数据选择器数据选择器源程序如下:源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux16_1 ISPORT (s0,s1,s2,s3,ena: IN STD_LOGIC; a: IN STD_LOGIC_VECTOR(15 DOWNTO 0); y: OUT STD_LOGIC);END mux16_1;ARCHITECTURE one OF mux16_1 ISSIGNAL s

11、: STD_LOGIC_VECTOR(3 DOWNTO 0); BEGIN s=s0&s1&s2&s3; -将将s0,s1,s2和和s3并为并为s2022-3-1718PROCESS(s0,s1,s2,s3,ena) BEGINIF ena=1 THEN y y y y y y y y y y y y y y y y y y b THEN fa = 1;fb = 0;fe = 0;ELSIF a b THEN fa = 0;fb = 1;fe = 0;ELSIF a = b THEN fa = 0;fb = 0;fe b) begin fa = 1; fb = 0; f

12、e = 0; endelse if (a b) begin fa = 0; fb = 1; fe = 0; endelse if (a = b) begin fa = 0; fb = 0; fe = 1; end endendmodule 2022-3-17267.1.6 ROM的设计的设计对于容量不大的对于容量不大的ROM,可以用,可以用VHDL的的case语句来实现。下语句来实现。下面是用面是用case语句实现语句实现88位位ROM的源程序的源程序 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY from_rom ISPORT(addr :

13、ININTEGER RANGE 0 TO 7;ena: IN STD_LOGIC;q: OUTSTD_LOGIC_VECTOR(7 DOWNTO 0);END from_rom;ARCHITECTURE a OF from_rom IS BEGIN 2022-3-1727PROCESS (ena,addr) BEGINIF (ena=1) THEN q q q q q q q q q=01001000;END CASE;2022-3-1728END IF; END PROCESS ;END a; 由由VHDL源代码生成的源代码生成的88位位ROM的元件符号如图的元件符号如图8.9所示,所示,其

14、中其中ADDR3.0是地址输入端,是地址输入端,ENA是使能控制输入端,当是使能控制输入端,当ENA=1时,时,ROM不能工作,输出不能工作,输出Q7.0为高阻态,为高阻态,ENA=0时,时,ROM工作,其输出的数据由输入地址决定。工作,其输出的数据由输入地址决定。图图8.9 88位位ROM的元件符号的元件符号2022-3-1729用用Veilog HDL实现实现88位位ROM的源程序如下:的源程序如下:module from_rom(addr,ena,q); input 2:0 addr;input ena; output 7:0 q;reg 7:0 q;always (ena or add

15、r)beginif (ena)q = bzzzzzzzz;elsecase (addr) 0:q = b01000001;1:q = b01000010;2022-3-17302:q = b01000011;3:q = b01000100;4:q = b01000101;5:q = b01000110;6:q = b01000111;7:q = b01001000; default :q = bzzzzzzzz; endcase endendmodule 2022-3-1731用例化一个指定工艺的用例化一个指定工艺的ROM来实现来实现ROM的设计的设计2022-3-1732设计步骤:设计步骤:

16、1.从强函数库中调出从强函数库中调出lpm_rom2. 设置设置lpm_rom的参数的参数常见的设置有:常见的设置有:地址位宽地址位宽LPM_WIDTHAD数据位宽数据位宽LPM_WIDTH以及是否使用某些功能引脚以及是否使用某些功能引脚3.设置设置lpm_rom存储数据存储数据新建一个文本文件,按下页的格式(或参考帮助文新建一个文本文件,按下页的格式(或参考帮助文档)编写数据文件,并存为档)编写数据文件,并存为.mif文件。存完后将文件。存完后将lpm_file参数设为该文件。参数设为该文件。2022-3-1733.mif文件DEPTH = 16;% Memory depth and wid

17、th are required%WIDTH = 8;% Enter a decimal number%ADDRESS_RADIX = HEX; % Address and value radixes are optional %DATA_RADIX = HEX;% Enter BIN, DEC, HEX, or OCT; unless% otherwise specified, radixes = HEX%- Specify values for addresses, which can be single address or rangeCONTENTBEGIN0.F:3F;% Range-

18、Every address from 0 to F = 3F %6:F;% Single address-Address 6 = F%8:F E 5;% Range starting from specific address- % % Addr8 = F, Addr9 = E, AddrA = 5%END ;2022-3-1734注:若需要修改ROM的数据,除了通过编辑.mif文件外,也可以通过仿真窗口的菜单来修改。(要求事先通过编译才能使用此菜单)2022-3-17357.2 时序逻辑电路设计应用时序逻辑电路设计应用 7.2.1 JK触发器设计触发器设计JK触发器的元件符号如图触发器的元件

19、符号如图8.14所示,其中所示,其中J、K是数据输入端,是数据输入端,CLR是复位控制输入端,当是复位控制输入端,当CLR=0时,触发器的状态被置为时,触发器的状态被置为0态;态;CLKCLK是时钟输入端;是时钟输入端;Q Q和和QNQN是触发器的两个互补输出端。是触发器的两个互补输出端。 图图8.14 JK触发器的元件符号触发器的元件符号2022-3-1736用用VHDL描述的描述的JK触发器源程序如下:触发器源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY myjkff ISPORT(j,k,clr:IN STD_LOGIC; c

20、lk:IN STD_LOGIC; q,qn:BUFFER STD_LOGIC);END myjkff;ARCHITECTURE one OF myjkff ISBEGINPROCESS(j,k,clr,clk) VARIABLE jk:STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN2022-3-1737jk:=(j & k); IF clr=0 THEN q=0;qn q =q; qn q = 0; qn q = 1;qn q = NOT q;qn NULL;END CASE ; END IF;END PROCESS;END one; 2022-3-1738用用

21、Verilog HDL描述的描述的JK触发器源程序如下:触发器源程序如下:module myjkff(j,k,clr,clk,q,qn); input j,k,clr,clk;output q,qn; reg q,qn;always (negedge clr or negedge clk) beginif (clr)begin q = 0; qn = 1; endelse case (j,k)b00: begin q = q; qn = qn; endb01: begin q = 0; qn = 1; end2022-3-1739b10: begin q = 1; qn = 0; endb11

22、: begin q = q; qn = qn; enddefault begin q = 0; qn = 1;end endcase endendmodule 2022-3-17407.2.2 8D锁存器设计锁存器设计具有三态输出的具有三态输出的8D锁存器元件符号如图锁存器元件符号如图8.16所示。所示。CLR是复是复位控制输入端,当位控制输入端,当CLR=0时,时,8位数据输出位数据输出Q7.0=00000000。ENA是使能控制输入端,当是使能控制输入端,当ENA=1时,时,锁存器处于工作状态,输出锁存器处于工作状态,输出Q7.0D7.0;ENA=0时,锁时,锁存器的状态保持不变。存器的状

23、态保持不变。OE是三态输出控制端,当是三态输出控制端,当OE=1时,时,输出为高阻态输出为高阻态;OE=0时,锁存器为正常输出状态。时,锁存器为正常输出状态。 图图8.16 8D锁存器元件符号锁存器元件符号2022-3-1741用用VHDL描述的描述的8D锁存器源程序如下:锁存器源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY latch8 ISPORT(clr,clk,ena,oe:IN STD_LOGIC; d:IN STD_LOGIC_VECTOR(7 DOWNTO 0); q:BUFFER STD_LOGIC_VECTOR(7

24、 DOWNTO 0);END latch8;ARCHITECTURE one OF latch8 ISSIGNAL q_temp:STD_LOGIC_VECTOR(7 DOWNTO 0); BEGIN 2022-3-1742u1:PROCESS(clk,clr,ena,oe) BEGINIF clr=0 THEN q_temp = 00000000; ELSIF clkEVENT AND clk=1 THENIF (ena=1) THEN q_temp = d;END IF; END IF; IF oe=1 THEN q = ZZZZZZZZ; ELSE q = q_temp; END IF;

25、 END PROCESS u1;END one; 2022-3-1743用用Verilog HDL描述三态输出描述三态输出8D锁存器的源程序如下:锁存器的源程序如下:module latch8v(clk,clr,ena,oe,q,d); input 7:0 d; input clk,clr,ena,oe; output 7:0 q; reg 7:0 q,q_temp;always (posedge clk)beginif (clr)q_temp = 0;else if (ena) q_temp = d;else q_temp = q; if (oe) q = 8bzzzzzzzz; else

26、q = q_temp; endendmodule 2022-3-17447.2.3 8位双向移位寄存器设计位双向移位寄存器设计8位双向移位寄存器电路的元件符号如图位双向移位寄存器电路的元件符号如图8.18所示,其中所示,其中CLR是复位控制输入端是复位控制输入端;LOD是预置控制输入端是预置控制输入端;S是移位方向控是移位方向控制输入端,当制输入端,当S=1时,是右移移位寄存器,时,是右移移位寄存器,S=0时,是左移移时,是左移移位寄存器;位寄存器;DIR是右移串入输入信号;是右移串入输入信号;DIL是左移串入输入信是左移串入输入信号。号。 图图8.18 8位双向移位寄存器元件符号位双向移位寄

27、存器元件符号2022-3-1745用用VHDL描述的描述的8位双向移位寄存器源程序如下:位双向移位寄存器源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY rlshift ISPORT(clr,lod,clk,s,dir,dil:IN BIT; d:IN BIT_VECTOR(7 DOWNTO 0); q:BUFFER BIT_VECTOR(7 DOWNTO 0);END rlshift;ARCHITECTURE one OF rlshift IS SIGNAL q_temp:BIT_VECTOR(7 DOWNTO 0); BEGIN

28、PROCESS(clr,clk,lod,s,dir,dil) BEGIN2022-3-1746IF clr=0 THEN q_temp = 00000000;ELSIF clkEVENT AND clk=1 THENIF (lod=1) THEN q_temp = d; ELSIF (S=1) THEN FOR i IN 7 downto 1 LOOP -实现右移操作实现右移操作 q_temp(i-1) = q(i); END LOOP ; q_temp(7) = dir;ELSE 2022-3-1747 FOR i IN 0 TO 6 LOOP -实现左移操作实现左移操作 q_temp(i+

29、1) = q(i); END LOOP ; q_temp(0) = dil;END IF; END IF; q 1;-实现右移操作实现右移操作 q7 = dir; end2022-3-1749else begin q = q 1;-实现左移操作实现左移操作 q0 = dil; end endendmodule 2022-3-17507.2.4 8位二进制加减计数器设计8位二进制加减计数器的元件符号如图位二进制加减计数器的元件符号如图8.20所示,所示,CLR是复位是复位控制输入端控制输入端;ENA是使能控制输入端;是使能控制输入端;LOAD是预置控制输入是预置控制输入端端;D7.0是是8位并行

30、数据输入端;位并行数据输入端;UPDOWN是加减控制输是加减控制输入端,当入端,当UPDOWN=0时,计数器作加法操作,时,计数器作加法操作,UPDOWN=1时,计数器作减法操作;时,计数器作减法操作;COUT是进是进/借位输出端。借位输出端。 图图8.20 8位二进制加减计数器元件符号位二进制加减计数器元件符号2022-3-1751用用VHDL描述的描述的8位二进制加减计数器源程序如下:位二进制加减计数器源程序如下:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY updowncnt8 ISPORT(clr,clk,ena,load,updown

31、:IN STD_LOGIC; d:IN INTEGER RANGE 0 TO 255;cout:OUT STD_LOGIC;q:BUFFER INTEGER RANGE 0 TO 255);END updowncnt8;ARCHITECTURE one OF updowncnt8 ISBEGIN PROCESS(clk,ena,clr,d,load,updown)2022-3-1752BEGIN IF CLR=0 THENq = 0; ELSIF clkEVENT AND clk=1 THENIF load = 1 THEN q = d;ELSIF ena=1 THEN IF updown = 0 THEN q = q+1;IF q = 254 THEN COUT = 1;else cout=0;END IF; ELSE q = q-1;IF q = 1THEN C

温馨提示

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

评论

0/150

提交评论