
•VHDL
•Verilog HDL
•System Verilog
•System C
VerilogHDL与VHDL最常用
2.VerilogHDL与VHDL的比较
•VHDL来源于古老的Ada语言,VerilogHDL来源于C语言,VerilogHDL受到一线工作的工程师的青睐。
•90%以上的公司采用verilogHDL进行IC设计,ASIC设计必须学习VerilogHDL,VerilogHDL在工业界通用些,VHDL在大学教学中使用较多
•VerilogHDL在系统级抽象方面比VHDL差一些,在门级开关电路描叙方面VerilogHDL比VHDL强很多
•VHDL比较严谨,VerilogHDL格式要求宽松些
3.集成电路设计的层次
| 抽象层次 | 时序单位 | 基本单位 | 电路的功能(行为)描述 |
| 系统级System | 数据处理 | 进程及通信 | 自然语言描述或相互通信的进程 |
| 行为级(算法级)Algorithm | 运算步 | 运算的控制 | 行为有限状态机、数据流图、控制流图 |
| 寄存器传输级(RTL) | 时钟周期 | 寄存器、计数器、多路选择器、算术逻辑单元 | 布尔方程、二元决策图、有限状态机 |
| 逻辑门级Logic | 延时 | 与门、或门、触发器、锁存器等 | 原理图,VHDL |
| 门(电路)级Gate | 物理时间 | 晶体管、R、L、C | 电压、电流之间的微分方程 |
| 物理级(版图级)Layout | 几何图形 | 几何图形(硅表面上的扩散区、多晶硅和金属等) | 隐含在器件的物理方程中 |
将用行为和功能层次表达的电子系统转换为低层次的便于具体实现的模块组合装配的过程。(是从外文翻过来的别扭的句子)
•从算法表示转换到寄存器传输级,即行为综合
•从RTL级表示转换到逻辑门的表示,即逻辑综合
•从逻辑门表示转换为版图表示,即版图综合或结构综合
5.功能仿真和时序仿真
(1)功能仿真 是直接对VHDL、原理图描述或其他描述形式的逻辑功能进行测试模拟,以了解其实现的功能是否满足原设计的要求的过程,仿真过程不涉及任何具体器件的硬件特性。
(2)时序仿真就是接近真实器件运行特性的仿真,仿真文件中己包含了器件硬件特性参数,因而,仿真精度高。
第三章FPGA/CPLD结构与应用
1.可编程逻辑器件的分类
2、CPLD的结构和原理
(1) 逻辑阵列块(LAB) (2) 宏单元 (3) 扩展乘积项 (4) 可编程连线阵列 (5) 不同的LAB通过在可编程连线阵列(PIA)上布线,以相互连接构成所需的逻辑。 (6)I/O控制块
3、FPGA结构与工作原理(?)
查找表(Look-Up-Table)的原理与结构
查找表(Look-Up-Table)简称为LUT,LUT本质上就是一个RAM。 目前FPGA中多使用4输入的LUT,所以每一个LUT可以看成一个有4位地址线的16x1的RAM。 当用户通过原理图或HDL语言描述了一个逻辑电路以后,PLD/FPGA开发软件会自动计算逻辑电路的所有可能的结果,并把结果事先写入RAM,这样,每 输入一个信号进行逻辑运算就等于输入一个地址进行查表,找出地址对应的内容,然后输出即可。
下面是一个4输入与门的例子,
| " 实际逻辑电路 | LUT的实现方式 | ||
| a,b,c,d 输入 | 逻辑输出 | 地址 | RAM中存储的内容 |
| 0000 | 0 | 0000 | 0 |
| 0001 | 0 | 0001 | 0 |
| .... | 0 | ... | 0 |
| 1111 | 1 | 1111 | 1 |
•CPLD分解组合逻辑的功能很强,一个宏单元就可以分解十几个甚至20-30多个组合逻辑输入。而FPGA的一个LUT只能处理4输入的组合逻辑,因 此,CPLD适合用于设计译码等复杂组合逻辑。 但FPGA的制造工艺确定了FPGA芯片中包含的LUT和触发器的数量非常多,往往都是几千上万,CPLD一般只能做到512个逻辑单元,而且如果用芯片价 格除以逻辑单元数量,FPGA的平均逻辑单元成本大大低于CPLD。 所以如果设计中使用到大量触发器,例如设计一个复杂的时序逻辑,那么使用FPGA就是一个很好选择。 同时CPLD拥有上电即可工作的特性,而大部分FPGA需要一个加载过程,所以,如果系统要可编程逻辑器件上电就要工作,那么就应该选择CPLD。
•CPLD有被FPGA取代的可能.
•
5.CPLD和FPGA的编程和配置
•编程工艺有三种
–基于电可擦除存储单元的EEPROM或FLASH技术:多数CPLD
–基于SRAM查找表的编程单元:多数FPGA
–基于反熔丝编程单元:比如Actel公司的FPGA
第四章VHDL设计初步
1. VHDL的例子 (注意格式) 例4-1 2先1多路选择器
2选1多路选择器
ENTITY mux21a IS -- 实体部分的开始,mux21a是实体名
PORT ( -- 端口说明的开始
a, b: IN BIT; -- 端口名称:端口模式 数据类型
s: IN BIT;
y: OUT BIT
); -- 端口说明的结束
END ENTITY mux21a; --实体部分的结束,实体名要一致
ARCHITECTURE one OF mux21a IS --结构体的开始
BEGIN
y<=a WHEN s = ‘0’ ELSE b; -- 条件信号赋值
END ARCHITECTURE one; --结构体的结束
2.设计单元的基本构造
•一个设计单元都是由实体说明和构造体两部分组成。
•实体的功能是对这个设计单元与外部电路进行接口描叙。实体是设计单元的表层,实体说明部分规定了设计单元的输入输出接口信号或引脚,它是设计单元对外的一个通信界面。
•结构体定义了设计单元的具体构造和操作(行为)。
•每个实体可以有多个结构体,不同的结构体对应着实体不同的结构和算法实现方案,其间的各结构体的地位是相等的。
3.实体说明(ENTITY)
•实体象一个“黑盒子”
•实体描叙黑盒子的I/O。
–以“ENTITY 实体名 IS”开始
–至“END 实体名”结束
4.(1)端口说明--PORTS
•端口说明是基本设计实体(单元)与外部接口的描述,也可以说是对外部引脚信号的名称、数据类型和输入输出方向的描述。
•一般书写格式如下:
•PORT(端口名{,端口名}:方向 数据类型;
•…
• 端口名{,端口名}:方向 数据类型;
(2)端口模式
•IN
• OUT
• INOUT
• BUFFER
5.数据类型
•BIT和STD_LOGIC的区别
•BIT:只能赋值为1或0而STD_LOGIC有9种取值
6.(1)结构体的组成部分
•对数据类型、常数、信号、子程序和元件等元素的说明部分
•描叙设计单元逻辑行为的、以各种不同的描叙风格表达的功能描述语句。
◆进程语句
◆信号赋值语句
◆子程序调用语句
•以元件例化语句为特征的外部元件(设计单元)端口间的连接。
(2)结构体一般语言格式
•ARCHITECTURE 结构体名 OF 实体名 IS
• [说明语句]
•BEGIN
• [功能描述语句]
•END ARCHITECTURE 结构体名;
7.进程语句(PROCESS)
•所有的顺序语句都只能在进程(PROCESS)中使用,进程内是顺序执行,进程与进程间是并发的。
•进程是最关键的并发语句,其它并发语句:并发信号赋值、条件信号赋值、选择信号赋值、并发过程调用等可以看作是PROCESS语句的简化形式。
8.进程的启动和敏感信号列表
•进程的两个状态:执行和挂起
•初始起动时,进程处于执行状态,进程中的语句从前向后逐句执行一遍。
•当最后一句语句执行完后,返回到进程开始的PROCESS语句,进程处于挂起状态。
•只要进程的敏感信号列表中任何一个信号发生变化,进程又处于执行状态。然后再挂起,再执行,一直循环下去。
9.例4-6及其中出现的新的语句和语言现象
•(1)标准逻辑位数据类型:STD_LOGIC
•我们以前学过的BIT是只能取值为0或1,而STD_LOGIC有9种取值。
•’U’表示未初始化,‘X’表示强未知,‘0’表示强逻辑0,’1’表示强逻辑1,‘Z’表示高阻,‘W’表示弱未知,’L’表示弱逻辑0,‘H’表示弱逻辑1,’-‘表示忽略。
•’0’,‘1’,’Z’和‘X’是可综合的,其余是不可综合的。
•在仿真和综合时,STD_LOGIC比BIT更常用。
说明:弱逻辑0:类似于电阻下拉,弱逻辑1:类似于电阻上拉。
•(2)IF CLK’EVENT AND CLK= ‘1’
•什么是EVENT? 中文是“事件”,是变化
•什么是CLK’EVENT? 是CLK信号的上升沿或下降沿,还有其它情况的变化。
•(3)例4-6为什么是实现了一个D触发器呢?
不完整的条件语句:
IF 条件
THEN 赋值语句
(没有ELSE)
END IF;
•满足IF后的条件时,执行Q1 <=D的赋值,
•不满足IF后的条件时呢?Q1应保持不变,在数字电路里面要保持一个值不变,就意味着存储元件的使用。
•不完整条件语句构成时序电路
与例4-6类似的另一种描叙方法
例4-6a
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY DFF1 IS
PORT (
CLK : IN STD_LOGIC;
D : IN STD_LOGIC;
Q : OUT STD_LOGIC
);
END;
ARCHITECTURE bhv OF DFF1 IS
-- 没有SIGINAL Q1 : STD_LOGIC;
BEGIN
PROCESS (CLK)
BEGIN
IF CLK’EVENT AND CLK=‘1’
THEN Q <= D; -- 不是Q1 <= D;
END IF; 没有Q <=Q1;
END PROCESS;
END bhv;
综合后的RTL视图
10.电平触发型寄存器(LATCH)
例4-14对比例4-6
11.异步时序电路设计
•构成时序电路的进程称为时钟进程。
•一个时钟进程只能构成对应单一时钟信号的时序电路。
•异步逻辑最好用多个时钟进程语句来构成。
12.顶层描叙----全加器 例4-19
综合后的RTL视图
13.并置操作符(连接操作符)--&
•把操作数或数组合并起来形成新的数组。
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条件句中可以使用并置符
14.标准逻辑矢量数据类型STD_LOGIC_VECTOR
STD_LOGIC_VECTOR类型与STD_LOGIC一样,都定义在STD_LOGIC_11程序包中,但后者属于标准位类型,而前者被定义为标准一维数组。数组中的每一个元素的数据类型都是标准逻辑位STD_LOGIC。
在使用STD_LOGIC_VECTOR中,必须注明其数组宽度,即位宽,如:
B : OUT STD_LOGIC_VECTOR(7 DOWNTO 0) ;
或 SIGNAL A :STD_LOGIC_VECTOR(1 TO 4)
15.元件例化语句
元件例化语句由两部分组成,第一部分是对一个现成的设计实体定义为一个元件,语句的功能是对待调用的元件作出调用声明,它的最简表达式如下所示:
COMPONENT 元件名 IS
PORT (端口名表) ;
END COMPONENT 文件名 ;
类似于C语言中对函数的声明,端口名是形参。
元件例化语句的第二部分则是此元件与当前设计实体(顶层文件)中元件间及端口的连接说明。语句的表达式如下:
例化名 : 元件名 PORT MAP( [端口名 =>] 连接端口名,...);
类似于C语言中对函数的调用,连接端口名是实参。
16.用VHDL实现组合逻辑和时序逻辑的方法
组合逻辑:
•并发语句(Process外)
•顺序语句(Process内)
1.敏感列表要全
2.不能有不完整条件语
时序逻辑:
•敏感信号列表中,要有时钟
•不完整条件语句
17.例4-20 4位二进制加法计数器
18.(1)例 4-22一般加法计数器设计 十进制加法计数器
(2)变量(VARIABLE)与信号(SIGNAL)的区别
–与SIGNAL一样也是数据对象
–SIGNAL用“<=“赋值, VARIABLE用”:=“赋值
–SIGNAL是全局的,VARIABLE只能作用于一个PROCESS内
–SIGNAL是在PROCESS末尾真正赋值,be scheduled;VARIABLE是立即赋值, immediately。
–(在第六章中会有对变量和信号的详细阐述)。
(3)判断什么是同步时钟和异步时钟;什么是同步和异步复位;
(4)为什么说RST是异步复位信号?
为什么说EN是同步使能信号?
PROCESS (CLK,RST,EN)
……
BEGIN
IF RST =‘1’ THEN CQI := (OTHERS => ‘0’); --计数器异步复位
ELSIF CLK’EVENT AND CLK=‘1’ THEN --检测时钟上升沿
IF EN =‘1’ THEN --检测是否允许计数(同步使能)
第5章 Quartus II应用向导
进行渐进式综合(简答题 描述)
•渐进式综合是自上而下和自下而上渐进式编译流程的组成部分,可以将设计中的实体指定为设计分区,在上面逐渐进行 Analysis & Synthesis,而不会影响工程的其他部分。
•设计完成后,渐进式综合只更新重新综合的设计部分,从而缩短了综合时间,减少了对运行时存储器的占用。您可以修改并重新综合设计的一部分,而不会影响其他部分,这意味着在没有改动的部分,已寄存和已结合的节点名称保持不变。成功进行工程及其所有分区的 Analysis & Synthesis 之后,单个分区必须合并到一起,作为完整工程的一部分再次进行编译。
第6章 VHDL设计进阶
1.Process内信号赋值的说明
PROCESS (clock)
BEGIN
IF rising_edge(clock) THEN
b <= a; -- after the rising clock edge, a goes to b
c <= b; -- after the rising clock edge, b goes to c
END IF;
END PROCESS ;
or
•在Process内,信号并不是立即更新,它们是被调度更新
•信号不被实际更新,直到End Process
•上一页中,综合后是右图(两个寄存器)
2.信号(signal)与变量(variable)
•信号是实的
•信号是硬件连接的抽象
•信号在赋值时可以产生附加延时
•变量是虚的
•变量是逻辑存储,是一种载体,是一种符号
•变量在赋值时不产生附加延时
3.信号赋值与变量赋值的比较之一例6-1和例6-2
前面图例6-1 中QQ是变量,例6-2中QQ是信号,但是
后面图例6-1和例6-2综合后的结果是一样的。
4.变量的使用
•PROCESS (clock)
VARIABLE b : std_logic ;
•BEGIN
IF rising_edge(clock) THEN
b := a ; -- this is immediate
• c <= b ; -- this is scheduled
• END IF;
•END PROCESS ;
5.信号赋值与变量赋值的比较之二 例6-3和例6-4
例6-3中A和B综合后还是信号
例6-4中,A和B综合后没有了
6. 例6-7
教材中是错误的,不可能是纯组合逻辑,找错并修改
修正后的例6-7
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
ENTITY mux4 IS
PORT ( i0,i1,i2,i3,a,b : IN STD_LOGIC;
q : OUT STD_LOGIC );
END mux4;
ARCHITECTURE body_mux4 OF mux4 IS
BEGIN
process (i0,i1,i2,i3,a,b)
variable muxval : integer range 7 downto 0;
begin
muxval :=0;
if ( a = '1' ) then muxval := muxval +1 ; end if ;
if ( b = '1' ) then muxval := muxval +2 ; end if;
case muxval is
when 0 => q <=i0;
when 1 => q <=i1;
when 2 => q <=i2;
when 3 => q <=i3;
when others => q<=i0;
end case;
end process;
END body_mux4;
第8章 状态机设计
•1.状态机也分几个种类,这里只提到两种状态机,Moore和Meely。
•Moore:输出只与现在状态有关。
•Meely:输出不仅与现在的状态有关,也与现在的输入有关。
Moore型状态机
Meely型状态机
2.状态机的常用描叙方法
•状态图(State Diagram)
•状态图主要包含状态和转移。
•动作主要有两种:状态动作和转移动作。只有转移动作构成Meely型状态机,只有状态动作构成Moore型状态机。还可以是两种型式的混合,就是也有状态动作也有转移动作。
•3. 算法状态机(ASM)ASM图由三种块组成,状态块,条件块和动作块。
4. 状态机用VHDL的实现方法
•建议采用三个Process或四个Process来实现一个状态机
•转移条件判断块:根据当前状态和输入条件决定下一个状态,也就是得到nextstate。这个块用组合逻辑实现。
•状态转移块:这个块比较简单,只是它nextstate赋给currentstate就可以了。是用时序逻辑来实现。
•输出块:输出块比较复杂,在输出块中有两种情况:一种是纯组合逻辑来实现输出,另一种是用时序逻辑来实现输出,还有一种是混合方式,有些输出信号是用组合逻辑,有些输出信号是用时序逻辑。当输出是混合方式时,那么要实现状态机就要有4个Process了。
•5.Process三个Process的VHDL代码
状态图
