第三章 基本电路的VHDL模型._第1页
第三章 基本电路的VHDL模型._第2页
第三章 基本电路的VHDL模型._第3页
第三章 基本电路的VHDL模型._第4页
第三章 基本电路的VHDL模型._第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第 三三 章章2基本逻辑电路:基本逻辑电路:33.9.1 组合逻辑电路设计组合逻辑电路设计Library ieee;Use ieee.std_logic_1164.all;Entity gate is port(a,b:in std_logic; y:out std_logic);End gate;Architecture behave of gate is Begin Y=a AND b;End behave;4 architecture behavior of priority is begin vec = “111” when y7 = 1 else “110” when y6 =

2、1 else “101” when y5 = 1 else “100” when y4 = 1 else “011” when y3 = 1 else “010” when y2 = 1 else “001” when y1 = 1 else “000” when y0 = 1 else “XXX”; end behavior;方法方法3 3:利用:利用条件赋值语句条件赋值语句 5sel=000Y=00000001sel =001Y=00000010sel =010Y=00000100sel =011Y=00001000sel =100Y=00010000sel =101Y=00100000s

3、el =110Y=01000000sel =111Y=10000000译码器是编码器的逆过程。如译码器是编码器的逆过程。如 3-8 译码器:译码器:6方法方法1:使用:使用SLL逻辑左移运算符逻辑左移运算符 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decoder is port(inp : in std_logic_vector(2 downto 0); outp : out std_logic_vector(7 downto 0); end decoder; arch

4、itecture rtl of decoder is begin outp=“00000001” sll(conv_integer(inp); end rtl;7方法方法2 2:使用:使用processprocess语句语句 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity decoder is port(inp : in std_logic_vector(2 downto 0); outp : out std_logic_vector(7 downto 0); end deco

5、der; architecture rtl of decoder is begin process(inp) begin outp0); outp(conv_integer(inp)=1; end process; end rtl;8方法方法3 3:使用:使用when-elsewhen-else条件赋值语句条件赋值语句Library ieee;Use ieee.std_logic_1164.all;Entity dec is port(sel: in std_logic_vector(2 downto 0) en: in std_logic; y: out std_logic_vector(7

6、 downto 0);End dec;Architecture behavior of dec isBegin y(0)=0 when (en=1 and sel=“000”) else 1; y(1)=0 when (en=1 and sel=“001”) else 1; y(2)=0 when (en=1 and sel=“010”) else 1; y(3)=0 when (en=1 and sel=“011”) else 1; y(4)=0 when (en=1 and sel=“100”) else 1; y(5)=0 when (en=1 and sel=“101”) else 1

7、; y(6)=0 when (en=1 and sel=“110”) else 1; y(7)=0 when (en=1 and sel=“111”) else 1;End behavior;9方法方法4 4:使用:使用 case-whencase-when语句语句实现。实现。Library ieee;Use ieee.std_logic_1164.all;Entity dec is port(sel: in std_logic_vector(2 downto 0); en: in std_logic; y: out std_logic_vector(7 downto 0);End dec;A

8、rchitecture behavior of dec isbegin10Process(sel,en)Begin yy(0)y(1)y(2)y(3)y(4)y(5)y(6)y(7)null; end case; end if;End process;End architecture;译码输出低有效译码输出低有效113-8译码器仿真结果:译码器仿真结果:译码输出低有效12OUT=111H=1OUT=110G=1OUT=101F=1OUT=100E=1OUT=011D=1OUT=010C=1OUT=001B=1OUT=000A=1(3)8-3优先编码器优先编码器 设计一个设计一个 8 输入优先级

9、编码器,输入优先级编码器,y0 级别最低,级别最低,y7 级别最高;输出为级别最高;输出为3位编码。位编码。13LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ENCODER IS PORT (A,B,C,D,E,F,G,H;IN STD_LOGIC: OUT0,OUT1,OUT2:OUT STD_LOGIC);END ENTITY ENCODER;14方法方法1:使用条件赋值语句使用条件赋值语句1516Library ieee;Use ieee.std_logic_1164.all;Entity priority is port(signal

10、y0,y1,y2,y3,y4,y5,y6,y7: in std_logic; signal vec:out std_logic_vector(2 downto 0);End priority;Architecture behavior of priority isBegin process(y0,y1,y2,y3,y4,y5,y6,y7) begin if(y7=1) then vec=“111”; elsif (y6=1) then vec=“110”; elsif (y5=1) then vec=“101”; elsif (y4=1) then vec=“100”; elsif (y3=1

11、) then vec=“011”; elsif (y2=1) then vec=“010”; elsif (y1=1) then vec=“001”; elsif (y0=1) then vec=“000”; end if; end process;end behavior;方法方法3:利用:利用 if 多选择语句多选择语句自顶向下的自顶向下的优先特性优先特性17process(y0,y1,y2,y3,y4,y5,y6,y7) begin if (y0=1) then vec=“000”; end if; if (y1=1) then vec=“001”; end if; if (y2=1)

12、then vec=“010”; end if; if (y3=1) then vec=“011”; end if; if (y4=1) then vec=“100”; end if; if (y5=1) then vec=“101”; end if; if (y6=1) then vec=“110”; end if; if (y7=1) then vec=“111”; end if;end process;end behavior; 方法方法4 4:进程内进程内为为顺序语句顺序语句,最先描述优先级最低,最先描述优先级最低, 最后描述优先级最高,可实现优先级编码。最后描述优先级最高,可实现优先级

13、编码。18 architecture behavior of priority is begin vec = “111” when y7 = 1 else “110” when y6 = 1 else “101” when y5 = 1 else “100” when y4 = 1 else “011” when y3 = 1 else “010” when y2 = 1 else “001” when y1 = 1 else “000” when y0 = 1 else “XXX”; end behavior;方法方法5 5:利用:利用条件赋值语句条件赋值语句 194. 8位比较器位比较器

14、比较器可以比较两个二进比较器可以比较两个二进制是否相等,下面是一个制是否相等,下面是一个8位比较器的位比较器的VHDL描述。描述。有两个有两个8位二进制数,分别位二进制数,分别是是A和和B,输出为,输出为EQ,当,当A=B时,时,EQ=1,否则,否则EQ=020 8位比较器位比较器 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY COMPARE IS PORT(A,B:IN STD_LOGIC_VECTOR(7 DOWNTO 0); EQ:OUT STD_LOGIC); END ENTITY COMPARE; ARCHITECTURE ART

15、 OF COMPARE IS BEGIN EQ =1 WHEN A=B ELSE 0; END ARCHITECTURE ART;215. 四选一电路四选一电路226 6算术运算算术运算下面的程序对输入操作数下面的程序对输入操作数A A、B B作加、减、乘、除运算。作加、减、乘、除运算。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY ARITHMETIC ISPORT (A,B:IN STD_LOGIC_VECTOR(3 DO

16、WNTO 0); Q1:OUT STD_LOGIC_VECTOR(4 DOWNTO 0); Q2,Q3:OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Q4:OUT STD_LOGIC_VECTOR(7 DOWNTO 0); END ENTITY ARITHMETIC;23ARCHITECTURE ART OF ARITHMETIC ISBEGIN PROCESS(A,B) ISBEGIN Q1=(0&A)+(0&B); -ADDITION Q2=A-B; -SUBTRACTION Q3=A/B; -DIVISION Q4=A*B; -MULTIPLICAT

17、IONEND PROCESS;END ARCHITECTURE ART;24251 1)三三态态门门电电路路描描述述Library ieee;Use ieee.std_logic_1164.all;Entity tri_gate is port(din,en: in std_logic; dout: out std_logic);End tri_gate;Architecture zas of tri_gate isBegin tri_gate1:porcess(din,en) begin if(en=1) then dout=din; else dout=Z; end if; end pro

18、cess;End zas;26三态门仿真结果:三态门仿真结果:272 2)单单向向总总线线缓缓冲冲器器Library ieee;Use ieee.std_logic_1164.all;Entity tri_buf8 is port( din: in std_logic_vector(7 downto 0); en: in std_logic; dout: out std_logic_vector(7 downto 0);End tri_buf8;Architecture art of tri_buf8 isBegin process( en, din) begin if en=1 then d

19、out=din; else dout=“ZZZZZZZZ”; end if; end process; end art;283 3)双双向向总总线线缓缓冲冲器器Library ieee;Use ieee.std_logic_1164.all;Entity bidir is port( a,b: inout std_logic_vector(7 downto 0); en,dir: in std_logic); End bidir;Architecture art of bidir is signal aout,bout:std_logic_verctor(7 downto 0);Begin p

20、rocess( a,en, dir) begin if en=0 and dir=1 then dout=a; else dout=“ZZZZZZZZ”; end if; b=bout; end process; 29process(b,en,dir) begin if en=0 and dir=0 then aout=1 else aout=“ZZZZZZZZ”; end if; a=aout; end process; end art;30加法器加法器 带进位的带进位的 8 8位加法器位加法器符号如下:符号如下:其中:其中:Sum(i) = a(i) XOR b(i) XOR cin C(

21、i+1) = (a(i) AND b(i) ) OR ( (a(i) OR b(i) ) AND c(i) 31方法方法1:用:用for loop语句语句 实现实现library ieee;use ieee.std_logic_1164.all;entity adder8 isport(a,b: in std_logic_vector(7 downto 0); cin: in std_logic; sum: out std_logic_vector(7 downto 0); cout: out std_logic);end adder8; 32architecture beh of adder

22、8 is signal c:std_logic_vector(8 downto 0);begin process(a,b,cin,c) begin c(0)=cin;for i in 0 to 7 loop sum(i)=a(i) xor b(i) xor c(i); c(i+1)= (a(i) and b(i) or (c(i) and (a(i) or b(i);end loop; cout=c(8);end process;end beh;33直接使用直接使用加法加法“+”+”函数函数:带进位的带进位的4 4位加法器位加法器344位加法器仿真结果:位加法器仿真结果:353637异步异步置

23、置位位/ /复复位位D D触触发发器器38同步复位同步复位D D触发器触发器Library ieee;Use ieee.std_logic_1164.allEntity dff4 is port(clk,d,cl:in std_logic; q:out std_logic); end dff4;Architecture rt1 of dff4 is begin process(clk) begin if(clkevent and clk=1) then if(clr=1) then q=0 else q=d; end if; end if; end process;End rt1;39比较:异

24、步置位的锁存器(比较:异步置位的锁存器(LatchLatch)Library ieee;Use ieee.std_logic_1164.allEntity latch is port(gate,data,set:in std_logic; q:out std_logic); end latch;Architecture rt1 of latch is begin process(gate,data,set) begin if(set=0) then q=1; elsif(gate=1) then q=data; end if; end process;End rt1;40 library ie

25、ee; use ieee.std_logic_1164.all; entity t_ff is port(t, clk : in std_logic; q : buffer std_logic); end t_ff; architecture rtl of t_ff is begin process(clk) begin if clkevent and clk=1 then if t=1 then q=not q; else q=q; end if; end process; end rtl;TClkQQ2)T触发器触发器41 library ieee; use ieee.std_logic_

26、1164.all; entity rs_ff is port(r, s, clk : in std_logic; q, qn : buffer std_logic); end rs_ff; architecture rtl of rs_ff is begin process(r, s, clk) begin if clkevent and clk=1 then if s = 1 and r = 0 then q=0; qn=1; elsif s=0 and r=1 then q=1; qn=0; elsif s=0 and r=0 then q=q; qn=q n; else null; en

27、d if; end if; end process; end rtl;SClkQQRSRQQn00QQn01101001113)RS触发器触发器422 触发器的同步和非同步复位触发器的同步和非同步复位一)时序电路特殊信号的描述一)时序电路特殊信号的描述 时钟信号时钟信号和和复位信号复位信号 1、时钟信号描述、时钟信号描述 常用的描述方式:常用的描述方式: 1)进程的)进程的敏感信号敏感信号是是时钟信号时钟信号,在进程内,在进程内 部用部用if 语句语句描述描述时钟的边沿条件时钟的边沿条件。43如:如: process (clock_signal) begin if (clock_edge_co

28、ndition) then signal_out = signal_in ; 其它时序语句其它时序语句 end if ; end process ; 442)在进程中用)在进程中用wait until语句语句描述时钟信号,此时描述时钟信号,此时进程将没有敏感信号。进程将没有敏感信号。 如:如: process begin wait until (clock_edge_condition); signal_out = signal_in ; 其它时序语句其它时序语句 end process ; 45 注意:注意: a) 在对在对时钟边沿说明时钟边沿说明时,一定要注明是时,一定要注明是上升沿上升沿

29、还还 是是下降沿下降沿。 b) 一个进程一个进程中只能描述中只能描述一个时钟信号一个时钟信号。 c) wait until 语句语句只能放在只能放在进程的最前面进程的最前面或或最后面最后面3)时钟边沿的描述)时钟边沿的描述 时钟时钟上升沿上升沿: (clockevent and clock = 1) 时钟时钟下降沿下降沿: (clockevent and clock = 0) 462、触发器的、触发器的复位信号复位信号描述描述1)同步复位:只有以)同步复位:只有以时钟为敏感信号时钟为敏感信号的进程中定义。的进程中定义。 如:如: process (clock_signal) begin if

