完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
【例3-1】 2选1多路选择器程序。 (P31) LIBRARY IEEE; --IEEE库使用说明语句 USE IEEE.STD_LOGIC_1164.ALL; ENtiTY mux21 IS --实体说明部分 PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END ENTITY mux21; ARCHITECTURE mux21a OF mux21 IS --结构体说明部分 BEGIN PROCESS(a,b,s) BEGIN IF s='0' THEN y<=a; ELSE y<=b; END IF; END PROCESS; END ARCHITECTURE mux21a; 【例3-2】 有类属说明的2输入与非门的实体描述。 (P33) ENTITY nand2 IS GENERIC ( t_rise : TIME := 2ns ; t_fall : TIME := 1ns ) PORT( a: IN BIT; b : IN BIT; s : OUT BIT); END ENTITY nand2; 【例3-3】 n输入与非门的实体描述: (P33) ENTITY nand_n IS GENERIC ( n : INTEGER ) ; PORT( a : IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); s : OUT STD_LOGIC ); END ENTITY nand_n; 例3-4】 半加器的完整VHDL描述,其中x、y为加数与被加数,s为和信号,c为进位信号。 (P36) ENTITY half_adder IS PORT( x,y : IN BIT; s: IN BIT; c: OUT BIT); END ENTITY half_adder; ARCHITECTURE dataflow OF half_adder IS BEGIN s <= x XOR y; c <= x AND y; END ARCHITECTURE dataflow; 【例3-5】 2选1多路选择器的行为描述程序。 (P37) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END ENTITY mux21; ARCHITECTURE behav OF mux21 IS BEGIN PROCESS(a,b,s) BEGIN IF s='0' THEN y<=a; ELSE y<=b; END IF; END PROCESS; END ARCHITECTURE behav; 【例3-6】 2选1多路选择器数据流描述程序。 (P36) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END ENTITY mux21; ARCHITECTURE dataflow OF mux21 IS BEGIN y<=(a AND (NOT s)) OR (b AND s); END ARCHITECTURE dataflow; 【例3-7】 2选1多路选择器结构描述程序。 (P37) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY and21 IS PORT(i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC ); END ENTITY and21; ARCHITECTURE one OF and21 IS BEGIN q<=i0 AND i1; END ARCHITECTURE one; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY or21 IS PORT(i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC ); END ENTITY or21; ARCHITECTURE one OF or21 IS BEGIN q<=i0 OR i1; END ARCHITECTURE one; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY inv21 IS PORT(i0 : IN STD_LOGIC; q: OUT STD_LOGIC ); END ENTITY inv21; ARCHITECTURE one OF inv21 IS BEGIN q<= (NOT i0); END ARCHITECTURE one; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux21 IS PORT( a,b : IN STD_LOGIC; s: IN STD_LOGIC; y: OUT STD_LOGIC ); END ENTITY mux21; ARCHITECTURE struct OF mux21 IS COMPONENT and21 PORT (i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC); END COMPONENT; COMPONENT or21 PORT (i0,i1 : IN STD_LOGIC; q: OUT STD_LOGIC); END COMPONENT; COMPONENT inv21 PORT (i0: IN STD_LOGIC; q: OUT STD_LOGIC); END COMPONENT; SIGNAL tmp1,tmp2,tmp3:STD_LOGIC; BEGIN u1: and21 PORT MAP (b, s,tmp1); u2: inv21 PORT MAP(s,tmp2); u3: and21 PORT MAP (a,tmp2,tmp3); u4: or21 PORT MAP(tmp1,tmp3,y); END ARCHITECTURE struct; 【例3-8】 半加器的混合描述程序。 (P37) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY xor21 IS PORT(i0,i1:IN STD_LOGIC; q: OUT STD_LOGIC); END ENTITY xor21; ARCHITECTURE behav OF xor21 IS BEGIN q<=i0 XOR i1; END ARCHITECTURE behav; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY half_adder IS PORT(a,b:IN STD_LOGIC; c,s: OUT STD_LOGIC); END ENTITY half_adder; ARCHITECTURE mix OF half_adder IS COMPONENT xor21 IS PORT(i0,i1:IN STD_LOGIC; q:OUT STD_LOGIC); END COMPONENT; BEGIN c <= a AND b; u1: xor21 PORT MAP(a,b,s); END ARCHITECTURE mix; 【例3-9】 打开一个字符文件,读出文件中的内容并关闭文件。 (P51) LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY readfile IS PORT( cs:IN STD_LOGIC; c: OUT CHARACTER); END ENTITY readfile; ARCHITECTURE read1 OF readfile IS BEGIN PROCESS(cs) TYPE char_file IS FILE OF CHARACTER; FILE cfile : char_file; VARIABLE i : INTEGER :=0; BEGIN IF(cs='1') THEN FILE_OPEN(cfile,"f:/leifr/testfile.asc",READ_MODE); WHILE NOT ENDFILE(cfile) LOOP READ(cfile,c); i := i+1; END LOOP; FILE_CLOSE(cfile); ELSE c<= '- '; END IF; END PROCESS; END ARCHITECTURE read1; 【例4-1】 WAIT语句示例程序。 (P65) cwait1 : PROCESS BEGIN y <= ( a AND b ) OR ( m XOR t ) ; z <= c NAND d ; WAIT ; -- 无限等待 END PROCESS cwait1 ; 【例4-2】 WAIT FOR语句示例程序。 (65) cwait2 : PROCESS BEGIN y <= ( a AND b ) OR ( m XOR t ) ; z <= c NAND d ; WAIT FOR 10 * ( ct1 + ct2 ) ; -- 等待由该表达式计算的时间 END PROCESS cwait2 ; 【例4-3】 WAIT ON语句示例程序(二选一选择器)。 (P66) LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY mux2_1 IS PORT( data0, data1 : IN STD_LOGIC ; sel : IN STD_LOGIC ; q : OUT STD_LOGIC ) ; END mux2_1 ; ARCHITECTURE behavioral OF mux2_1 IS SIGNAL temp1, temp2, temp3 : STD_LOGIC ; BEGIN cwait3 : PROCESS BEGIN temp1 <= data0 AND sel ; temp2 <= data1 AND ( NOT sel ) ; temp3 <= temp1 OR temp2 ; q <= temp3 ; WAIT ON data0, data1, q ; END PROCESS cwait3 ; END behavioral ; 【例4-4】 WAIT ON语句和PROCESS语句中所使用的敏感信号列表的对比。 (P67) ARCHITECTURE behavioral OF mux2_1 IS SIGNAL temp1, temp2, temp3 : STD_LOGIC ; BEGIN cwait4 : PROCESS ( data0, data1, q ) BEGIN temp1 <= data0 AND sel ; temp2 <= data1 AND ( NOT sel ) ; temp3 <= temp1 OR temp2 ; q <= temp3 ; END PROCESS cwait4 ; END behavioral ; 【例4-5】 WAIT UNTIL语句示例程序。 (P67) ARCHITECTURE behavioral OF example_waituntil IS SIGNAL temp : INTEGER ; BEGIN cwait5 : PROCESS BEGIN M WAIT UNTIL ( ( temp + 5 ) >= 20 ) ; -- 该表达式是布尔表达式 END PROCESS cwait5 ; END behavioral ; 【例4-6】 多条件WAIT语句的示例程序。 (P68) cwait6 : PROCESS BEGIN M -- 多条件WAIT语句 WAIT ON data0, data1,q UNTIL((temp + 5 ) >= 20) FOR 34 ns ; END PROCESS cwait6 ; 【例4-7】 信号代入语句示例程序。 (P68) ARCHITECTURE behavioral OF example_dairu IS SIGNAL a, b, c, d,e, f : STD_LOGIC ; SIGNAL temp0, temp1, temp2, temp3, temp4, temp5 : STD_LOGIC ; BEGIN cdairu : PROCESS BEGIN temp0 <= a NAND b ; -- 与非 temp1 <= c NOR d ; -- 或非 temp2 <= e XOR f AFTER 5 ns ; -- 异或门延迟 temp3 <= ( a NAND b ) NOR ( c NAND d ) ; temp4 <= ( c OR d ) NAND ( e OR f ) ; temp5 <= a XOR b XOR c XOR d XOR e XOR f ; END PROCESS cdairu ; END behavioral ; 【例4-8】 变量赋值语句示例程序。 (P69) ARCHITECTURE behavioral OF example_fuzhi IS CONSTANT cvolt : REAL : = 3.3 ; -- 定义常数 CONSTANT ccurrent : REAL : = 4.0 ; VARIABLE temp0, temp1 : REAL ; -- 定义变量 VARIABLE temp2, temp3 : INTEGER RANGE 0 TO 255 : = 10 ; VARIABLE temp4 : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ; VARIABLE temp5 : STD_LOGIC ; SIGNAL a : STD_LOGIC ; -- 定义信号 SIGNAL b : REAL ; SIGNAL c : INTEGER ; SIGNAL d : STD_LOGIC_VECTOR ( 3 DOWNTO 0 ) ; BEGIN cfuzhi : PROCESS BEGIN temp0 : = cvolt ; -- 变量直接赋值 temp1 : = ( cvolt + 1.8 ) * ccurrent ; -- 变量表达式赋值 temp2 : = c + 78 ; temp3 : = c / 5 ; -- 此时c必须是5的倍数 temp4 : = d ; temp5 : = temp4 ( 2 ) ; END PROCESS cfuzhi ; END behavioral ; 【例4-9】 变量赋值和信号量代入的对比示例程序。 (P69) ARCHITECTURE behavioral OF example_duibi IS SIGNAL d0, d1, d2, d3 : STD_LOGIC ; -- 定义信号 SIGNAL q0, q1 : STD_LOGIC ; BEGIN cduibi_1 :PROCESS (d0, d1, d2, d3 ) BEGIN d2 <= d0 ; -- 信号量代入 q0 <= d2 OR d3 ; d2 <= d1 ; -- 信号量代入 q1 <= d2 OR d3 ; END PROCESS cduibi_1 ; cduibi_2 : PROCESS (d0, d1, d3 ) VARIABLE m2 : STD_LOGIC ; BEGIN m2 : = d0 ; -- 变量赋值 q0 <= m2 OR d3 ; m2 : = d1 ; -- 变量赋值 q1 <= m2 OR d3 ; END PROCESS cduibi_2 ; END behavioral ; 进程cduibi_1的运行结果: q0 = d1 OR d3 并且 q1 = d1 OR d3 进程cduibi_2的运行结果: q0 = d0 OR d3 而 q1 = d1 OR d3 【例4-10】 采用单IF语句来描述D触发器的示例程序。 (P71) LIBRARY IEEE ; USE IEEE.STD_LOGIC_1164.ALL ; ENTITY cdff1 IS PORT( d : IN STD_LOGIC ; clk : IN STD_LOGIC ; q : OUT STD_LOGIC ; qnot : OUT STD_LOGIC ) ; END cdff1 ; ARCHITECTURE dataflow OF cdff1 IS BEGIN cdff_example : PROCESS ( clk ) BEGIN IF ( clk'EVENT AND clk = '1' ) THEN -- 单IF语句 q <= d ; qnot <= NOT d ; END IF ; END PROCESS cdff_example ; END dataflow ; |
|
相关推荐
2个回答
|
|
EP4CE6E22C8N
http://redirect.simba.taobao.com/rd?w=unionnojs&f=http%3A%2F%2Fre.taobao.com%2Feauction%3Fe%3DgoZkOBVPhbvebLdhAWchHDLwfTWbGSOTvDQl%252FsD9dZuLltG5xFicOSZqewpHPyZzWFp1PMcy6Qyfhi%252BjTOUzNfRHn82V7C%252B01UGFCTlGxNeB3ujUJI0OeA%253D%253D%26ptype%3D100010&k=e2e107a2b72ca1b1&c=un&b=alimm_0&p=mm_51454259_5300107_15952998 |
|
|
|
菜鸟学习了,
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
1586 浏览 1 评论
1351 浏览 0 评论
矩阵4x4个按键,如何把识别结果按编号01-16(十进制)显示在两个七段数码管上?
1563 浏览 0 评论
930 浏览 0 评论
2361 浏览 0 评论
1474 浏览 37 评论
5684 浏览 113 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-27 01:38 , Processed in 0.715388 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号