第五章 VHDL主要描述语句.

Slides:



Advertisements
Similar presentations
什么是SOPC: SOPC是英文System On a Programmable Chip的缩写,称为片上可编程系统。SOPC将传统的EDA技术、计算机系统、嵌入式系统、数字信号处理等融为一体,综合了各自的优势,且在结构上形成一块芯片。 为什么用SOPC:SOPC是现代电子技术和电子系统设计的发展趋势,建立了电子系统设计的新模式。用户利用SOPC开发平台,自行设计高速、高性能的DSP处理器、特定功能的CPU及其外围接口电路,创建结构最为简洁的电子系统。
Advertisements

做实验过程中发现的问题: 新建时工程文件夹建立了,但所建实体文件并没存放在其中 文件名不能用汉字
《 E D A 技 术》 课 程 教 学 讲授:伍宗富 湖南文理学院电气与信息工程学院 2017年3月19日星期日.
第4章 VHDL设计初步.
Combinational Logic 組合邏輯
第6章 VHDL设计应用实例 6.1 8位加法器的设计 6.3 序列检测器的设计 6.4 正负脉宽数控调制信号发生器的设计
电工电子实验中心.
EPF10K10TI144-4晶片燒錄.
硬件描述语言VHDL及其应用 哈工大微电子中心 王 进 祥 讲课地点:A213 电话:
第三章 组合逻辑电路 第一节 组合电路的分析和设计 第二节 组合逻辑电路中的竞争与冒险 第三节 超高速集成电路硬件描述语言VHDL
題目:十六對一多工器 姓名:李國豪 學號:B
第1章 FPGA概述 1.1 FPGA的发展历程 1.2 FPGA的基本原理 1.3 FPGA的设计方法 1.4 FPGA的设计流程
Chapter 1 複習.
數位邏輯 Digital Logic 醫務管理暨醫療資訊學系 陳以德 副教授: 濟世CS 轉
VHDL數位電路實習與專題設計 文魁資訊-UE301
VHDL數位電路實習與專題設計 文魁資訊-UE301
Chapter 5 Verilog 硬體描述語言
8.9二进制振幅键控(ASK) 调制器与解调器设计
Chapter 5 Verilog硬體描述語言
數位邏輯設計-邏輯閘 以LabView實作驗證理論
邏輯設計.
Ch01-2 Verilog語法 資料流(DataFlow)設計 行為(Behavior)設計
VHDL 硬體描述語言 數位電路設計實務 第四章 VHDL 的語言結構.
VHDL 硬體描述語言 數位電路設計實務 第六章 函數副程序以及套件程式庫.
EDA原理及应用 何宾
使用VHDL設計—4位元減法器 通訊一甲 B 楊穎穆.
EDA原理及应用 何宾
使用VHDL設計—4位元加法器 通訊一甲 B 楊穎穆.
第九章 数字系统设计 数字系统设计概述 ASM图、MDS图以及 ASM图至MDS图的转换 数字密码引爆器系统设计 数字系统设计实例 小结.
欢迎参加VHDL培训 VHDL培训教程 浙江大学电子信息技术研究所 电子设计自动化(EDA)培训中心
義守大學電機工程學系 陳慶瀚 第2章 VHDL基本語法 義守大學電機工程學系 陳慶瀚
第13章 数字电路基础 13.1 数字电路概述 13.2 数字电路中的数值与码制 13.3 逻辑代数 13.4 逻辑门电路
使用VHDL設計—向上&向下計數器 通訊一甲 B 楊穎穆.
计算机操作系统 第二章 进程管理 高校教师、高级项目经理 任铄 QQ:
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
新觀念的 VB6 教本 第七章 讓程式轉彎的控制敘述.
Danny Mok Altera HK FAE AHDL培训教材 Danny Mok Altera HK FAE 2018/12/9 P.1.
第2章 Quartus II设计向导 2.1 频率计的VHDL设计 2.2 使用宏功能块设计频率计 2.3 嵌入式系统块ESB的应用
第14章 其它DSP设计库 14.1 总线控制库 14.2 复数信号库 14.3 Gates库 14.4 状态机函数库
使用VHDL設計--Moore Machine
李元金 计算机与信息工程学院 第 4 讲 进程管理(2) 李元金 计算机与信息工程学院 1/
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
EDA 技术实用教程 第 5 章 QuartusII 应用向导.
使用VHDL設計-多工器/解多工器 通訊一甲 B 楊穎穆.
第12章 图像边缘检测器的设计与分析 12.1 系统设计要求 12.2 系统设计方案 12.3 主要LPM原理图和VHDL源程序
第五章 VHDL设计基础 本章重点: 本章难点: VHDL程序结构 VHDL的基本数据类型 VHDL的基本描述语句 基本组合逻辑电路设计
義守大學電機工程學系 陳慶瀚 第3章 VHDL Concurrent語法 義守大學電機工程學系 陳慶瀚
第六章 VHDL设计共享.
移相正弦信号发生器设计 采用直接数字综合器DDS发生器的设计 原理:图1是此电路模型图
義守大學電機工程學系 陳慶瀚 第4章 VHDL Sequential語法 義守大學電機工程學系 陳慶瀚
使用VHDL設計—4位元ALU電路 通訊一甲 B 楊穎穆.
第一次上机安排 第六周 第七周 周一晚(提高1、2,通信001~012) 周二上(通信014~085) 周四上(通信086~154)
抢答器 设计一个2人抢答器。要求如下: 设计任务 1.两人抢答,先抢为有效,用发光二极 管显示是否抢到优先答题权。
计算机学院 数字逻辑实验的要求.
使用VHDL設計 七段顯示器 通訊工程系 一年甲班 姓名 : 蘇建宇 學號 : B
或閘的特性與符號 所有的輸入均為0,輸出才為0 ▲ 圖 3-1 或閘的邏輯概念 ▲ 圖 3-2 或閘的電路符號.
數位邏輯設計 VHDL.
使用VHDL設計-XOR_GATE 通訊一甲 B 楊穎穆.
使用VHDL設計-8x1多工器 通訊一甲 B 楊穎穆.
自停式向下計數器 通訊一甲 B 楊穎穆.
問題解決與流程圖 高慧君 台北市立南港高中 2006年12月22日.
第7章 VHDL设计应用实例 7.1 8位加法器的设计 7.2 分频电路 7.3 数字秒表的设计.
使用VHDL設計-8x3編碼電路 通訊一甲 B 楊穎穆.
可變式計數器 通訊一甲 B 楊穎穆.
使用VHDL設計-七段顯示 通訊一甲 B 楊穎穆.
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2009年10月22日
Programmable Logic System Design
陳慶瀚 機器智慧與自動化技術(MIAT)實驗室 國立中央大學資工系 2013年5月28日
第七章 基本逻辑电路设计.
Programmable Logic System Design
Presentation transcript:

第五章 VHDL主要描述语句

主要内容 概 述 行为描述语句 结构描述语句

5.1 概 述 VHDL中的描述语句了分为顺序语句(Sequential Statements)和并行语句 (Concurrent Statements)两大基本系列。

5.2 行为描述语句 5.2.1 赋值语句 赋值语句有两种,即信号赋值语句和变量赋值语句。每一种赋值语句都有三个基本组成部分,即赋值目标、赋值符号和赋值源。信号赋值语句和变量赋值语句的语法格式如下 : 信号赋值目标 <= 赋值源; 变量赋值目标 := 赋值源; V1 := ‘0’; V2 := ‘1’; S1 <= s1 AND s2; S2 <= s1 OR s2; array 1(0) <= V1; array 1(1) <= V2; array 1(2) <= S1; array 1(3) <= S2; END PROCESS; 标识符、数组元素目标的赋值语句示例如下: SIGNAL s1, s2: STD_LOGIC; SIGNAL array 1: STD_LOGIC_VECTOR(0 TO 3); PROCESS(s1) VARIABLE v1, v2: STD_LOGIC; BEGIN

5.2.2 并行信号赋值语句 1.一般信号赋值语句 信号赋值目标 <= 延迟选项 表达式 延迟表达式; 例5.1 四位并行加法器的数据流描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL  ENTITY ADD4 IS PORT ( A: IN STD_LOGIC_VECTOR (3 DOWNTO 0); B: IN STD_LOGIC_VECTOR (3 DOWNTO 0); CIN : IN STD_LOGIC; SUM : OUT STD_LOGIC_VECTOR ( 3 DOWNTO 0); COUT : OUT STD_LOGIC ); END ADD4; ARCHITECTURE ADD4_concurnt OF ADD4 IS -- 定义包含有进位的SUM信号 SIGNAL SUMINT: STD_LOGIC_VECTOR( 4 DOWNTO 0); BEGIN SUMINT <= ('0' & A) + ('0' & B) + ("0000" & CIN) AFTER 10 ns; COUT <= SUMINT(4) AFTER 15 ns; SUM <= SUMINT(3 DOWNTO 0) AFTER 15 ns; END ADD4_concurnt;