30、(clock_edge_condition) then if (reset_condition) then signal_out = reset_value; else signal_out = signal_in ; end if ; end if ; end process ;47 2)异步复位:异步复位:进程的进程的敏感信号表敏感信号表中除时中除时钟信钟信号外,还有复位信号号外,还有复位信号。 如:如:process (reset_signal, clock_signal) begin if (reset_condition) then signal_out = reset_value;

31、 elsif (clock_edge_condition) then signal_out = signal_in ; end if ; end process ;48 1) 非同步复位非同步复位/置位的置位的D触发器触发器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY ASYNDCFQ IS PORT(CLK,D,PRESET,CLR:IN STD_LOGIC; Q:OUT STD_LOGIC);END ENTITY ASYNDCFQ;ARCHITECTURE ART OF ASYNDCFQ ISBEGIN PROCESS(CLK,PRESET

32、,CLR) IS BEGIN IF(PRESET=1)THEN Q=1; ELSIF(CLR=1)THEN Q=0; ELSIF(CLKEVENT AND CLK=1)THEN Q=D; END IF;END PROCESS;END ARCHITECTURE ART;49LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SYNDCFQ IS PORT(D, CLK,RESET:IN STD_LOGIC; Q:OUT STD_LOGIC);END ENTITY SYNDCFQ;ARCHITECTURE ART OF SYNDCFQ IS BEGIN

