You are on page 1of 99

EDA 技术实用教

第5章
康芯科技
KX

 原理图输入与 VHDL 文本输入设计的区别

 Graphic is what you draw is what you get


 “ tell me what hardware you want and I will give it to you”
 VHDL is what you write is what functional you get
 “ tell me how your circuit should behave and the VHDL
compiler will give you the hardware that does the job”
 but the designer can not control how the circuit implement
康芯科技
KX
是什么是 VHDL ?

Very high speed integrated Hardware


Description Language (VHDL)
 是 IEEE 、工业标准硬件描述语言
 用语言的方式而非图形等方式描述硬件电路
 容易修改
 容易保存
 特别适合于设计的电路有:
 复杂组合逻辑电路,如:
• 译码器、编码器、加减法器、多路选择器、地址译码器… ...
 状态机
 等等…… ..
康芯科技
KX
VHDL 的功能和标准
 VHDL 描述
 输入端口
 输出端口
 电路的行为和功能
 VHDL 有过两个标准:
 IEEE Std 1076-1987 (called VHDL 1987)
 IEEE Std 1076-1993 (called VHDL 1993)
康芯科技
KX

VHDL Synthesis vs. other


HDLs Synthesis
 VHDL: “tell me how your circuit
should behave and I will give you
hardware that does the job”

 ABEL, PALASM, AHDL:


• “tell me what hardware
you want and I will give it to you”
康芯科技
KX

Why using VHDL instead of


Graphic
 Easy to Modify
 It is more powerful than Graphic
 VHDL is a portable language because
 is device independent
 the same code can be applied to Device
manufactured by Company A or Company B
康芯科技
5.1 多路选择器 VHDL 描述
KX

5.1.1 2 选 1 多路选择器的 VHDL


描述
【例 5-1 】
ENTITY mux21a IS
PORT( a, b : IN BIT ; 实体
s : IN BIT;
y : OUT BIT ) ; 图 5-1 mux21a 实体
END ENTITY mux21a ;

ARCHITECTURE one OF mux21a IS


BEGIN
y <= a WHEN s = '0' ELSE 结构体
图 5-2 mux21a 结构
b ; 体
END ARCHITECTURE one ;
康芯科技
KX
5.1.1 2 选 1 多路选择器的 VHDL 描

【例 5-2 】
ENTITY mux21a IS
PORT ( a, b : IN BIT;
s : IN BIT;
y : OUT BIT );
END ENTITY mux21a;
ARCHITECTURE one OF mux21a IS
SIGNAL d,e : BIT; 【例 5-3 】
BEGIN . . .
d <= a AND (NOT S) ; ARCHITECTURE one OF
e <= b AND s ; mux21a IS
y <= d OR e ; BEGIN
END ARCHITECTURE one ; y <= (a AND (NOT s))
OR (b AND s) ;
END ARCHITECTURE one;
康芯科技
KX
5.1.1 2 选 1 多路选择器的 VHDL 描述

【例 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 描述

图 5-3 mux21a 功能时序波形


康芯科技
KX
5.1.2 VHDL 相关语句说明

1. 实体表达 【例 5-5 】
ENTITY e_name IS

PORT ( p_name : port_m data_type;


...
p_namei : port_mi data_type );
END ENTITY e_name;

或:

【例 5-6 】
ENTITY e_name IS

PORT ( p_name : port_m data_type;


...
p_namei : port_mi data_type );
END e_name;
康芯科技
KX
5.1.2 VHDL 相关语句说明

2. 实体名

3. PORT 语句和端口信号

4. 端口模式

OUT IN INOUT BUFFER

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 条件语句

10. WHEN_ELSE 条件信号赋值语句


赋值目标 <= 表 达 式 WHEN 赋 值 条 件
ELSE
表达式 WHEN 赋
值条件 ELSE
...
11. PROCESS 进程语句和顺序语句
表达式 ;

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;

ARCHITECTURE reg1 OF reg1 IS


SIGNAL a, b : BIT;
BEGIN
PROCESS (clk)
BEGIN
IF clk='1' AND clk’event THEN
a <= d;
b <= a;
q <= b;
END IF;
END PROCESS;
END reg1;
康芯科技
KX
康芯科技
KX
How Many Registers?
ENTITY reg1 IS
PORT ( d : in BIT;
clk : in BIT;
q : out BIT);
END reg1;

ARCHITECTURE reg1 OF reg1 IS


BEGIN
PROCESS (clk)
VARIABLE a, b : BIT;
BEGIN
IF clk='1' AND clk’event THEN
a := d;
b := a;
q <= b;
END IF;
END PROCESS;
END reg1;
康芯科技
KX
用 VHDL 设计 4 位计数器