5.2.2 并行信号赋值语句(续1) 2. 条件信号赋值语句 赋值目标 <= 表达式 WHEN 赋值条件 ELSE 5.2.2 并行信号赋值语句(续1) 2. 条件信号赋值语句 赋值目标 <= 表达式 WHEN 赋值条件 ELSE 表达式 WHEN 赋值条件 ELSE … 表达式; 例5.2 3选1多路选择器的行为描述。

5.2.2 并行信号赋值语句(续2) 2. 条件信号赋值语句 例5.2 3选1多路选择器的行为描述。 LIBRARY IEEE; 5.2.2 并行信号赋值语句(续2) 2. 条件信号赋值语句 例5.2 3选1多路选择器的行为描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC 1164.ALL;   ENTITY mux31 IS PORT (a, b, c : IN STD_LOGIC; en1, en2 : IN STD_LOGIC; z :OUT STD_LOGIC); END mux31; ARCHITECTURE behavioral OF mux31 IS BEGIN Z<= a WHEN en2 = '1' ELSE b WHEN en1= '1' ELSE c ; END behavioral;

5.2.2 并行信号赋值语句(续3) 3. 选择信号赋值语句 例5.3 简易的指令译码器设计。 WITH 选择表达式 SELECT 赋值目标信号 <=表达式 WHEN 选择值, 表达式 WHEN 选择值, … 表达式 WHEN 选择值, 表达式 WHEN 选择值; 例5.3 简易的指令译码器设计。

5.2.2 并行信号赋值语句(续4) 3. 选择信号赋值语句 例5.3 简易的指令译码器设计。 LIBRARY IEEE; 5.2.2 并行信号赋值语句(续4) 3. 选择信号赋值语句 例5.3 简易的指令译码器设计。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;  ENTITY DECODER IS PORT (A, B, C : IN STD_LOGIC; data1, data2 : IN STD_LOGIC; data_out : OUT STD_LOGIC); END DECODER;  ARCHITECTURE behavioral OF DECODER IS SIGNAL instruction: STD_LOGIC_VECTOR (0 TO 2); BEGIN Instruction <= A & B & C; WITH instruction SELECT data_out <= NOT data1 WHEN "000", data1 AND data2 WHEN "001", data1 OR data2 WHEN "010", data1 NAND data2 WHEN "011", data1 NOR data2 WHEN "100", data1 XOR data2 WHEN "101", data1 XNOR data2 WHEN "110", ‘Z’ WHEN OTHERS; END behavioral;

5.2.3 顺序控制语句 1. IF语句 第一种形式: IF 条件 THEN --顺序语句; ELSE END IF; 第二种形式: 5.2.3 顺序控制语句 1. IF语句 第一种形式: IF 条件 THEN --顺序语句; ELSE END IF; 第二种形式: IF 条件 THEN --顺序语句; END IF; 第三种形式: IF 条件 THEN --顺序语句; ELSIF 条件 THEN … ELSE END IF; 第四种形式: IF 条件 THEN --顺序语句; ELSIF 条件 THEN … END IF;

1. IF语句(续1) 例5.4 采用两种不同IF语句结构实现同一结构和功能的数据选择器。 ENTITY if_statement IS PORT (A, B, C, X: IN BIT_VECTOR(3 DOWNTO 0); Z: OUT BIT_VECTOR(3 DOWNTO 0)); END if_statement; ARCHITECTURE example1 OF if_statement IS BEGIN PROCESS (A, B, C, X) Z <= A; IF (X="1111") THEN Z<=B; ELSIF (X>"1000") THEN Z<=C; END IF; END PROCESS; END example1;

1. IF语句(续2) 例5.4 采用两种不同IF语句结构实现同一结构和功能的数据选择器。 ARCHITECTURE example2 OF if_statement IS BEGIN PROCESS (A, B, C, X) IF (X="1111") THEN Z<=B; ELSIF (X>"1000") THEN Z<=C; ELSE Z <= A; END IF; END PROCESS; END example2;

1. IF语句(续3) 例5.5 利用IF语句的多分支嵌套实现四选一多路选择器。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;  ENTITY MUX_41 IS PORT (S1, S0, A, B, C, D : IN STD_LOGIC; Z : OUT STD_LOGIC ); END MUX_41; ARCHITECTURE BEHAV_MUX41 OF MUX_41 IS BEGIN P1: PROCESS (S1, S0, A, B, C, D) BEGIN IF S1='0' AND S0= '0' THEN Z <= A; ELSIF S1= '0' AND S0='1' THEN Z <= B; ELSIF S1= '1' AND S0='0' THEN Z <= C; ELSE Z <= D; END IF; END PROCESS P1; END BEHAV_MUX41;

