【FPGA学习笔记】VHDL学习笔记(三)顺序语句

一、 赋值语句

1、变量赋值:用“ := ”

a := 2;
b := 3.0;

2、信号赋值用“<=”,信号赋值和信号值的更新之间有一定的延时

a<=b;
二、IF 语句

IF语句简单例子:四选一数据选择器。

--if 语句
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY mux41 IS
	PORT (d0 : IN STD_LOGIC;
		  d1 : IN STD_LOGIC;
		  d2 : IN STD_LOGIC;
		  d3 : IN STD_LOGIC;
		  sel :IN STD_LOGIC_VECTORa(1 DOWNTO 0);
		  q   :out STD_LOGIC);
END mux41;
ARCHITECTURE rtl OF mux41 IS
BEGIN
	PROCESS (d0,d1,d2,d3,sel)
	BEGIN
		IF(sel == "00")THEN
		q <= d0;
		ELSIF(sel == "01")THEN
		q <= d1;
		ELSIF(sel == "10")THEN
		q <= d2;
		ELSE 
		q <= d3;
		END IF;
	END PROCESS;
end rtl;
三、CASE语句

case例子:仍然是四选一数据选择器(只写了结构体部分,实体同上)

--case 语句
ARCHITECTURE rtl OF mux41 IS
BEGIN
	PROCESS (d0,d1,d2,d3,sel)
	BEGIN
		CASE SEL IS
			WHEN "00" => q <= d0;
			WHEN "01" => q <= d1;
			WHEN "10" => q <= d2;
			WHEN "11" => q <= d3;
			WHEN OTHERS => q <= 'Z';
		END CASE;
	END PROCESS;
END rtl;
四、LOOP语句

1、FOR LOOP

--FOR LOOP
FOR 循环变量 IN 范围 LOOP
	顺序处理语句;
END LOOP;

例子:奇偶校验电路

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL 
ENTITY check IS
	PORT(
		a : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
		y : OUT STD_LOGIC);
END check; 
ARCHITECTURE rtl OF check IS
	BEGIN
	PROCESS(a)
		VARIABLE tmp :STD_LOGIC;
		VARIABLE i :INTEGER;
	BEGIN	
		tmp := '0';
		FOR i IN  0 TO 7 LOOP
			tmp := tmp XOR a(i);
		END LOOP;
		y <= tmp;
	END PROCESS;
END rtl;

2、WHILE LOOP

LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL 
ENTITY check IS
	PORT(
		a : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
		q : OUT STD_LOGIC);
END check;

ARCHITECTURE behave OF check IS
VARIABLE tmp :STD_LOGIC;
VARIABLE i :INTEGER;
BEGIN
	PROCESS
	tmp := '1';
	i := 0;
	WHILE (i < 8) LOOP
		BEGIN
			tmp :=tmp AND a(i);
			i :i=1;
		END LOOP;
	END PROCESS;
END behave;
五、跳出循环:NEXT,EXIT

NEXT:用在LOOP循环内部,用于跳出本次循环。

--当i=j的时候,跳出L2循环,来到L1标号处
L1:WHILE i<10 LOOP
	L2:WHILE j<10 LOOP
		NEXT L1 WHEN i = j;
	END LOOP L2;
END LOOP L1;

EXIT:跳出并结束整个循环状态

EXIT [标号] [WHEN 条件]
六、RETURN语句

return语句可用于函数或者过程体中。
1、用于函数中: return语句必须含有表达式,而且它是结束函数的唯一条件。

2、用于过程体中 :return语句不能含有表达式,可以中断执行,跳出过程

--求最大值的函数(函数)
FUNCTION maximun(a,b :INTEGER) RETURN INTEGER IS
VARIABLE tmp :INTEGER
BEGIN
	IF (a > b) THEN 
	tmp := a;
	ELSE 
	tmp := B;
	END IF;
	RETURN tmp;
END maximun;
--描述RS触发器(过程体)
PROCEDURE rs (SIGNAL s,r : IN STD_LOGIC;
			  SIGNAL q,nq : OUT STD_LOGIC) IS
BEGIN
	IF (s = '1' AND r = '1') THEN 
		REPORT "Foribidden state :s and r are equal to '1'  " 
		RETURN;
	ELSE	q <= s AND nq AFTER 5ns;
			nq <= r AND q AFTER 5ns;
	END IF;
END PROCEDURE rs;
七、NULL语句

占位空操作,不执行任何操作

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值