33、PROCESS(CLK) IS BEGIN IF(CLKEVENT AND CLK=1)THEN IF(PRESET=0)THEN Q=0; ELSE Q=D; END IF;END IF;END PROCESS;END ARCHITECTURE ART;2) 同步复位的同步复位的D触发器触发器503位串行输位串行输入、串行入、串行输出移位输出移位寄存器描寄存器描述述ENTITY reg1 ISPORT ( d : in BIT; clk : in BIT; q: out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISCOMPONENT dff PORT(

34、d,clk:in std_logic; q:out std_logic);END component;SIGNAL z : std_logic_vector(0 to 3);BEGINz(0)=a;g1:FOR i in 0 to 7 generate dffx: DFF PORT MAP(z(i), clk,z(i+1);END generate;b=z(3);END reg1;3 3、寄存器、寄存器51直接用信号直接用信号连接描述连接描述 ENTITY reg1 ISPORT ( d : in BIT;clk : in BIT;q: out BIT);END reg1;ARCHITECTU

35、RE reg1 OF reg1 ISSIGNAL a, b : BIT;BEGINPROCESS (clk)BEGINIF clk=1 AND clkevent THENa = d;b = a;q = b;END IF;END PROCESS;END reg1;52THREE!53How ManyRegisters?ENTITY reg1 ISPORT ( d : in BIT;clk : in BIT;q: out BIT);END reg1;ARCHITECTURE reg1 OF reg1 ISBEGINPROCESS (clk)VARIABLE a, b : BIT;BEGINIF c

36、lk=1 AND clkevent THENa := d;b := a;q = b;END IF;END PROCESS;END reg1;54ONLY ONEONLY ONE!558位位串行输入、串行输出串行输入、串行输出移位寄存器移位寄存器:z0z1z2z3z4z5z6z7z856 方法一、方法一、 8位移位寄存器描述位移位寄存器描述 (结构描述结构描述)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SHIFT_8 ISPORT( a :IN STD_LOGIC; CLK: IN STD_LOGIC; b: OUT STD_LOGIC);E

37、ND SHIFT;ARCHITECTURE TWO OF SHIFT_8 ISCOMPONENT DFFPORT (D,CLK:IN STD_LOGIC; Q:OUT STD_LOGIC);END COMPONENT;SIGNAL Z:STD_LOGIC_VECTOR(0 TO 8)BEGINZ(0)=a;G1:FOR I 0 To 7 GENERAT DFFX:DFF PORT MAP(Z(I),CLK,Z(I+1);END GENERATE;b=Z(8);END TWO; 57方法二、方法二、 8 8位移位寄存器位移位寄存器直接用直接用信号连接信号连接描述描述LIBRARY IEEE;US

38、E IEEE.STD_LOGIC_1164.ALL;ENTITY SHIFT ISPORT( a: IN STD_LOGIC; CLK:IN STD_LOGIC; b:OUT STD_LOGIC);END SHIFT;ARCHITECTURE ONE OF SHIFT ISSIGNAL Z1,Z2,Z3,Z4,Z5,Z6,Z7:STD_LOGIC; BEGIN PROCESS(CLK) BEGIN IF(CLKevent AND CLK=1) THEN Z1=a; Z2=Z1; Z3=Z2; Z4=Z3; Z5=Z4; Z6=Z5;Z7=Z6; b0) ; -计数器异步复位计数器异步复位 EL

39、SIF CLKEVENT AND CLK=1 THEN -检测时钟上升沿检测时钟上升沿 IF EN = 1 THEN -检测是否允许计数(同步使能)检测是否允许计数(同步使能) IF CQI 0); -大于大于9,计数值清零,计数值清零 END IF; END IF; END IF; IF CQI = 9 THEN COUT = 1; -计数大于计数大于9,输出进位信号,输出进位信号 ELSE COUT = 0; END IF; CQ 0) ; ELSIF CLKEVENT AND CLK=1 THEN IF EN = 1 THEN IF CQI= 9 THEN CQI := (OTHERS

40、=0); COUT = 1; ELSE CQI := CQI + 1; COUT = 0; END IF; END IF; END IF; CQ = CQI; END PROCESS;END behav;另另一一种种表表达达方方式式64LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY updncout64 IS PORT (CLK,clr,updn : IN STD_LOGIC; qa,qb,qc,qd,qe,qf : OUT STD_LOGIC); END updncout64;AR