1. IF语句(续4) 例5.6 利用IF语句的多分支嵌套实现四选一多路选择器的错误示例。 P1: PROCESS (S1, S0, A, B, C, D) BEGIN IF S1='0' AND S0= '0' THEN Z <= A; ELSIF S1= '0' AND S0='1' THEN Z <= B; ELSIF S1= '1' AND S0='0' THEN Z <= C; ELSIF S1= '1' AND S0='1' THEN Z <= D; END IF; END PROCESS P1;

5.2.3 顺序控制语句 2. CASE 语句 选择值可以有四种不同的表达方式: 单个普通数值,如选择值_1; 5.2.3 顺序控制语句 2. CASE 语句 CASE 表达式 IS WHEN 选择值_1 =>顺序语句; WHEN 选择值_2|选择值_3 =>顺序语句; WHEN 选择值_4 TO选择值_N =>顺序语句; WHEN OTHERS=>顺序语句; END CASE; 选择值可以有四种不同的表达方式: 单个普通数值,如选择值_1; 并列数值,如选择值_2|选择值_3,表示取值为选择值_2或者选择值_3; 数值选择范围,如选择值_4 TO 选择值_N,表示取值可以是该范围中的任意一个; 混合方式,以上三种方式的混合。

2. CASE 语句(续1) 例5.7 CASE 语句描述的8线-3线编码器。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;   ENTITY encoder_83 IS PORT (s: IN STD_LOGIC_VECTOR (7 DOWNTO 0); z: OUT STD_LOGIC_VECTOR (2 DOWNTO 0)); END encoder_83; ARCHITECTURE behavioral OF encoder_83 IS BEGIN PROCESS (s) CASE s IS WHEN "11111110" => z <= "000"; WHEN "11111101" => z <= "001"; WHEN "11111011" => z <= "010"; WHEN "11110111" => z <= "011"; WHEN "11101111" => z <= "100"; WHEN "11011111" => z <= "101"; WHEN "10111111" => z <= "110"; WHEN "01111111" => z <= "111"; WHEN OTHERS => z <= "XXX"; END CASE; END PROCESS; END behavioral;

2. CASE 语句(续2) 例5.8 整型数据类型的范围。 ENTITY range_1 IS PORT (A, B, C, X: IN INTEGER RANGE 0 TO 15; Z: OUT INTEGER RANGE 0 TO 15); END range_1;   ARCHITECTURE example OF range_1 IS BEGIN PROCESS( A, B, C, X) BEGIN CASE X IS WHEN 0 => Z <= A; WHEN 7|9 => Z<=B; WHEN 1 TO 5 => Z<=C; WHEN OTHERS => Z<=0; END CASE; END PROCESS; END example;

2. CASE 语句(续3) 例5.9 数组数据类型范围的错误用法。 ENTITY range_2 IS PORT (A, B, C, X: IN BIT_VECTOR(3 DOWNTO 0); Z: OUT BIT_VECTOR(3 DOWNTO 0)); END range_2;   ARCHITECTURE example OF range_2 IS BEGIN PROCESS(A, B, C, X) CASE X IS WHEN "0000" => Z <= A; WHEN "0111" | "1001" => Z <= B; --错误用法,数组元素没有大小关系 WHEN "0001" TO "0101" => Z <= C; WHEN OTHERS =>Z <= 0; END CASE; END PROCESS; END example;

5.2.3 顺序控制语句 3. LOOP 语句 FOR LOOP的语句格式如下: WHILE LOOP的语句格式如下: LOOP 标号: 5.2.3 顺序控制语句 3. LOOP 语句 FOR LOOP的语句格式如下: LOOP 标号: FOR 循环变量 IN 循环次数范围 LOOP 顺序语句 END LOOP LOOP 标号; WHILE LOOP的语句格式如下: LOOP标号: WHILE 循环控制条件 LOOP 顺序语句 END LOOP LOOP 标号;

3. LOOP 语句(续1) 例5.10 FOR LOOP语句使用示例。 ENTITY for_loop IS PORT(A: IN INTEGER RANGE 0 TO 3; Z: OUT BIT_VECTOR (3 DOWNTO 0)); END for_loop;   ARCHITECTURE example OF for_loop IS BEGIN PROCESS(A) Z<="0000"; FOR i IN 0 TO 3 LOOP IF(A=i) THEN Z(i) <='1'; END IF; END LOOP; END PROCESS; END example;