取整数数据类型,为什么?

整数取值范围

端口信号模式取
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

UTILITY: Represent Circuit Represent local storage


Interconnect

SCOPE: Global Scope (anywhere) Local Scope


(inside process)

BEHAVIOR: Updated at end of PROCESS Updated Immediately


(new value not available) (new value available)
康芯科技
例1 KX
case muxval is
LIBRARY IEEE; when 0 => q <= i0;
USE IEEE.STD_LOGIC_1164.ALL; when 1 => q <= i1;
when 2 => q <= i2;
ENTITY mux4 IS when 3 => q <= i3;
PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; when others => null;
q : OUT STD_LOGIC); end case;
END mux4; end process;
END body_mux4;
ARCHITECTURE body_mux4 OF mux4 IS
signal muxval : integer;
BEGIN
process(i0,i1,i2,i3,a,b)
begin
muxval <= 0;
if (a = '1') then
muxval <= muxval + 1;
end if;
if (b = '1') then
muxval <= muxval + 2;
end if; Why ????
康芯科技
KX
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL; case muxval is
when 0 => q <= i0;
ENTITY mux4 IS when 1 => q <= i1;
PORT (i0, i1, i2, i3, a, b : IN STD_LOGIC; when 2 => q <= i2;
q : OUT STD_LOGIC); when 3 => q <= i3;
END mux4; when others => null;
end case;
ARCHITECTURE body_mux4 OF mux4 end process;
IS END body_mux4;
BEGIN
process(i0,i1,i2,i3,a,b)
variable muxval : integer range 0 to 3;
begin
muxval := 0;
if (a = '1') then
muxval := muxval + 1;
end if;
if (b = '1') then
muxval := muxval + 2;
end if;
康芯科技
KX
用一位全加器设计
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY h_adder IS
PORT (a , b : IN STD_LOGIC;
1 位二进制半加器
co, so : OUT STD_LOGIC);
END ENTITY h_adder ;
ARCHITECTURE fh1 OF h_adder I
BEGIN
so <= (a OR b)AND(a NAND b);
co <= NOT( a NAND b);
END ARCHITECTURE fh1;
康芯科技
KX
1 位二进制全加器

外部端口

内部端口

端口连线
康芯科技
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','-');

STD_LOGIC 所定义的 9 种数据的含义是:


‘ U’ 表示未初始化的; ‘ X’ 表示强未知的; ‘ 0’ 表示强
逻辑 0 ; ‘ 1’ 表示强逻辑 1 ; ‘ Z’ 表示高阻态;
‘ W’ 表示弱未知的; ‘ L’ 表示弱逻辑 0 ; ‘ H’ 表示
弱逻辑 1 ; ‘ -’ 表示忽略。
康芯科技
KX
5.2.2 D 触发器 VHDL 描述的语言现象说明

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

关键词 EVENT 是信号属性, VHDL 通过以下表式来


测定某信号的跳变边沿:
< 信号名 >'EVENT
康芯科技
KX
5.2.2 D 触发器 VHDL 描述的语言现象说明

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-5 例 5-11 的电路图


康芯科技
5. 不完整条件语句与时序电路
KX

【例 5-12 】 图 5-6 例 5-12 的电路


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
康芯科技
KX
5.2.3 实现时序电路的 VHDL 不同表达方式

【例 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 设计

图 5-10 半加器 h_adder 电路图

图 5-11 全加器 f_adder 电路图


康芯科技
KX
5.3.1 半加器描述和 CASE 语句

表 5-1 半加器 h_adder 逻辑功能真值表

a b so co
0 0 0 0
0 1 1 0
1 0 1 0
1 1 0 1
1. CASE 语句

CASE 语句的一般表式是:

CASE < 表达式 > IS


When < 选择值或标识符 > => < 顺序语句 >; ... ; < 顺序语句 >

When < 选择值或标识符 > => < 顺序语句 >; ... ; < 顺序语句 >

...
康芯科技
KX
5.3.1 半加器描述和 CASE 语句

2. 标准逻辑矢量数据类型 STD_LOGIC_VECTOR

在使用 STD_LOGIC_VECTOR 中,必须注明其数组宽度,即位宽,如:


B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;
或 SIGNAL A : STD_LOGIC_VECTOR(1 TO 4)

3. 并置操作符 
以下是一些并置操作示例:

SIGNAL a : STD_LOGIC_VECTOR (3 DOWNTO 0) ;


SIGNAL d : STD_LOGIC_VECTOR (1 DOWNTO 0) ;
...
a <= '1''0'd(1)'1' ; -- 元素与元素并置,并置后的数组长度为 4
...
IF a  d = "101011" THEN ... –- 在 IF 条件句中可以使用并置符
康芯科技
KX
5.3.1 半加器描述和 CASE 语句

【例 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);

u2 : h_adder PORT MAP(a=>e , b=>cin ,


co=>f , so=>sum);
康芯科技
KX
5.3.2 全加器描述和例化语句

元件例化语句由两部分组成,第一部分是对一个现成的设计实体
定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最
简表达式如下所示:
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)

Configure/Programming the Altera Device


Perogr. and do on board debugging,
Down prototyping or production
Load
康芯科技
KX

VHDL 文本输入设计流程

STEP1 :建立 STEP2 :输入设计项目 STEP3 :存盘,注意 STEP4 :将设计项 STEP5 :选


工作库文件夹 原理图 /VHDL 文本代码 原理图 / 文本取名 目设置成 Project 择目标器件

STEP11 : STEP10 :编程 STEP9 :引脚 STEP8 :仿真测 STEP7 :建立仿 STEP6 :
硬件测试 下载 / 配置 锁定并编译 试和波形分析 真波形文件 启动编译
康芯科技
5.4 VHDL 文本输入设计方法初步 K
为设计全加器
X
新建一个文
件夹作工作库

文件夹名取为
My_prjct
注意,不可
用中文!
康芯科技
新建一个设
KX
计文件

使用文本输入方
法设计,必须选择
打开文本编辑器

5.4.1 编辑输入并保存 VHDL 源文件


康芯科技
图 5-12 建立文本编辑器对话框 K存盘文件名必须
X
取为: mux21a.vhd

用键盘输入设计
文件:多路选择器

注意,要存在
自己建立的
文件夹中

文本编辑窗

图 5-13 在文本编辑窗中输入 VHDL 文件并存盘


康芯科技
KX

文件存盘后,
关键词将改变
颜色!否则文
件名一定有错!
康芯科技
KX
最后注意此路
径指向的改变

首先点击这里
然后选择此项,
将当前的原理图
设计文件设置成
工程

图 5-14 设定当前文件为工程

5.4.2 将当前设计设定为工程
康芯科技
KX
注意,此路径指
向当前的工程!
康芯科技
KX

首先选择这里

器件系列选择
窗,选择 ACEX1K
系列

根据实验板上的
目标器件型号选
择,如选 EP1K30

注意,首先消去
这里的勾,以便
使所有速度级别
的器件都能显示
出来
康芯科技
KX

选择编译器

编译窗
5.4.3 选择 VHDL 文本编译版本号和排错 康芯科技
KX

选择此项

选择 VHDL1993 项

图 5-15 设定 VHDL 编译版本号


康芯科技
KX

选择此项

消去这里的勾
康芯科技
KX

编译出错!
康芯科技
5.4.3 选择 VHDL 文本编译版本号和排错
KX

打开错误提示窗

图 5-16 确定设计文件中的错误
康芯科技
KX

错误所在

错误所在
康芯科技
KX

改正错误
康芯科技
完成编译! KX
康芯科技
时序仿真 首先选择此项, KX
为仿真测试新
建一个文件

选择波形
编辑器文件
康芯科技
KX

从 SNF 文件中
输入设计文件
的信号节点

点击“ LIST”
康芯科技
KX

SNF 文件中
的信号节点

用此键选择左窗
中需要的信号
进入右窗
最后点击“ OK”
康芯科技
KX

消去这里的勾,
以便方便设置
输入电平

在 Options 菜单中消去网格对齐 Snap to Grid 的选择 ( 消去对勾 )


康芯科技
KX

选择 END TIME
选择 65 微秒
调整仿真时间
比较合适
区域。
康芯科技
KX

先点击‘ b’ ,将其
点为黑色
用此键改变仿真 设置输入信号‘ b’
区域坐标到合适 的周期为 800ns
位置。

然后先点击此处 点击‘ 1’ ,使拖黑


将弹出时钟周期 的电平为高电平
设置窗
康芯科技
KX

设置输入信号‘ a’
的周期为 2us
康芯科技
KX

仿真波形文件
存盘!
康芯科技
KX

选择仿真器

运行仿真器
康芯科技
5.4.4 时序仿真 KX

图 5-17 mux21a 仿真波形


康芯科技
可选择输出“ y”
KX
引脚锁定 的信号从扬
声器输出

信号 a 和 b 输入
两个不同频率
的时钟信号

选择实验电路结构图 6

可选择键 8 作为多
路选择器的输入“ s”
康芯科技
KX

选择实验板上
插有的目标器件

键 8 的引脚名
作为“ s” 信号 键 8 的引脚名
对应的引脚号
康芯科技
KX

扬声器引脚号
为: 99
康芯科技
KX
注意,对于 GWAK30+ 板,
时钟引脚必须查阅以下
“ 时钟了解表 1”

信号 b 由 信号 a 由
“clock0” 输入 “clock5” 输入
时钟信号, 时钟信号,
引脚号为: 引脚号为:
126 56
康芯科技
KX

引脚对应情况

实验板位置 多路选择器信号 通用目标器件引脚名 目标器件


EP1K30TC144 引脚号
1 、键 8 : s PIO13 27
2 、扬声器 y SPEAKER 99
3 、时钟输入信号 b CLOCK0 126
4 、时钟输入信号 a CLOCK5 56
康芯科技
选择引脚
锁定选项
KX

引脚窗
康芯科技
KX

此处输入
信号名

此处输入
引脚名 注意引脚属性
错误引脚名将
无正确属性!

按键
“ADD” 即可
康芯科技
KX

再编译一次,
将引脚信息
进去
康芯科技
KX
选择编程器,
准备将设计
好的半加器
文件下载到目
器件中去

编程窗
康芯科技
KX

在编程窗打开
的情况下选择
下载方式设置

选择此项下
载方式
康芯科技
KX

下载(配置)
成功!
康芯科技
5.4.5 硬件测试 KX

“s” 为高’
电平

注意时钟
选择电路 频率选择
模式为“ 6”

模式选择键
康芯科技
KX

CLOCK0 : b
CLOCK5 : a 频率选择
频率选择 256Hz
1024Hz
康芯科技
KX
实 验

实验 5-1 简单组合电路的设计

(1) 实验目的:熟悉 Max+plusⅡ 的 VHDL 文本设计流程全


过程,学习简单组合电路的设计、多层次电路设计、仿真和
硬件测试。

(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 简单组合电路的设计

(4) 实验内容 3 :引脚锁定以及硬件下载测试。若目标器


件是 EPF10K10 ,建议选实验电路模式 5( 附图 1-7) ,用键
1(PIO0 ,引脚号为 5) 控制 s0 ;用键 2(PIO1 ,引脚号为 6)
控 制 s1 ; a3 、 a2 和 a1 分 别 接 clock5( 引 脚 号 为
83) 、 clock0( 引脚号为 2) 和 clock2( 引脚号为 43) ;输出信
号 outy 仍接扬声器 spker( 引脚号为 3) 。通过短路帽选择
clock0 接 256Hz 信号, clock5 接 1024Hz , clock2 接 8Hz
信号。引脚锁定窗如图 5-24 所示。最后进行编译、下载和
硬件测试实验。
康芯科技
KX
实 验 实验 5-1 简单组合电路的设计

图 5-24 实验 5-1 引脚锁定


康芯科技
KX
实 验
实验 5-1 简单组合电路的设计

(5) 实验报告:根据以上的实验内容写出实验报告,包括程
序设计、软件编译、仿真分析、硬件测试和详细实验过程;
给出程序分析报告、仿真波形图及其分析报告。
(6) 附加内容:根据本实验以上提出的各项实验内容和实验
要求,设计 1 位全加器。
首先用 Max+plusⅡ 完成本章第 3 节给出的全加器的设计,
包括仿真和硬件测试。实验要求分别仿真测试底层硬件或门
和半加器,最后完成顶层文件全加器的设计和测试,给出设
计原程序,程序分析报告、仿真波形图及其分析报告。
(7) 实验习题:以此 1 位二进制全加器为基本元件,用例化
语句写出 8 位二进制全加器的顶层文件,并讨论此加法器的
电路特性。
康芯科技
KX
实 验
实验 5-2 简单时序电路的设计

(1) 实验目的:熟悉 MAX+plusⅡ 的 VHDL 文本设计过程


,学习简单时序电路的设计、仿真和硬件测试。
(2) 实验内容 1 :根据实验 5-1 的步骤和要求,设计触发器
( 使用例 5-9) ,给出程序设计、软件编译、仿真分析、硬件
测试及详细实验过程。
(3) 实验内容 2 :根据实验 5-1 的步骤和要求,设计锁存器
( 使用例 5-18) ,同样给出程序设计、软件编译、仿真分析、
硬件测试及详细实验过程。
(4) 实验报告:分析比较实验内容 1 和 2 的仿真和实测结果
,说明这两种电路的异同点,给出实验报告。
(5) 实验思考题:用例 5-9 中的时钟边沿检测表述,如何获
得电平触发型锁存器?

You might also like