第六讲 VHDL的元件例化语句
- 格式:ppt
- 大小:221.00 KB
- 文档页数:23
元件例化语句元件例化就是引入一种连接关系,将预先设计好的设计实体定义为一个元件,然后利用特定的语句将此元件与当前的设计实体中的指定端口相连接,从而为当前设计实体引入一个新的低一级的设计层次。
在这里,当前设计实体相当于一个较大的电路系统,所定义的例化元件相当于一个要插在这个电路系统板上的芯片,而当前设计实体中指定的端口则相当于这块电路板上准备接受此芯片的一个插座。
元件例化是使VHDL 设计实体构成自上而下层次化c设计的一种重要途径。
在一个结构体中调用子程序,包括并行过程的调用非常类似于元件例化,因为通过调用,为当前系统增加了一个类似于元件的功能模块。
但这种调用是在同一层次内进行的,并没有因此而增加新的电路层次,这类似于在原电路系统增加了一个电容或一个电阻。
元件例化是可以多层次的,在一个设计实体中被调用安插的元件本身也可以是一个低层次的当前设计实体,因而可以调用其它的元件,以便构成更低层次的电路模块。
因此,元件例化就意味着在当前结构体内定义了一个新的设计层次,这个设计层次的总称叫元件,但它可以以不同的形式出现。
如上所说,这个元件可以是已设计好的一个VHDL 设计实体,可以是来自FPGA 元件库中的元件,它们可能是以别的硬件描述语言,如Verylog 设计的实体。
元件还可以是软的IP 核,或者是FPGA 中的嵌入式硬IP 核。
元件例化语句由两部分组成,前一部分是对一个现成的设计实体定义为一个元件,第二部分则是此元件与当前设计实体中的连接说明,它们的语句格式如下:(1)元件定义语语句COMPONENT 元件名GENERIC (类属表);PORT (端口名表);END COMPONENT 文件名;(2)元件例化语句例化名:元件名PORT MAP( [端口名=>] 连接端口名,...) ;CLK1HZ : IN STD_LOGIC;EN : IN STD_LOGIC;LOW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END counter24;ARCHITECTURE rtl of counter24 ISSIGNAL LOW_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL HIGH_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL CLR : STD_LOGIC:='0';BEGIN--个位计数LOW_PROC:PROCESS(CLK1HZ,EN,CLR)BEGINIF rising_edge(CLK1HZ) THENIF EN = '1' THENIF LOW_REG = "1001" OR CLR = '1' THEN --23:59进位LOW_REG <= "0000";ELSE LOW_REG <= LOW_REG + '1';END IF;END IF;END IF;END PROCESS;LOW <= LOW_REG;--十位计数HIGH_PROC:PROCESS(CLK1HZ,EN,CLR)BEGINIF rising_edge(CLK1HZ) THENIF EN = '1' THENIF CLR = '1' THENHIGH_REG <= "0000";ELSIF LOW_REG = "1001" THENHIGH_REG <= HIGH_REG + '1';END IF;END IF;END IF;END PROCESS;HIGH <= HIGH_REG;CLR <= '1' WHEN LOW_REG = "0011" AND HIGH_REG = "0010" ELSE '0'; --23点以后进位END rtl;60进制BCD码计数器(2010-06-28 11:24:25)LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;USE IEEE.STD_LOGIC_ARITH.ALL;ENTITY counter60 ISPORT(CLK1HZ : IN STD_LOGIC;EN : IN STD_LOGIC;ENOUT : OUT STD_LOGIC;LOW : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);HIGH : OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END counter60;ARCHITECTURE rtl OF counter60 ISSIGNAL LOW_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; SIGNAL HIGH_REG : STD_LOGIC_VECTOR(3 DOWNTO 0):="0000"; BEGIN--个位计数LOW_PROC:PROCESS(CLK1HZ,EN)BEGINIF rising_edge(CLK1HZ) THENIF EN ='1' THENIF LOW_REG ="1001" THENLOW_REG <= "0000";ELSE LOW_REG <= LOW_REG + '1'; --注意:不同位数可以相加END IF;END IF;END IF;END PROCESS;LOW <= LOW_REG; --将值赋给输出LOW--十位计数HIGH_PROC:PROCESS(CLK1HZ,EN)BEGINIF rising_edge(CLK1HZ) THENIF EN = '1' THENIF LOW_REG = "1001" THEN。
VHDL的顺序语句和并行语句一、顺序语句顺序语句只能出现在进程(PROCESS)、子程序(过程(PROCEDURE)和函数(FUNCTION))中,其特点与传统的计算机编程语句类似,是按程序书写的顺序自上而下、一条一条地执行。
利用顺序语句可以描述数字逻辑系统中的组合逻辑电路和时序逻辑电路。
VHDL的顺序语句有赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句等六类。
<1>赋值语句赋值语句的功能是将一个值或一个表达式的运算结果传递给某一个数据对象。
(1)变量赋值语句格式:目标变量名:=赋值源(表达式);例如:x:=5.0;(2)信号赋值语句格式:目标信号名<=赋值源;例如:y<=…1‟;说明:该语句若出现在进程或子程序中则是顺序语句,若出现在结构体中则是并行语句。
( 3 )数组元素赋值例如:SIGNAL a,b:STD LOGIC VECTOR(1 TO 4);a<=“1101”;a(1 TO 2)<=“10”;a(1 TO 2)<=b(2 TO 3);<2>流程控制语句通过条件控制开关决定是否执行一条或几条语句,或重复执行一条或几条语句,或跳过一条或几条语句。
流程控制语句共有5种:IF语句CASE语句LOOP语句NEXT语句EXIT语句(1)IF语句1、IF 条件句Then 顺序语句END IF ;2、IF 条件句Then 顺序语句ELSE 顺序语句END IF ;3、IF 条件句Then 顺序语句ELSIF 条件句Then 顺序语句...ELSE 顺序语句END IF4、IF 条件句ThenIF 条件句Then...END IFEND IF例子:8线-3线优先编码器的设计LIBRARY IEEE;USE IEEE.STD LOGIC 1164.ALLENTITY coder ISPORT(a:IN STD LOGIC VECTOR(0 TO 7);y:OUT STD LOGIC VECTOR(0 TO 2));END coder;ARCHITECTURE example2 OF coder ISBEGINPROCESS(a)BEGINIF (a(7)=…0‟)THEN y<=”111”;ELSIF (a(6)=‟0‟) THEN y<=”011”;ELSIF (a(5)=‟0‟) THEN y<=”101”;ELSIF (a(4)=‟0‟) THEN y<=”001”;ELSIF (a(3)=‟0‟) THEN y<=”110”;ELSIF (a(2)=‟0‟) THEN y<=”010”;ELSIF (a(1)=‟0‟) THEN y<=”100”;ELSE y<=”000”;END IF;END PROCESS;END example2;(2)CASE语句格式:CASE 表达式ISWhen 选择值=>顺序语句;When 选择值=>顺序语句;…When OTHERS =>顺序语句;END CASE;说明:“=>”不是运算符,相当“THEN”。
元器件例化语句1. 元器件例化语句就像是魔法咒语一样,能让电路设计变得超简单!比如说,我要设计一个计数器电路,使用D触发器的例化语句,就像把一个个小魔法零件组装起来,“DFF_inst : DFF port map ( clk => clk, d => data, q => count );”,看,一个简单的计数器就有雏形啦。
2. 元器件例化语句啊,那可是电路世界里的万能钥匙。
就像你玩积木,每个不同形状的积木(元器件)都有它特定的拼接方式(例化语句)。
像在做一个简单的数字时钟电路时,用七段数码管的例化语句“SEG_DISP_inst : SEG_DISP port map ( num => time_val, seg =>seg_out );”,就如同把代表时间的数字准确地放在了该放的位置。
3. 元器件例化语句,你可别小瞧它,这可是电路设计师的秘密武器呢。
想象一下,你是个大厨,元器件是食材,例化语句就是你独特的烹饪手法。
例如我在构建一个音频放大电路,三极管的例化语句“TRANS_inst : TRANS port map ( base => input_signal, collector => output_signal );”就像恰到好处地调味,让声音放大得恰到好处。
4. 嘿,元器件例化语句真的很有趣!它就像给每个电子元器件安排一个专属座位一样。
我做一个LED闪烁电路的时候,LED的例化语句“LED_inst : LED port map ( anode => power, cathode => control_signal );”就像告诉LED,你就坐这儿,然后按照我的规则闪起来。
5. 元器件例化语句简直就是电路里的“排兵布阵”之法。
你看,在设计一个逻辑门电路的时候,与门的例化语句“AND_GATE_inst :AND_GATE port map ( input1 => a, input2 => b, output => result );”,这就如同在战场上把士兵(输入信号)安排到正确的位置(与门的输入端口),然后得到预期的战斗结果(输出信号)。