3. LOOP 语句(续2) 例5.11 利用LOOP语句将向量转化为整数输出。 ENTITY conv_int IS PORT (vect: IN BIT_VECTOR (7 DOWNTO 0); result: OUT INTEGER); END conv_int;   ARCHITECTURE A OF conv_int IS BEGIN PROCESS (vect) VARIABLE tmp: INTEGER; tmp:= 0; FOR i IN 7 DOWNTO 0 LOOP IF (vect (i) = '1') THEN tmp:= tmp + 2**i; END IF; END LOOP; result <= tmp; END PROCESS; END A; ARCHITECTURE B OF conv_int IS BEGIN PROCESS (vect) VARIABLE tmp: INTEGER; VARIABLE i: INTEGER; tmp:= 0; i:= vect' high WHILE (i >= vect' low) LOOP IF (vect (i) = '1') THEN tmp:= tmp + 2**i; END IF; i:= i - 1; --修改循环变量 END LOOP; result <= tmp; END PROCESS; END B;

5.2.3 顺序控制语句 4. NEXT语句和EXIT语句 NEXT的语句四种形式: EXIT语句四种形式: NEXT; 5.2.3 顺序控制语句 4. NEXT语句和EXIT语句 NEXT的语句四种形式: NEXT; NEXT LOOP标号; NEXT WHEN 条件表达式; NEXT LOOP标号 WHEN 条件表达式; EXIT语句四种形式: EXIT; EXIT LOOP标号; EXIT WHEN 条件表达式; EXIT LOOP标号 WHEN 条件表达式;

5.2.4 NULL语句 例5.12 NULL语句的应用示例。 空语句不会执行任何操作,其语句格式为:NULL; ENTITY EX_WAIT IS PORT ( CNTL: IN INTEGER RANGE 0 TO 31; A, B: IN STD_LOGIC_VECTOR(7 DOWNTO 0); Z: OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ); END EX_WAIT;   ARCHITECTURE arch_wait OF EX_WAIT IS BEGIN P_WAIT: PROCESS (CNTL) Z <=A; CASE CNTL IS WHEN 3 | 15 =>Z <= A XOR B; WHEN OTHERS =>NULL; END CASE; END PROCESS P_WAIT; END arch_wait;

5.2.5 WAIT语句 WAIT语句的语句格式有如下四种形式: 例5.13 利用WAIT语句描述的D触发器模块。 WAIT UNTIL 条件表达式; WAIT FOR 时间表达式; WAIT ON 信号列表; WAIT; 例5.13 利用WAIT语句描述的D触发器模块。 ENTITY FF IS PORT (D, CLK: IN BIT; Q: OUT BIT); END FF; ARCHITECTURE BEH_1 OF FF IS BEGIN PROCESS BEGIN WAIT UNTIL CLK= '1'; Q <= D; END PROCESS; END BEH_1;

5.2.6 进程语句 1. 进程语句的格式 2. 进程设计要点 进程标号:PROCESS ( 敏感信号参数列表 ) 进程说明部分 BEGIN 5.2.6 进程语句 1. 进程语句的格式 进程标号:PROCESS ( 敏感信号参数列表 ) 进程说明部分 BEGIN 顺序描述语句 END PROCESS 进程标号; 2. 进程设计要点 同一结构体中的多个进程之间是并行运行的,但每一进程中的逻辑描述语句是顺序运行的。 进程只能存在于结构体内。 一个进程的执行是事件触发的,或者将可能的事件源列在敏感信号参数表中,或者直接使用WAIT语句来控制进程的执行。 同一设计中的所有进程都是并行运行的,各进程彼此之间的通信是通过列于敏感信号参数表中的信号进行的。 如果使用了标号,那末在进程结束语句中必须重复标号。

5.2.6 进程语句(续1) 3. 进程语句设计实例 例5.14 进程中敏感信号参数表和IF语句的使用。 LIBRARY IEEE; 5.2.6 进程语句(续1) 3. 进程语句设计实例 例5.14 进程中敏感信号参数表和IF语句的使用。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY comp_list IS PORT (A, B, SEL: IN STD_LOGIC; Z: OUT STD_LOGIC); END comp_list; ARCHITECTURE RTL OF comp_list IS BEGIN PROCESS (A, B, SEL) BEGIN IF SEL = '1' THEN Z <= A; ELSE Z <= B; END IF; END PROCESS; END RTL;

