EDA技术实用教程第8章VHDL设计深入第8章VHDL设计深入8.1、数据对象?8.2、含高阻输出的电路设计?8.3、顺序 语句8.4、并行赋值语句讨论8.5、IF语句概述8.6、仿真延时8.7、VHDL的描述风格8.2含高阻输出的电路设计8.2. 1三态门设计【例8-8】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYtr i_sISport(enable:INSTD_LOGIC;datain:INSTD_LOGIC_VE CTOR(7DOWNTO0);dataout:OUTSTD_LOGIC_VECTOR(7DOWNTO0));EN Dtri_s;ARCHITECTUREbhvOFtri_sISBEGINPROCESS(enable,datain) BEGINIFenable=''1''THENdataout<=datain;ELSEdataout<=" ZZZZZZZZ";ENDIF;ENDPROCESS;ENDbhv;8.2含高阻输出的电路设计8.2.1三态 门设计8.2含高阻输出的电路设计8.2.1三态门设计8位3态控制门电路8.2含高阻输出的电路设计8.2.2 双向端口设计【例8-9】libraryieee;useieee.std_logic_1164.all;entitytri_ stateisport(control:instd_logic;in1:instd_logic_vector(7 downto0);q:inoutstd_logic_vector(7downto0);x:outstd_lo gic_vector(7downto0));endtri_state;architecturebody_trioftr i_stateisbeginprocess(control,q,in1)beginif(control=''0'')then x<=q;elseq<=in1;x<="ZZZZZZZZ";endif;endproce ss;endbody_tri;8.2含高阻输出的电路设计8.2.2双向端口设计【例8-10】(以上部分同上例)pr ocess(control,q,in1)beginif(control=''0'')thenx<=q;q<="ZZ ZZZZZZ";elseq<=in1;x<="ZZZZZZZZ“;endif;endprocess;endbo dy_tri;8.2含高阻输出的电路设计8.2.2双向端口设计例8-9的RTL原理图8.2含高阻输出的电路设计 8.2.2双向端口设计例8-10的综合结果8.2.3三态总线电路设计【例8-11】LIBRARYIEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITYtristate2ISport(input3,input2 ,input1,input0:INSTD_LOGIC_VECTOR(7DOWNTO0);enable:IN STD_LOGIC_VECTOR(1DOWNTO0);output:OUTSTD_LOGIC_VECTOR(7D OWNTO0));ENDtristate2;ARCHITECTUREmultiple_driversOFtrista te2ISBEGINPROCESS(enable,input3,input2,input1,input0)BEGIN IFenable="00"THENoutput<=input3;ELSEoutput<=(OTHERS= >''Z'');ENDIF;IFenable="01"THENoutput<=input2;ELSE output<=(OTHERS=>''Z'');ENDIF;(接下页)8.2.3三态总线电路设计(接上页)IF enable="10"THENoutput<=input1;ELSEoutput<=(OTHERS=>'' Z'');ENDIF;IFenable="11"THENoutput<=input0;ELSEout put<=(OTHERS=>''Z'');ENDIF;ENDPROCESS;ENDmultiple_drivers; 8.2含高阻输出的电路设计8.2.2双向端口设计例8-11错误的综合结果8.2含高阻输出的电路设计8.2.2 双向端口设计【例8-12】(注:MaxplusII不支持本例)libraryieee;useieee.std_logic_ 1164.all;entitytri2isport(ctl:instd_logic_vector(1downto 0);datain1,datain2,datain3,datain4:instd_logic_vector(7dow nto0);q:outstd_logic_vector(7downto0));endtri2;archite cturebody_trioftri2isbeginq<=datain1whenctl="00"else (others=>''Z'');q<=datain2whenctl="01"else(others=>''Z '');q<=datain3whenctl="10"else(others=>''Z'');q<=datain4whenctl="11"else(others=>''Z'');endbody_tri;8.2.2双向端口设计例8-12正确的综合结果 |
|