41、CHITECTURE rt1 OF updncount64 ISBEGIN qa=count_6(0); qb=count_6(1); qc=count_6(2); qd=count_6(3); qe=count_6(4); PROCESS(CLK, clr) BEGIN if(clr=1) then count_6=“000000”; elsif (clkevent and clk=1) then if(updn=1) then count_6=count_6+1; else count_6=count_6-1; end if; end if;End process;End rt1; 可逆计

42、数器可逆计数器( (加减计数器加减计数器) )65可逆计数器仿真结果:可逆计数器仿真结果:66例:六十进制(分、秒)计数器例:六十进制(分、秒)计数器Library ieee;Use ieee.std_logic_1164.all;Use std_logic_unsigned.all;Entity clock60 is port(clk,clear: in std_logic; bcd1_out: out std_logic_vector(3 downto 0); bcd10_out: out std_logic_vector(2 downto 0);End clock60;Architect

43、ure rt1 of clock60 is signal bcd1n: std_logic_vector(3 downto 0); signal bcd10n: std_logic_vector(2 downto 0);Begin bcd1_out=bcd1n; bcd10_out=bcd10n;67Process(clk,clear)Begin if(clear=1) then bcd_1n=“0000”; bcd10n=“000”; elsif(clkevent and clk=1) then if(bcd1n=9) then bcd1n=“0000”; if(bcd10n=5) then

44、 bcd10n=“000”; else bcd10n=bcd10n+1; end if; else bcd1n=bcd1n+1; end if; end if;End process;End rt1;686060进制计数器仿真结果:进制计数器仿真结果:69(2 2)异步计数器)异步计数器 异步计数器又称为异步计数器又称为行波计数器行波计数器,它的低位,它的低位计数器的输出作为高位计数器的时钟信号。计数器的输出作为高位计数器的时钟信号。 异步计数器采用异步计数器采用行波计数行波计数,使计数延迟增,使计数延迟增加,计数器工作频率较低。加,计数器工作频率较低。 描述异步计数器与同步计数器的不同主要描