3. 进程语句设计实例(续2) 例5.15 无复位十进制加法计数器的描述。 ARCHITECTURE A OF counter IS SIGNAL count: INTEGER RANGE 0 TO 15 ; BEGIN PROCESS(CLK) BEGIN IF CLK‘EVENT AND CLK = ’1‘ THEN IF (count >= 9) THEN count <= 0; ELSE count <= count+1; END IF; END IF; END PROCESS; Q <= count; END A; LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;   ENTITY counter IS PORT( CLK: IN STD_LOGIC; Q:OUT INTEGER RANGE 0 TO 15 ); END counter;

3. 进程语句设计实例(续3) 例5.16 带异步复位、置位端的D触发器描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY ASYNC_FF IS PORT (D, CLK, SET, RST: IN STD_LOGIC; Q: OUT STD_LOGIC); END ASYNC_FF; ARCHITECTURE A OF ASYNC_FF IS BEGIN PROCESS (CLK, RST, SET) BEGIN IF(RST = ‘1’ ) THEN Q <= ‘0’; ELSIF SET =‘1’ THEN Q <= ‘1’; ELSIF (CLK‘ EVENT AND CLK = ’1‘ ) THEN Q <= D; END IF; END PROCESS; END A; END counter;

3. 进程语句设计实例(续4) 例5.17 移位寄存器的描述。 -- 基本移位寄存器的描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;   ENTITY basic_shift_register IS GENERIC ( num_stages : NATURAL := 16 ); PORT clk : IN STD_LOGIC; enable : IN STD_LOGIC; sr_in : IN STD_LOGIC; sr_out : OUT STD_LOGIC END ENTITY;

