1、组合逻辑电路设计案例 目录 1 简单门电路 3 三态门及总线缓冲器 6 转换器 8 并置运算器 9 奇偶校验器 11 加法器 12 选择器 18 编译码器 二输入与门 1程序: ENTITY and2 IS PORT (a,b:IN BIT; 4-1 例:出处4.1.1 c:OUT BIT); :注意代入语句使用时与知识点 END ENTITY and2;实际电路工作情况保持一致,延ARCHITECTURE and2_behav OF and2 IS 时是必须要考虑的因素。 BEGIN c=a AND b AFTER 5ns;END ARCHITECTURE and2_behav; :2程序
2、ENTITY and2 IS 1 GENERIC (rise,fall:TIME); PORT (a,b: IN BIT; 4-4 4.1.4 例出处:c: OUT BIT) 语句常用于:GENERIC知识点END ENTITY and2; 不同层次之间点的信息传递,该ARCHITECTURE behav OF and2 IS 语句分别对例中使用GENERICSIGNAL internal:BIT; 信号的上升时间和下降时间进BEGIN 行了定义。internal=a AND b; WHEN internal=1 ELSE cyyyy=X; END CASE; END PROCESS t1;E
3、ND ARCHITECTURE nand2_2; 2 三态门电路 数据输出 数据输入 控制输入 dout din en Z 0 X 0 0 1 1 1 1 程序1: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_gate IS IN STD_LOGIC; PORT (din, en: OUT STD_LOGIC); dout: END ENTITY tri_gate;出7.1.47-15 ARCHITECTURE zas OF tri_gate IS 知识点:利用IF语句的多选择分BEGIN 支功能描述三态门,注意输入、tri_ga
4、te1:PROCESS (din, en)IS 输出间的控制关系。 BEGIN IF (en=1) THEN dout=din; ELSE dout=Z; END IF; END PROCESS; END ARCHITECTURE zas; :程序2 ARCHITECTURE blk OF tri_gate IS 出处:7.1.4 例7-16 BEGIN 知识点:使用卫式BLOCK结构tri_gate2:BLOCK (en=1) 描述,注意条件的设立。 BEGIN dout=GUARDED din; END BLOCK; END ARCHITECTURE blk; 3 八位单向总线缓冲器 1:
5、程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_buf8 IS PORT (din: IN STD_LOGIC_VECTOR (7 DOWNTO 0) ; dout: OUT STD_LOGIC_VECTOR (7 DOWNTO 0); en:IN STD_LOGIC); END ENTITY tri_buf8; ARCHITECTURE zas OF tri_buf8 IS BEGIN tri_buff: PROCESS (en, din)IS 7-15 7.1.4 例出处:BEGIN IF知识点:采用进程结构,使用IF (en
6、=1 ) THEN 语句描述器件逻辑功能。dout=din; ELSE dout=ZZZZZZZZ; END IF END PROCESS; END ARCHITECTURE zas; 双向总线缓冲器 4 程序1: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY tri_bigate IS PORT (a, b: INOUT STD_LOGIC_VECTOR (7 DOWNTO 0); en: IN STD_LOGIC; dr: IN STD_LOGIC); END ENTITY tri_bigate; ARCHITECTURE rtl OF
7、 tri_bigate SIGNAL aout, bout:STD_LOGIC_VECTOR (7 DOWNTO 0); BEGIN PROCESS (a, dr, en)IS BEGIN IF (en=0) AND (dr=1) THEN bout=a; 7-23 7.1.4 例出处:ELSE :使用两个进程语句分别知识点bout=ZZZZZZZZ; 对两个方向上的数据传输进行END IF; 描述。b=bout; END PROCESS;PROCESS (b, dr, en)IS BEGIN IF (en=0) AND (dr=0) THEN aout=b; ELSE aout=ZZZZZZ
8、ZZ; END IF; a=aout; END PROCESS; END ARCHITECTURE rtl; 5 位矢量/整数转换器 x_flag z(i) q 程序1: PROCEDURE vector_to_int (z:IN STD_LOGIC_VECTOR; x_f1ag: OUT BOOLEAN; 2-7 例出处:2.2.3 q: INOUT INTEGER) IS 构造体采用子程序语句结知识点:BEGIN ,PROCEDURE)构的过程语句(q:=0; 掌握语句的书写格式即使用方法。x_f1ag:=FALSE; FOR i IN zRANGE LOOP q:=q*2; IF(z(i
9、)=1) THEN q:=q+1; ELSIF(z(i)/=0) THEN x_f1ag:=TRUE; END IF END LOOP; END PROCEDURE vector_to_int; /整数转换器标准逻辑矢量 1:程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY add5 ISPORT (num:IN STD_LOGIC_VECTOR (2 DOWNTO 0); ); END ENTITY add5; 3-1 3.2.4 例:出处 ARCHITECTURE rtl
10、 OF add5 IS:程序中使用了转换函知识点SIGNAL in_num:INTEGER RANGE 0 TO 5; 语言中常用的转掌握数,VHDL 换函数的使用方法和所在的包 集合。 6 BEGIN in_num=CONV_INTEGER (num); END ARCHITECTURE rtl; 7 并置运算器 程序1: 3.3.4 出处: :注意位并置符的使用方知识点 tmp_b=b AND (en&en)&;en&en 法和使用时的注意事项。 ;& y=a tmp_b 8 八位奇偶校验电路 a(0) a(1) a(2) a(3) y a(4) a(5) a(6) a(7) :程序1LI
11、BRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY parity_check IS PORT(a: IN STD_LOGIC_VECTOR(7 DOWNTO 0); y: OUT STD_LOGIC); END ENTITY parity_check; ARCHITECTURE rtl OF parity_check IS BEGIN PROCESS(a) IS ARIABLE tmp: STD_LOGIC; V 5-13 5.1.7 例出处:BEGIN 语句的书写LOOP注意知识点:tmp:=0; 格式及使用。FOR i IN 0 TO 7 LOO
12、P tmp:=tmp XOR a(i); END LOOP; y=tmp; END PROCESS; END ARCHITECTURE rtl; :程序2 LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; ENTITY parity_check IS PORT(a: IN STD_LOGIC_VECTOR(7 DOWNTO 0); y: OUT STD_LOGIC); parity_check; END ENTITY ARCHITECTURE behav OF parity_check IS BEGIN PROCESS(a) IS ARIABLE tmp: S
13、TD_LOGIC; V 9 BEGIN tmp:= 0; i:=0; 5-14 例:5.1.7 出处WHILE (i8) LOOP 条件的WHILE知识点:使用带tmp:=tmp XOR a(i); 语句描述八位奇偶校验电LOOPi:=i+1; 路的逻辑功能。END LOOP; y=tmp; END PROCESS; END ARCHITECTURE behav; 10 加法器 1:程序LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY full_adder IS IN STD_LOGIC; PORT (a, b, cin: OUT STD_LO
14、GIC); s, co: END ENTITY full_adder; ARCHITECTURE full1 OF full_adder IS 出处:7.1.3 例7-15 COMPONENT half_adder IS 知识点:采用COMPONENT语IN STD_LOGIC; PORT (a, b句PORTMA语句调用已定OUT STD_LOGIC); s, co:义原件半加half_adde描述全END COMPONENT; 加器 SIGNAL u0_co, u0_s, u1_co:STD_LOGIC; BEGIN u0:half_adder PORT MAP (a, b, u0_s,
15、u0_co); u1:half_adder PORT MAP (u0_s, cin, s, u1_co); co=u0_co OR u1_co; END ARCHITECTURE full1; 半加器LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS IN STD_LOGIC; PORT (a, b: OUT STD_LOGIC); s, co: END ENTITY half_adder; ARCHITECTURE half1 OF half_adder IS SIGNAL c, d:STD_LOGIC; BEGIN
16、 c=a OR b; d=a NAND b; co=NOT d; s=c AND d; END ARCHITECTURE half1; 11 二选一选择器 :程序1 ENTITY mux IS 1.2 出处: GENERIC(m:TIME: =1ns);:理解硬件描述语言能知识点 IN BIT;PORT (d0, d1比电原理图更有效的表示硬件 ; sel:IN BIT 电路的特性。 OUT BIT) q:; END ENTITY mux; ARCHITECTURE connect OF mux IS BEGIN PROCESS(d0,d1,sel)IS 2.1 :出处ARIBLE temp1
17、,temp2,temp3:BIT; VVHDL知识点:作为一个完整的BEGIN 程序出现,掌握程序框架的结temp1:=d0 AND sel; 构;实体与构造体的书写格式;temp2:=d1 AND (NOTsel); 各项参数的含义。temp3:=temp1 OR temp2; q=temp3 AFTER m;END PROCESS END ARCHITECTURE connect; :(与程序1的描述方式一致,但对原件逻辑功能的描述更简单)2程序 ENTITY mux IS IN BIT; PORT (d0, d1: sel:IN BIT; 2-3 例出处:2.1.2 q :OUT BIT
18、); :构造体内部语句采用并知识点 ;END ENTITY mux 与行处理方式,即介于BEGIN ARCHITECTURE dataflow OF mux IS之间的语句将会被同时执END BEGIN 行。 12 q=(d0 AND sel)OR(NOT sel AND d1); END ARCHITECTURE dataflow; 程序3: ENTITY mux IS PORT(d0,d1,sel: IN BIT; q: OUT BIT); END ENTITY mux; ARCHITECTURE connect OF mux IS SIGNAL tmp1,tmp2,tmp3: BIT;
19、BEGIN 出处:2.2.1 例2-4 cale:BLOCK 知识点:构造体采用BLOCK结BEGIN 构,掌握块语句结构的书写格式tmp1=d0 AND sel; 及使用方法。 tmp2=d1 AND (NOT sel); tmp3=tmp1 OR tmp2; q=tmp3; END BLOCK cale; END ARCHITECTURE connect; 4:程序ENTITY mux IS sel: IN BIT; d1, PORT(d0, q: OUT BIT); END ENTITY mux; ARCHITECTURE connect OF mux IS BEGIN sel) IS
20、d1, cale: PROCESS(d0, 出处:2.2.2 例2-6 tmp3: BIT; tmp2, VARIABLE tmp1,知识点:构造体采用进程语句结BEGIN 构,掌握进程(PROCESS)语句tmp1:=d0 AND sel; 结构的书写格式及使用方法。 tmp2:=d1 AND (NOT sel); tmp3:=tmp1 OR tmp2; q=tmp3 ; END PROCESS cale; END ARCHITECTURE connect; 程序:5ENTITY mux2 IS sel:IN BIT; d1,PORT (d0, q:OUT BIT); END ENTITY
21、mux2; ARCHITECTURE struct OF mux2 IS COMPONENT and2 IS 13 IN BIT; b: PORT (a, c: OUT BIT); END COMPONENT; COMPONENT or2 IS PORT (a, b:IN BIT; c:OUT BIT); END COMPONENT; 出处:4.3.1 例4-16 COMPONENT inv IS 知识点:二选一电路采用结构化PORT (a:IN BIT; 的方式描述构造体,使用了c:OUT BIT); COMPONENT语句和PORT END COMPONENT; MAP语句,属于最底层的描
22、述方SIGNAL aa,ab,nsel:BIT; 式,与实际电路最贴近。 BEGIN PORT MAP (sel,nsel); u1:inv u2:and2 PORT MAP (nsel,d1,ab); u3:and2 PORT MAP (d0,sel,aa); PORT MAP (aa,ab,q); u4:or2 END ARCHITECTURE struct; 程序6: ARCHITECTURE rtl OF mux2 IS BEGINPROCESS (a, b, sel) IS BEGIN 出5.1.55-7 IF (sel=1) THEN 知识点:利用IF语句的二选择控c=a; 制功能
23、对二选一电路的逻辑控 ELSE 制进行描述。 c=b; END IF; END PROCESS;END ARCHITECTURE rtl; 14 四选一选择器 :程序1LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY mux4 IS PORT (i0,i1,i2,i3,a,b:IN STD_LOGIC; q:OUT STD_LOGIC); END ENTITY mux4; ARCHITECTURE behav OF mux4 IS SIGNAL sel:INTEGER; BEGI
24、N WITH sel SELECT q=i0 AFTER 10ns WHEN 0, 5-18 例:5.2.4 出处i1 AFTER 10ns WHEN 1, :注意选择信号代入语句知识点i2 AFTER 10ns WHEN 2, 的使用。条件并行执行,不具有i3 AFTER 10ns WHEN 3, 优先级。 X AFTER 10ns WHEN OTHERS; sel=0 WHEN a=0 AND b=0 ELSE 4-2 4.1.1 :例出处1 WHEN a=1 AND b=0 ELSE :注意条件代入语句的使知识点2 WHEN a=0 AND b=1 ELSE 用。3 WHEN a=1 AND b=1 ELSE 4; END ARCHITECTURE behav; 2程序: 15 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNS