Professional Documents
Culture Documents
第5章
康芯科技
KX
【例 5-4 】
ENTITY mux21a IS
PORT ( a, b, s: IN BIT;
y : OUT BIT );
END ENTITY mux21a;
ARCHITECTURE one OF mux21a IS
BEGIN
PROCESS (a,b,s) BEGIN
IF s = '0' THEN
y <= a ; ELSE y <= b ;
END IF;
END PROCESS;
END ARCHITECTURE one ;
康芯科技
KX
5.1.1 2 选 1 多路选择器的 VHDL 描述
1. 实体表达 【例 5-5 】
ENTITY e_name IS
或:
【例 5-6 】
ENTITY e_name IS
2. 实体名
3. PORT 语句和端口信号
名
4. 端口模式
5. 数据类型 BIT
康芯科技
KX
5.1.2 VHDL 相关语句说明
6. 结构体表达 【例 5-7 】
ARCHITECTURE arch_name OF e_name IS
( 说明语句 )
BEGIN
( 功能描述语句 )
END ARCHITECTURE arch_name ;
或:
【例 5-8 】
ARCHITECTURE arch_name OF e_name IS
( 说明语句 )
BEGIN
( 功能描述语句 )
END arch_name ;
7. 信号传输 ( 赋值 ) 符号和数据比较符
号
康芯科技
KX
5.1.2 VHDL 相关语句说明
8. 逻辑操作符
AND 、 OR 、 NOT
9. IF_THEN 条件语句
12. 文件取名和存盘
康芯科技
KX
5.1.3 VHDL 设计的基本概念和语句小节
实体
实体 结构体
结构体 端口定义
端口定义 端口模式
端口模式
数据类型
数据类型 信号赋值符
信号赋值符 条件比较符
条件比较符 延时
延时
逻辑操作符
逻辑操作符 IF条件语句
IF 条件语句 并行条件语句
并行条件语句 进程语句
进程语句
顺序语句
顺序语句 并行语句
并行语句 文件取名
文件取名 文件存盘
文件存盘
康芯科技
KX
5.2 寄存器描述及其 VHDL 语言现象
5.2.1 D 触发器的 VHDL 描述
【例 5-9 】
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DFF1 IS
PORT (CLK : IN STD_LOGIC ;
D : IN STD_LOGIC ;
Q : OUT STD_LOGIC );
END ; D 触发器
ARCHITECTURE bhv OF DFF1 IS
SIGNAL Q1 : STD_LOGIC ; -- 类似于在芯片内部定义一个数据的暂存节点
BEGIN
PROCESS (CLK)
BEGIN
IF CLK'EVENT AND CLK = '1'
THEN Q1 <= D ;
END IF;
Q <= Q1 ; -- 将内部的暂存数据向端口输出
END PROCESS ;
END bhv;
康芯科技
KX
比较用 5 种不同语句的 D 触发器 VHDL 程序
Entity test1 is LIBRARY IEEE; Entity test1 is Entity test1 is
port (clk, d : in bit; USE port (clk : in bit; port (clk : in bit;
q : out bit); IEEE.std_logic_1164.all; d : in bit; d : in bit;
end test1; Entity test1 is q : out bit); q : out bit);
architecture body of test1 is port (clk, d : in bit; end test1; end test1;
signal q1 : bit ; q : out bit); architecture body architecture body
begin end test1; of test1 is of test1 is
process (clk) architecture body of test1 is signal q1 : bit ; signal q1 : bit ;
begin begin begin begin
if clk='1' AND process (clk,d) process (clk) process (clk , d)
clk’last_value='0' begin begin begin
then if rising_edge(clk) then if (clk = ‘1’) if (clk = ‘1’)
q1 <= d; q <= d; then then
end if; end if; q1 <= d; q1 <= d;
q <= q1 ; end process; end if; end if;
end process; end test1_body; q <= q1 ; q <= q1 ;
end test1_body; end process; end process;
end body; end body;
康芯科技
KX
How Many Registers?
ENTITY reg1 IS
PORT ( d : in BIT;
clk : in BIT;
q : out BIT);
END reg1;
取整数数据类型,为什么?
整数取值范围
端口信号模式取
BUFFER ,为什么?
A
0 1
B 0 0 1
1 1 0
注意整数和位的不同表达方式!
康芯科技
修改后的程序 KX
运算符加载
注意,信号
端口模式和
数据类型的
改变!
注意,引
进内部信
号矢量!
康芯科技
KX
组合电路加 1 器 4 位锁存器
输出反馈
锁存信号
康芯科技
用 VHDL 设计 7 段 16 进制译码器 KX
用 CASE 语句完成真值表的功能
向 7 段数码
管输出信号,
最高位控制
小数点
康芯科技
KX
注意,此语句必须加入
44 位加法
位加法
计数器
计数器
77 段译码器
段译码器 信
号
8 位总线输出 输
出
康芯科技
KX
数据对象
信号 Signal 和变量 Variable
Signal Assignment
receive the assign value after a period of time
Variable Assignment
happens immediately when the statement is
executed, no delay
康芯科技
KX
Signals vs. Variables
SIGNALS VARIABLES
外部端口
内部端口
端口连线
康芯科技
KX
康芯科技
KX
5.2.2 D 触发器 VHDL 描述的语言现象说明
1. 标准逻辑位数据类型 STD_LOGIC
BIT 数 据 类 型 定 义 : TYPE BIT
IS('0','1');
STD_LOGIC 数据类型定义:
TYPE STD_LOGIC IS
('U','X','0','1','Z','W','L','H','-');
2. 设计库和标准程序包
使用库和程序包的一般定义表式是:
LIBRARY < 设计库名 >;
USE < 设计库名 >.< 程序包名 >.ALL ;
3. SIGNAL 信号定义和数据对
象 【例 5-10 】
ARCHITECTURE bhv OF DFF1 IS
BEGIN
PROCESS (CLK)
BEGIN
IF CLK'EVENT AND CLK = '1'
THEN Q <= D ;
END IF;
END PROCESS ;
END ;
康芯科技
KX
5.2.2 D 触发器 VHDL 描述的语言现象说明
4. 上升沿检测表式和信号属性函数 EVENT
5. 不完整条件语句与时序电路
【例 5-11 】
ENTITY COMP_BAD IS
PORT( a1 : IN BIT;
b1 : IN BIT;
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 ;
康芯科技
KX
5. 不完整条件语句与时序电路
【例 5-13 】
...
PROCESS (CLK)
BEGIN
IF CLK'EVENT AND (CLK='1') AND (CLK'LAST_VALUE='0')
THEN Q <= D ; -- 确保 CLK 的变化是一次上升沿的跳变
END IF;
END PROCESS ;
【例 5-14 】
...
PROCESS (CLK)
BEGIN
IF CLK='1' AND CLK'LAST_VALUE='0' -- 同例 5-13
THEN Q <= D ;
END IF;
END PROCESS ;
康芯科技
KX
5.2.3 实现时序电路的 VHDL 不同表达方式
【例 5-15 】
LIBRARY IEEE ;
USE IEEE.STD_LOGIC_1164.ALL ;
ENTITY DFF3 IS
PORT (CLK : IN STD_LOGIC ;
D : IN STD_LOGIC ;
Q : OUT STD_LOGIC );
END ;
ARCHITECTURE bhv OF DFF3 IS
SIGNAL Q1 : STD_LOGIC;
BEGIN
PROCESS (CLK)
BEGIN
IF rising_edge(CLK) -- CLK 的数据类型必须是 STD_LOGIC
THEN Q1 <= D ;
END IF;
Q <= Q1 ;
END PROCESS ;
END ;
康芯科技
5.2.3 实现时序电路的 VHDL 不同表达方式
KX
【例 5-16 】 ...
PROCESS
BEGIN
wait until CLK = '1' ; -- 利用 wait 语句
Q <= D ;
END PROCESS;
【例 5-17 】 ...
PROCESS (CLK)
BEGIN
IF CLK = '1'
THEN Q <= D ; -- 利用进程的启动特性产生对 CLK 的边沿检测
END IF;
END PROCESS ;
【例 5-18 】 ...
PROCESS (CLK , D) BEGIN
IF CLK = '1' -- 电平触发型寄存器
THEN Q <= D ;
END IF;
END PROCESS ;
康芯科技
KX
5.2.3 实现时序电路的 VHDL 不同表达方式
图 5-7 边沿型触发器时序波
形
图 5-8 电平触发型寄存器的时序波形
康芯科技
5.2.4 异步时序电路设计 【例 5-19 】 KX
...
ARCHITECTURE bhv OF MULTI_DFF IS
SIGNAL Q1,Q2 : STD_LOGIC;
BEGIN
PRO1: PROCESS (CLK)
BEGIN
IF CLK'EVENT AND CLK='1'
THEN Q1 <= NOT (Q2 OR A);
END IF;
END PROCESS ;
PRO2:PROCESS (Q1)
BEGIN
IF Q1'EVENT AND Q1='1' 图 5-9 例 5-19 综合的电
THEN Q2 <= D; 路
END IF;
QQ <= Q2 ;
END PROCESS ;
康芯科技
KX
5.2.5 VHDL 设计基本概念和语言现象小节
VHDL库
VHDL 库 程序包
程序包 数据类型
数据类型
数据对象
数据对象 信号属性
信号属性
时钟检测
时钟检测 时序电路
时序电路 异步时序
异步时序
康芯科技
KX
5.3 1 位二进制全加器的 VHDL 设计
a b so co
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
1. CASE 语句
CASE 语句的一般表式是:
2. 标准逻辑矢量数据类型 STD_LOGIC_VECTOR
3. 并置操作符
以下是一些并置操作示例:
【例 5-20 】
LIBRARY IEEE ;-- 或门逻辑描述
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY or2a IS
PORT (a, b :IN STD_LOGIC;
c : OUT STD_LOGIC );
END ENTITY or2a ;
ARCHITECTURE one OF or2a IS
BEGIN 【例 5-21 】
c <= a OR b ; LIBRARY IEEE; -- 半加器描述 (1)
END ARCHITECTURE fu1; USE IEEE.STD_LOGIC_1164.ALL;
ENTITY adder IS
PORT (a, b : IN STD_LOGIC;
co, so : OUT STD_LOGIC);
END ENTITY adder;
ARCHITECTURE fh1 OF adder is
BEGIN
so <= NOT(a XOR (NOT b)) ;
co <= a AND b ;
END ARCHITECTURE fh1;
康芯科技
KX
【例 5-22 】
LIBRARY IEEE; -- 半加器描述 (2)
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY h_adder IS
PORT (a, b : IN STD_LOGIC;
co, so : OUT STD_LOGIC);
END ENTITY h_adder;
ARCHITECTURE fh1 OF h_adder is
SIGNAL abc : STD_LOGIC_VECTOR(1 DOWNTO 0) ;
BEGIN
abc <= a & b ;
PROCESS(abc)
BEGIN
CASE abc IS
WHEN "00" => so<='0'; co<='0' ;
WHEN "01" => so<='1'; co<='0' ;
WHEN "10" => so<='1'; co<='0' ;
WHEN "11" => so<='0'; co<='1' ;
WHEN OTHERS => NULL ;
END CASE;
END PROCESS;
END ARCHITECTURE fh1 ;
康芯科技
KX
【例 5-22 】
... -- 半加器描述 (3)
SIGNAL abc,cso : STD_LOGIC_VECTOR(1 DOWNTO 0 );
BEGIN
abc <= a & b ; co <= cso(1) ; so <= cso(0) ;
PROCESS(abc)
BEGIN
CASE abc IS
WHEN "00" => cso<="00" ;
WHEN "01" => cso<="01" ;
WHEN "10" => cso<="01" ;
WHEN "11" => cso<="10" ;
END CASE;
END PROCESS;
END ARCHITECTURE fh1;
康芯科技
KX
【例 5-23 】
LIBRARY IEEE; --1 位二进制全加器顶层设计描述
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY f_adder IS
PORT (ain , bin , cin : IN STD_LOGIC;
cout , sum : OUT STD_LOGIC );
END ENTITY f_adder;
ARCHITECTURE fd1 OF f_adder IS
COMPONENT h_adder
PORT ( a , b : IN STD_LOGIC;
co , so : OUT STD_LOGIC);
END COMPONENT ;
COMPONENT or2a
PORT (a , b : IN STD_LOGIC;
c : OUT STD_LOGIC);
END COMPONENT ;
SIGNAL d , e , f : STD_LOGIC;
BEGIN
u1 : h_adder PORT MAP(a=>ain , b=>bin , co=>d , so=>e);
元件例化语句由两部分组成,第一部分是对一个现成的设计实体
定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最
简表达式如下所示:
COMPONENT 元件名 IS
PORT ( 端口名表 ) ;
END COMPONENT 文件名 ;
元件例化语句的第二部分则是此元件与当前设计实体 ( 顶层文
件 ) 中元件间及端口的连接说明。语句的表达式如下:
例化名 : 元件名 PORT MAP( [ 端口名 =>] 连接端口名 ,.
..);
康芯科技
KX
VHDL 设计流程 : V-S-F-P
Use any Text Editor
VHDL to input your design
Entry
Use any VHDL
Compiler to convert
Synthesis your language design
to Gate level with
optimization in term
of Speed / Area
To map the logic
Fitting to Altera Device Architecture
Architecture Synthesis e.g. LUT, Carry/Cascade Chain,
EAB......(further logic optimization)
VHDL 文本输入设计流程
STEP11 : STEP10 :编程 STEP9 :引脚 STEP8 :仿真测 STEP7 :建立仿 STEP6 :
硬件测试 下载 / 配置 锁定并编译 试和波形分析 真波形文件 启动编译
康芯科技
5.4 VHDL 文本输入设计方法初步 K
为设计全加器
X
新建一个文
件夹作工作库
文件夹名取为
My_prjct
注意,不可
用中文!
康芯科技
新建一个设
KX
计文件
使用文本输入方
法设计,必须选择
打开文本编辑器
用键盘输入设计
文件:多路选择器
注意,要存在
自己建立的
文件夹中
文本编辑窗
文件存盘后,
关键词将改变
颜色!否则文
件名一定有错!
康芯科技
KX
最后注意此路
径指向的改变
首先点击这里
然后选择此项,
将当前的原理图
设计文件设置成
工程
图 5-14 设定当前文件为工程
5.4.2 将当前设计设定为工程
康芯科技
KX
注意,此路径指
向当前的工程!
康芯科技
KX
首先选择这里
器件系列选择
窗,选择 ACEX1K
系列
根据实验板上的
目标器件型号选
择,如选 EP1K30
注意,首先消去
这里的勾,以便
使所有速度级别
的器件都能显示
出来
康芯科技
KX
选择编译器
编译窗
5.4.3 选择 VHDL 文本编译版本号和排错 康芯科技
KX
选择此项
选择 VHDL1993 项
选择此项
消去这里的勾
康芯科技
KX
编译出错!
康芯科技
5.4.3 选择 VHDL 文本编译版本号和排错
KX
打开错误提示窗
图 5-16 确定设计文件中的错误
康芯科技
KX
错误所在
错误所在
康芯科技
KX
改正错误
康芯科技
完成编译! KX
康芯科技
时序仿真 首先选择此项, KX
为仿真测试新
建一个文件
选择波形
编辑器文件
康芯科技
KX
从 SNF 文件中
输入设计文件
的信号节点
点击“ LIST”
康芯科技
KX
SNF 文件中
的信号节点
用此键选择左窗
中需要的信号
进入右窗
最后点击“ OK”
康芯科技
KX
消去这里的勾,
以便方便设置
输入电平
选择 END TIME
选择 65 微秒
调整仿真时间
比较合适
区域。
康芯科技
KX
先点击‘ b’ ,将其
点为黑色
用此键改变仿真 设置输入信号‘ b’
区域坐标到合适 的周期为 800ns
位置。
设置输入信号‘ a’
的周期为 2us
康芯科技
KX
仿真波形文件
存盘!
康芯科技
KX
选择仿真器
运行仿真器
康芯科技
5.4.4 时序仿真 KX
信号 a 和 b 输入
两个不同频率
的时钟信号
选择实验电路结构图 6
可选择键 8 作为多
路选择器的输入“ s”
康芯科技
KX
选择实验板上
插有的目标器件
键 8 的引脚名
作为“ s” 信号 键 8 的引脚名
对应的引脚号
康芯科技
KX
扬声器引脚号
为: 99
康芯科技
KX
注意,对于 GWAK30+ 板,
时钟引脚必须查阅以下
“ 时钟了解表 1”
信号 b 由 信号 a 由
“clock0” 输入 “clock5” 输入
时钟信号, 时钟信号,
引脚号为: 引脚号为:
126 56
康芯科技
KX
引脚对应情况
引脚窗
康芯科技
KX
此处输入
信号名
此处输入
引脚名 注意引脚属性
错误引脚名将
无正确属性!
按键
“ADD” 即可
康芯科技
KX
再编译一次,
将引脚信息
进去
康芯科技
KX
选择编程器,
准备将设计
好的半加器
文件下载到目
器件中去
编程窗
康芯科技
KX
在编程窗打开
的情况下选择
下载方式设置
选择此项下
载方式
康芯科技
KX
下载(配置)
成功!
康芯科技
5.4.5 硬件测试 KX
“s” 为高’
电平
注意时钟
选择电路 频率选择
模式为“ 6”
模式选择键
康芯科技
KX
CLOCK0 : b
CLOCK5 : a 频率选择
频率选择 256Hz
1024Hz
康芯科技
KX
实 验
实验 5-1 简单组合电路的设计
(2) 实 验 内 容 1 : 首 先 按 照 5.4 节 给 出 的 步 骤 , 利 用
MAX+plusⅡ 完 成 2 选 1 多 路 选 择 器 的 文 本 编 辑 输 入
(mux21a.vhd) 和仿真测试等步骤,给出图 5-17 所示的仿真
波形。最后在实验系统上进行硬件测试,实际验证本项设计
的功能。
康芯科技
KX
实 验
实验 5-1 简单组合电路的设计
(3 ) 实验内容 2 :将 5.4 节的多路选择器看成是一个元件 mux21a ,利用元件
例化语句描述图 5-20 ,并将此文件放在同一目录 E:\muxfile 中。以下是参考程
序:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY MUXK IS
PORT (a1 , a2 , a3 , s0 , s1 : IN STD_LOGIC;
outy : OUT STD_LOGIC );
END ENTITY MUXK;
ARCHITECTURE BHV OF MUXK IS
COMPONENT MUX21A
PORT ( a , b , s : IN STD_LOGIC;
y : OUT STD_LOGIC);
END COMPONENT ;
SIGNAL tmp : STD_LOGIC;
BEGIN
u1 : MUX21A PORT MAP(a=>a2 , b=>a3 , s=>s0 , y=>tmp);
康芯科技
KX
实 验
实验 5-1 简单组合电路的设计
按照 5.4 节的步骤对上例分别进行编译、综合、仿真。并对其仿真波形 (
图 5-23) 作出分析说明。
图 5-23 仿真波形
康芯科技
KX
实 验
实验 5-1 简单组合电路的设计
(5) 实验报告:根据以上的实验内容写出实验报告,包括程
序设计、软件编译、仿真分析、硬件测试和详细实验过程;
给出程序分析报告、仿真波形图及其分析报告。
(6) 附加内容:根据本实验以上提出的各项实验内容和实验
要求,设计 1 位全加器。
首先用 Max+plusⅡ 完成本章第 3 节给出的全加器的设计,
包括仿真和硬件测试。实验要求分别仿真测试底层硬件或门
和半加器,最后完成顶层文件全加器的设计和测试,给出设
计原程序,程序分析报告、仿真波形图及其分析报告。
(7) 实验习题:以此 1 位二进制全加器为基本元件,用例化
语句写出 8 位二进制全加器的顶层文件,并讨论此加法器的
电路特性。
康芯科技
KX
实 验
实验 5-2 简单时序电路的设计