5VHDL顺序语句与并行语句
时间:2025-05-09
时间:2025-05-09
CPLD
语句结构描述中方括号“[ ]”内的内容为可选内容。
对于VHDL的编译器和综合器来说,程序文字的大小写是不加区分的。
程序中的注释使用双横线“--”。
QuartusII要求源程序文件的名字与实体名、工程名必须一致。
编写程序注意不要在中文输入状态下输入英文字符和符号。
为了使程序结构清晰,使用层次缩进格式书写代码。
进程语句 顺序语句 并行语句
顺序语句仅出现在进程和子程序中。
在结构体中的执行是同时进行,执行顺序与书写顺序无关。
CPLD
在每个上升沿启动一次进程(执行进程内所有的语句)。
上升沿描述:Clock’ EVENT AND Clock=‘1’ 下降沿描述:Clock’ EVENT AND Clock=‘0’ 上升沿描述: rising_edge (Clock) 下降沿描述:
falling_edge (Clock)
1. PROCESS为一无限循环语句
2. PROCESS中的顺序语句具有明显的顺序/并行运行双重性 3. 进程语句本身是并行语句 4. 信号是多个进程间的通信线
5. 一个进程中只允许描述对应于一个时钟信号的同步时序 逻辑
CPLD
【例5-6】同一进程信号多次赋值 【例5-7】同一进程变量多次赋值
LIBRARY IEEE; LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux4 IS ENTITY mux4 IS
PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; q : OUT STD_LOGIC); q : OUT STD_LOGIC); END mux4; END mux4;
ARCHITECTURE body_mux4 OF mux4 IS ARCHITECTURE body_mux4 OF mux4 IS signal muxval : integer range 7 downto 0; BEGIN BEGIN
process(i0,i1,i2,i3,a,b) process(i0,i1,i2,i3,a,b) variable muxval : integer range 7 downto 0; begin begin muxval <= 0; muxval := 0; if (a = '1') then if (a = '1') then muxval <= muxval + 1; muxval := muxval + 1; end if; end if; if (b = '1') then if (b = '1') then muxval <= muxval + 2; muxval := muxval + 2; end if; end if; case muxval is case muxval is when 0 => q <= i0;
when 0 => q <= i0; when 1 => q <= i1; when 1 => q <= i1; when 2 => q <= i2; when 2 => q <= i2; when 3 => q <= i3; when 3 => q <= i3; when others => null;
when others => null; end case; end case; end process; end process; END body_mux4;
END body_mux4;
顺序语句与并行语句
电子信息工程学院
17
CPLD
(1)WAIT语句 (2)变量赋值语句 (3)信号代入语句 (4)IF语句 (5)CASE语句 (6)LOOP语句 (7)NEXT语句 (8)EXIT语句 (9)RETURN语句 (10)NULL语句
(11)过程调用语句 (12)REPORT语句
(13)断言语句
格式: ASSERT 条件 [REPORT 输出信息][SEVERITY 级别] REPRORT 输出信息 [SEVERITY 出错级别]
执行到断言语句时,判断条件,若条件满足就继续执行,否则输出文字串和错误级别信息。出错级别分为四种:note(注意)、warning(警告)、error(错误)、failure(失败)。
例: ASSERT (tiaojian=’1’) REPORT “some thing wrong” SEVERITY ERROR;
进程在执行过程中总是处于两种状态:执行或挂起,进程的状态
变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程。 WAIT语句可设置四种不同的条件:
(1)WAIT ;--未设置停止挂起的条件,表示永远挂起。
(2)WAIT ON 信号表;--敏感信号等待语句,敏感信号的变化
将结束挂起,再次启动进程。
(3)WAIT UNTIL 条件表达式;--条件表达式为中所含的信号发
生变化,且满足WAIT语句所设条件,则结束挂起,再次启动进程。
(4)WAIT FOR 时间表达式;--超时等待语句,从执行当前的
WAIT语句开始,在此时间段内,进程处于挂起状态,超过这一时间段后,程序自动恢复执行。
格式: 目的变量:=表达式 例: c:=a+d;
格式: 目的信号量<=信号量表达式 例: c<=a+b;
(1)门闩控制 (3)多选一
格式:IF 条件 THEN 格式:IF 条件 THEN 顺序执行语句 END IF; 顺序执行语句
ELSIF 条件 THEN (2)二选一
顺序执行语句 格式:IF 条件 THEN : 顺序执行语句 :
ELSE
ELSIF 条件 THEN 顺序执行语句 顺序执行语句 END IF;
ELSE
顺序执行语句 END IF;
注意:用IF语句描述组合逻辑电路时,务必涵盖所有的情况,否则综合后将引入锁存器!
CPLD
ENTITY COMP_GOOD IS PORT(a1 : IN BIT; b1 : IN BIT; q1 : OUT BIT ); END ;
ARCHITECTURE one OF COMP_GOOD IS BEGIN
PROCESS (a1,b1) BEGIN
IF a1 > b1 THEN q1 <= '1' ; ELSE q1 <= '0' ; END IF; END PROCESS ; END ;
ENTITY COMP_BAD IS
PORT( a1 : IN BIT; 1,编程,观察时序图和RTL图
b1 : IN BIT; 2,加入ELSE语句,观察时序图和RTL图
q1 : OUT BIT ); END ;
ARCHITECTURE one OF COMP_BAD IS BEGIN
PROCESS (a1,b1) BEGIN
IF a1 > b1 THEN q1 <= '1' ;
ELSIF a1 < b1 THEN q1 <= ‘0’ ; -- 未提及当a1=b1时,q1作何操作 END IF; END PROCESS ; END ;
CPLD
格式: CASE 表达式 IS
WHEN 条件表达式=>顺序处理语句
END CASE;