45、述异步计数器与同步计数器的不同主要体现在对各级时钟脉冲的描述上。体现在对各级时钟脉冲的描述上。70例:由例:由8 8个触发器构成的个触发器构成的行波计数器行波计数器:71基本元件基本元件 dffr dffr 的描述:的描述:Library ieee;Use ieee.std_logic_1164.all;Entity dffr is Port(clk,clr,d:in std_logic; Q:out std_logic; QB:out std_logic);End dffr;Architecture beh of dffr isBegin Process(clk,clr) Begin If(

46、clr=0)then Q=0; QB=1; Elsif(clkevent and clk=1)then Q=d; QB=NOT d; End if; End process; End beh;72采用元件例化描述采用元件例化描述8 8位行波计数器位行波计数器library ieee;use ieee.std_logic_1164.all;entity riple_count is port(clk,clr:in std_logic; count:out std_logic_vector(7 downto 0);end riple_count;architecture BEH of riple_

47、count is signal count_in:std_logic_vector(8 downto 0); component dffr port(clk,clr,d:in std_logic; q:out std_logic; qb:out std_logic); end component; begin count_in(0)count_in(i), clr=clr, d=count_in(i+1), q=count(i), qb=count_in(i+1); end generate gen1;end BEH;738 8 位行波计数器仿真结果:位行波计数器仿真结果:745、序列信号发生

48、器、检测器、序列信号发生器、检测器 1)“01111110”序列发生器序列发生器Library ieee;Use ieee.std_logic_1164.all;Use ieee.std_logic_unsigned.all;Entity senqgen is port(clk,clr,clock: in std_logic; zo: out std_logic);End senqgen;Architecture art of senqgen is signal count: std_logic_vector(2 downto 0); signal z: std_logic:=0;Begin