3. 进程语句设计实例(续5) 例5.17 移位寄存器的描述。 ARCHITECTURE rtl OF basic_shift_register IS -- 为基本移位寄存器构造一个数组类型 TYPE sr_length IS ARRAY ((num_stages-1) DOWNTO 0) OF STD_LOGIC; -- 声明移位寄存器内部信号 SIGNAL sr: sr_length; BEGIN PROCESS (clk) IF (clk' EVENT and clk = '1') THEN IF (enable = '1') THEN -- 左移一位,且最高位数据丢失 sr((num_stages-1) DOWNTO 1) <= sr((num_stages-2) DOWNTO 0); sr(0) <= sr_in; -- 装载最低位的新数据 END IF; END PROCESS; -- 在最高位数据丢失前将其输出 sr_out <= sr(num_stages-1); END rtl;

3. 进程语句设计实例(续6) 例5.17 移位寄存器的描述。 类属说明语句的一般书写格式如下: GENERIC( 常数名:数据类型:设定值; … 常数名:数据类型:设定值 ); 图5.8 例5.17的时序仿真图

3. 进程语句设计实例(续7) 例5.18 二进制加法/减法计数器的描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL;   ENTITY binary_up_down_counter IS   GENERIC(min_count : NATURAL := 0; max_count : NATURAL := 255);   PORT(clk : IN STD_LOGIC; reset : IN STD_LOGIC; enable : IN STD_LOGIC; updown : IN STD_LOGIC; q : OUT INTEGER RANGE min_count TO max_count); END ENTITY;

3. 进程语句设计实例(续8) 例5.18 二进制加法/减法计数器的描述。 ARCHITECTURE rtl OF binary_up_down_counter IS SIGNAL direction : INTEGER; --定义计数方向信号 BEGIN Proc1: PROCESS (updown) IF (updown = ‘1’) THEN direction <= 1; ELSE direction <= -1; END IF; END PROCESS Proc1; Proc2: PROCESS (clk) VARIABLE cnt: INTEGER RANGE min_count TO max_count; IF ( clk' EVENT and clk = '1' ) THEN IF reset = '1' THEN cnt := 0; --计数器复位 ELSIF enable = ‘1’ THEN cnt := cnt + direction; -- 加法/减法计数 q <= cnt; -- 输出当前计数值 END PROCESS Proc2; END rtl;

3. 进程语句设计实例(续9) 例5.18 二进制加法/减法计数器的描述。 例5.18的时序仿真图

5.3 结构描述语句 5.3.1 元件例化语句 1. 元件声明(Component Declaration) 所有准备使用的元件都需要通过元件声明语句声明,并必须放置在当前设计结构体中关键字BEGIN之前。 COMPONENT 例化元件名 IS GENERIC ( 类属表 ); PORT( 例化元件端口名表 ); END COMPONENT; 2.元件例化(Component Instantiation) 元件例化语句必须放置在当前设计结构体中关键字BIGIN之后的说明部分。 例化元件标号:例化元件名 PORT MAP( 端口映射表 );

5.3.1 元件例化语句(续1) 例5.22 16进制加法计数器的描述 LIBRARY IEEE; 例5.22 16进制加法计数器的描述 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.NUMERIC_STD.ALL;   ENTITY counter_16 IS PORT( Clk : IN STD_LOGIC; reset : IN STD_LOGIC; enable : IN STD_LOGIC; out_q : OUT INTEGER RANGE 0 TO 16 ); END ENTITY;

5.3.1 元件例化语句(续2) 例5.22 16进制加法计数器的描述 ARCHITECTURE inst OF counter_16 IS 例5.22 16进制加法计数器的描述 ARCHITECTURE inst OF counter_16 IS COMPONENT binary_up_down_counter IS GENERIC ( min_count : NATURAL := 0; max_count : NATURAL := 16 --更改了最大计数值); PORT( clk : IN STD_LOGIC; reset : IN STD_LOGIC; enable : IN STD_LOGIC; updown : IN STD_LOGIC:= '1';--只保留加法计数 q : OUT INTEGER RANGE min_count TO max_count ); END COMPONENT binary_up_down_counter; BEGIN u1: binary_up_down_counter PORT MAP( clk => clk, reset => reset, enable => enable, q => out_q ); END inst;

5.3.1 元件例化语句(续3) 例5.22 16进制加法计数器的描述 例5.22的时序仿真图

5.3.2 配置语句 例5.23 一位全加器中配置语句的使用。 CONFIGURATION 配置名 OF 实体名 IS FOR 选配结构体名 配置说明 END FOR; END 配置名; 例5.23 一位全加器中配置语句的使用。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;   ENTITY fulladder_cfg IS PORT (a, b, ci: IN STD_LOGIC; S, co: OUT STD_LOGIC); END fulladder_cfg;

5.3.2 配置语句(续1) 例5.23 一位全加器中配置语句的使用。 例5.23 一位全加器中配置语句的使用。 ARCHITECTURE behavioral OF fulladder_cfg IS --以下是一位全加器结构体行为描述 BEGIN S <= '1' WHEN (a= '0' AND b= '1' AND ci= '0') ELSE '1' WHEN (a= '1' AND b= '0' AND ci= '0') ELSE '1' WHEN (a= '0' AND b= '0' AND ci= '1') ELSE '1' WHEN (a= '1' AND b= '1' AND ci= '1') ELSE '0'; co <= '1' WHEN (a= '1' AND b= '1' AND ci= '0') ELSE '1' WHEN (a= '0' AND b= '1' AND ci= '1') ELSE '1' WHEN (a= '1' AND b= '0' AND ci= '1') ELSE END behavioral; ARCHITECTURE Dataflow OF fulladder_cfg IS --以下是一位全加器结构体数据流描述 S <= a XOR b XOR ci; co <= (a AND b) OR (b AND ci) OR (a AND ci); END Dataflow; --以下是结构体的配置 CONFIGURATION first OF fulladder_cfg IS FOR behavioral END FOR; END first; END fulladder_cfg;

5.3.2 配置语句(续2) 例5.24 四位串行加法器的结构描述。 LIBRARY IEEE; 例5.24 四位串行加法器的结构描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; --以下是四位串行加法器的实体描述 ENTITY fulladder_4 IS PORT (ain, bin : IN STD_LOGIC_VECTOR(3 DOWNTO 0); Cin : IN STD_LOGIC; Sum : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); Coun t: OUT STD_LOGIC); END fulladder_4; --以下是四位全加器结构体描述 ARCHITECTURE inst OF fulladder_4 IS -- 假定fulladder_cfg已在work目录中,且结构体没有配置 COMPONENT fulladder_cfg IS PORT (a, b, ci: IN STD_LOGIC; s, co: OUT STD_LOGIC); END COMPONENT; SIGNAL carry: STD_LOGIC_VECTOR(3 DOWNTO 1); --定义内部进位信号 BEGIN u1: fulladder_cfg PORT MAP(a => ain(0), b => bin(0), ci => cin, s => sum(0), co => carry(1) ); u2: fulladder_cfg PORT MAP( a => ain(1), b => bin(1), ci => carry(1), s => sum(1), co => carry(2) ); u3: fulladder_cfg PORT MAP(a => ain(2), b => bin(2), ci => carry(2), s => sum(2), co => carry(3) ); u4: fulladder_cfg PORT MAP(a => ain(3), b => bin(3), ci => carry(3), s => sum(3), co => count ); END inst;

5.3.2 配置语句(续3) 例5.24 四位串行加法器的结构描述。 --以下是一位全加器的结构体配置 例5.24 四位串行加法器的结构描述。 --以下是一位全加器的结构体配置 CONFIGURATION sel OF fulladder_4 IS FOR inst FOR u1,u2: fulladder_cfg USE ENTITY WORK.fulladder_cfg(behavioral); END FOR; FOR OTHERS: fulladder_cfg --本例中为u3、u4 USE ENTITY WORK.fulladder_cfg(Dataflow); END sel;

5.3.3 生成语句 生成语句的语句格式有如下两种形式: 标号:FOR 循环变量 取值范围 GENERATE 说明语句 BEGIN 并行语句 5.3.3 生成语句 生成语句的语句格式有如下两种形式: 标号:FOR 循环变量 取值范围 GENERATE 说明语句 BEGIN 并行语句 END GENERATE 标号;   标号: IF 条件 GENERATE

5.3.3 生成语句(续1) 例5.25 带异步复位、置位端的4位D触发器的描述。 LIBRARY IEEE; 5.3.3 生成语句(续1) 例5.25 带异步复位、置位端的4位D触发器的描述。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; --4位D触发器的实体描述 ENTITY ASYNC_FF_4 IS PORT (D, SET : IN STD_LOGIC_VECTOR(3 DOWNTO 0); CLK, RST: IN STD_LOGIC; Q: OUT STD_LOGIC_VECTOR(3 DOWNTO 0)); END ASYNC_FF_4; --4位D触发器的结构体描述 ARCHITECTURE GENER OF ASYNC_FF_4 IS COMPONENT ASYNC_FF -- 需要确定ASYNC_FF已在work库中 PORT (D, CLK, SET, RST: IN STD_LOGIC; Q: OUT STD_LOGIC); END COMPONENT;

5.3.3 生成语句(续2) 例5.25 带异步复位、置位端的4位D触发器的描述。 BEGIN lable: 5.3.3 生成语句(续2) 例5.25 带异步复位、置位端的4位D触发器的描述。 BEGIN lable: FOR i IN 3 DOWNTO 0 GENERATE U1: ASYNC_FF PORT MAP( D => D(i), CLK => CLK, SET => SET(i), RST => RST, Q => Q(i) ); END GENERATE lable; END GENER;

5.3.4 块语句 块语句应用只是一种将结构体中的并行描述语句进行组合的方法,它的主要目的是改善并行语句及其结构的可读性。 5.3.4 块语句 块语句应用只是一种将结构体中的并行描述语句进行组合的方法,它的主要目的是改善并行语句及其结构的可读性。 块标号:BLOCK 接口说明 类属说明 BEGIN 并行语句 END BLOCK 块标号;

5.3.4 块语句(续) 例5.27 块语句应用示例1。 LIBRARY IEEE; 5.3.4 块语句(续) 例5.27 块语句应用示例1。 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL;  ENTITY block_test IS PORT(a, b: IN STD_LOGIC; s, c :OUT STD_LOGIC ); END;  ARCHITECTURE example OF block_test IS BEGIN rr1:BLOCK --块定义 PORT(a1,b1:IN STD_LOGIC;--块中的端口定义 s1: OUT STD_LOGIC; c1: OUT STD_LOGIC); PORT MAP(a1=>a,b1=>b,s1=>s,c1=>c);--端口映射说明 p1:PROCESS(a1,b1)--使用的是块定义的局部变量 s1 <= a1 XOR b1; END PROCESS p1; p2:PROCESS(a1,b1) c1 <= a1 AND b1; END PROCESS p2; END BLOCK rr1; END ARCHITECTURE example;

本章小结 结构体描述语句分为顺序语句和并行语句两大基本系列, 其中顺序语句是按照代码的书写顺序一条一条顺序执行的, 描述的是硬件电路中各支路信号传输的特性;而并行语句 具有多进程并发性,各并行语句是同时执行的,与其书写 顺序无关,很好地描述了硬件电路中各分支电路同时并行 工作的特性。 结构体的描述有行为描述、数据流描述和结构描述三种方 式。 行为描述语句包括赋值语句、并行信号赋值语句、顺序控 制语句、NULL语句、WAIT语句和进程语句。 结构描述语句包括元件例化语句、配置语句、生成语句和 块语句。