第六章:VHDL程序设计§6.1 VHDL描述风格·描述风格:VHDL的构造体用于描述整个设计实体的逻辑功能。
对于相同的电路功能行为,可以用不同的描述方式来表达;对于相同的逻辑行为,可以用不同的语句来描述。
·类型:行为描述;寄存器传递(数据流)描述;结构描述。
1.行为描述方式·含义:是对系统数学模型的描述。
·特点:①只表示输入与输出间转换的行为,而不包含任何结构信息;②主要使用函数、过程和进程语句,以算法形式描述数据的变换和传送;③比寄存器传递和结构描述具有更高的抽象性;④行为描述是VHDL编程的核心,可以说,没有行为描述就没有VHDL。
⑤通常不能直接进行逻辑综合,需要转化成RTL描述或结构描述。
·用途:主要用于系统数学模型的仿真或系统工作原理的仿真。
[例6-1]用行为描述方式描述“二选一”电路功能。
LIBRARY IEEE;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mux2 IS i1PROT( i0, i1, sel : IN STD_LOGIC;q: OUT STD_LOGIC ); selEND mux2;ARCHITECTURE behav OF mux2 ISBEGINCASE sel ISWHEN 0 =>q<=i0 AFTER 10ns;WHEN 1 =>q<=i1 AFTER 10ns;WHEN OTHERS=>q<=‘X‘ AFTER 10ns;END CASEEND behav;2.寄存器传递描述(RTL)方式·含义:是一种明确规定寄存器描述的方法。
·分类:①采用寄存器之间的功能描述(类似行为描述);②采用寄存器硬件直接描述(一一对应)。
·特点:①RTL功能描述编程效率高、难度低,但可用的VHDL语句受限;②RTL硬件描述编程难度大、要求高,但可用的VHDL语句多。
[例6-2] 用RTL硬件方式描述“二选一”电路功能。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mux2 ISPROT( i0, i1, sel : IN STD_LOGIC;q: OUT STD_LOGIC );END mux2;ARCHITECTURE rtl OF mux2 ISSIGNAL temp1, temp2, temp3, : STD_LOGIC;BEGINTemp1<=i0 AND sel;Temp2<=i1 AND (NOT sel);Temp3<=temp1 OR temp2;q<=temp3;END rtl;3.结构描述方式·含义:在分层设计中,通过高层次的设计模块调用低层次的设计模块来构成一个复杂的逻辑电路的描述方法。
·特点:①结构清晰,与硬件层层对应,如:系统→板→元件;②设计效率高,可方便地将已有设计成果用到新的设计中。
[例6-3]用结构描述方式描述“二选一”电路功能。
U3d0d1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY mux2 ISPROT(d0, d1, sel : IN BIT;q: OUT BIT );END mux2;ARCHITECTURE struct OF mux2 ISCOMPONENT and2PROT(a, b : IN BIT;c: OUT BIT );END COMPONET;COMPONENT or2PROT(a, b : IN BIT;c: OUT BIT );END COMPONET;COMPONENT invPROT(a : IN BIT;c: OUT BIT );END COMPONET;SIGNAL aa, bb, nsel: BIT;BEGINU1: inv PORT MAP(sel, nsel);U2: and2 PORT MAP(d1, nsel, bb);U3: and2 PORT MAP(d0, sel, aa);U4: or2 PORT MAP(aa, bb, q);END struct;说明:①COMPONENT语句用来说明在该电路中所使用的已生成的模块and2,…;②PORT MAP( ) 语句将已生成模块的端口与所设计的各模块U1,U2…的端口连接起来。
§6.2 组合逻辑电路设计1.基本门电路[例6-4] 用VHDL程序描述二输入“异或”门电路。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xor2 ISPORT (a, b: IN STD_LOGIC;y: OUT STD_LOGIC);END xor2;ARCHITECTURE xor2_1 OF xor2 ISBEGINy<=a XOR b;END xor2_1;[例6-5] 用VHDL 程序描述二输入“异或”门电路。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY xor2 ISPORT (a, b: IN STD_LOGIC;y: OUT STD_LOGIC);END xor2;ARCHITECTURE xor2_2 OF xor2 ISBEGINPROCESS(a, b)V ARIABLE comb:STD_LOGIC VECTOR( 1 DOWNTO 0 );BEGINComb:= a & b;CASE comb isWHEN ―00‖=> y <=‘0‘;WHEN ―01‖=> y <=‘1‘;WHEN ―10‖=> y <=‘1‘;WHEN ―11‖=> y <=‘0‘;WHEN OTHERS=> y <=‘X‘;END CASE;END PROCESS;END xor2_2;2.加法器(1) 半加器真值表 电路符号二进制输入 和进位b a s co0 0 0 00 1 1 0 1 0 1 01 1 0 1逻辑表达式: S = (a + b)·/(a·b)C0 = /(a·b)[例6-6] 用VHDL 程序描述半加器电路功能。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY half_adder ISPORT (a, b: IN STD_LOGIC;s, co: OUT STD_LOGIC);END half_adder;ARCHITECTURE half1 OF half_adder ISSIGNAL c, d: STD_LOGIC;BEGINc<=a OR b;d<=a NAND b;s<=c AND d;co<=NOT d;END half1;(2)全加器[例6-7] 用VHDL程序描述全加器电路功能。
ab分析:·用两个半加器构成一个全加器;·原理电路图示意;:·采用元件例化语句COMPONET---PORT MAP( )。
LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY full_adder ISPORT (a, b, ci: IN STD_LOGIC;s, co: OUT STD_LOGIC);END full_adder;ARCHITECTURE full1 OF full_adder ISCOMPONENT half_adderPORT (a, b: IN STD_LOGIC;s, co: OUT STD_LOGIC);END COMPONENT;SIGNAL u0_s, u0_co, u1_s, u1_co: STD_LOGIC;BEGINU0:half_adder PORT MAP(a, b, u0_s,u0_co);U1:half_adder PORT MAP(ci, u0_s, u1_s, u1_co);s<=u1_s;co<=u0_co OR u1_co;END fall1;3.其它编码器(优先级)/译码器(3-8)/选择器(四选一)/缓冲器(单/双)等(自学)§6.3 时序电路设计1.时钟信号(1) 含义:周期性系列脉冲(2) 作用:是描述时序电路的VHDL程序执行的条件。
(3) 描述方式:以进程的形式描述时序电路。
①时钟信号是进程的敏感信号如:PROCESS (clk_signal)BEGINIF (clock_edge_condition) THENSignal_out <= signal_in…END IF;END PROCESS;②时钟信号是进程中的激活信号如:PROCESSBEGINWAIT ON (clock_signal) UNTIL (clock_edge_condition)Signal_out<=signal_in…END PROCESS;(4) 边沿触发①上升沿·图形描述:·语句描述:IF clk=‘1‘AND clk‘LAST_V ALUE=‘0‘AND clk‘EVENT;②下升沿·图形描述:·语句描述:IF clk=‘0‘AND clk‘LAST_V ALUE=‘1‘AND clk‘EVENT;2.复位信号(1) 类型:·同步复位:当复位信号有效且给定时钟边沿到来时,触发器才被复位。
·非同步复位(异步复位):一旦复位信号有效,触发器就被复位。
(2) 描述方式:①同步复位:一定在以时钟为敏感信号的进程中定义,且用IF语句来描述必要的复位条件。
如:PROCESS (clock_signal)BEGINIF (clock_edge_condition) THENIF (reset_condition) THENSignal_out<= reset_value;ELSESignal_out<= signal_in;…END IF;END IF;END PROCESS;②异步复位:在进程的敏感信号中,时钟和复位信号同时存在,用IF语句描述复位条件,用ELSE语句描述时钟事件。
如:PROCESS (reset_signal,clock_signal)BEGINIF (reset_condition) THENSignal_out<= reset_value;ELSIF (clock_event AND clock_edge_condition) THENSignal_out<= signal_in;…END IF;END PROCESS;说明:若没有ELSIF语句,当复位信号变化但复位条件不满足时…。