49、process(clk,clr) begin if clr=1 then count=“000”;75Else if clkevent and clk=1 then if count=“111” then count=“000”; else countzzzzzzzz=0; end case; end process;76Process(clock,z)Begin if clockevent and clock=1 then zo=z; end if;End process;End art;77仿真结果:仿真结果:782 2)序列信号检测器,检测)序列信号检测器,检测“01111110”011

50、11110”library ieee;use ieee.std_logic_1164.all;entity detect is port(data_in: in std_logic; clk: in std_logic; q: out std_logic);end detect;architecture bev of detect is type state_type is (s0,s1,s2,s3,s4,s5,s6,s7,s8);begin process variable present_state: state_type; 79begin q if data_in=0 then pres

51、ent_state:=s1; else present_state:=s0; end if; when s1 = if data_in=1 then present_state:=s2; else present_state:=s1; end if; when s2 = if data_in=1 then present_state:=s3; else present_state:=s1; end if; when s3 = if data_in=1 then present_state:=s4; else present_state:=s1; end if; when s4 = if dat

52、a_in=1 then present_state:=s5; else present_state:=s1; end if; when s5 = if data_in=1 then present_state:=s6; else present_state:=s1; end if; 80when s6 = if data_in=1 then present_state:=s7; else present_state:=s1; end if;when s7 = if data_in=1 then present_state:=s8; else present_state:=s1; end if;

53、when s8 = if data_in=1 then present_state:=s1; else present_state:=s2; end if;end case;wait until clk=1;end process;end bev;8182“01111110”序列信号检测器状态图序列信号检测器状态图83简洁的简洁的序列信号检测器序列信号检测器:Library ieee;Use ieee.std_logic_1164.all;Entity detect is port(datain,clk: in std_logic; q:out std_logic);End detect;Ar

54、chitecture rt1 of detect is signal reg:std_logic_vector(7 downto 0);Begin process(clk) begin if (clkevent and clk=1) then reg(0)=datain; reg(7 downto 1)=reg(6 downto 0); end if; if reg=“01111110” then q=1; else q dout dout dout dout dout=“00000000”; end case; end process; end rt1;8687例子例子2:一个容量为:一个容

55、量为2564的的ROM存储,该存储,该ROM有有8位地址线位地址线ADR(0)ADR(7),4位数位数据输出线据输出线DOUT(0)DOUT(3)及使能及使能ENDOUT3.0DOUT3.0ENADR7.0ADR7.0ENROM88LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE STD.TEXTIO.ALL;ENTITY ROM IS PORT(EN:IN STD_LOGIC; ADR:IN STD_LOGIC_VECTOR(7 DOWNTO 0); DOUT: OUT STD_LOGIC

56、_VECTOR(3 DOWNTO 0);END ENTITY ROM;ARCHITECTURE ART OF ROM IS SUBTYPE WORD IS STD_LOGIC_VECTOR(3 DOWNTO 0); TYPE MEMORY IS ARRAY(0 TO 255) OF WORD; SIGNA ADR_IN:INTEGER RANGE 0 TO 255; VARIABLE ROM:MEMORY; VARIABLE START_UP:BOOLEAN:=TRUE; VARIABLE L:LINE; VARIABLE J:INTEGER; FILE ROMIN:TEXT IS IN ROMIN;89 BEGIN PROCESS(EN,ADR) IS BEGIN IF START_UP THEN -初始化开始初始化开始 FOR J IN ROMRANGE LOOP READLINE(ROMIN,1); READ(1,ROM(J); END L

温馨提示

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

评论

0/150

提交评论