2.3CPLD的结构原理 以MAX30O0A结构为例,首先是整体介绍,然后讲授其五个主要部分:逻 辑阵列块(LAB以、宏单元、扩展乘积顶(共享和并联)、可编程连线阵列和IO 控制块。 2.4FPGA的结构原理 首先介绍FPGA的主要生产厂家,然后引入查找表(LUD结构让学生建立查 找表的概念 介绍LE的结构,基本与CPLD类似,只是前面的与或阵列变成了LUT。多 个LE又组成了LAB 介绍M9K,详细介绍RAM的发展,异步RAM,同步RAM,动态RAM, 静态RAM,可画时序图及结构图,引入同步时钟的概念。 嵌入式乘法器:介绍必要性,内部结构不作要求 时钟:强调时钟的重要性,专用时钟引脚、PLL、全局时钟,解释全局时钟 的目的,不只是延时小,更重要的是保证时钟沿到各个寄存器的一致性。 可编程IO:主要介绍常用的电平,LVTTL、LVCMOS、LVDS重点介绍,基 于电流源的驱动、速度快 2.5硬件测试:主要介绍JTAG技术,以及在实际应用中TAG如何使用,4 根信号含义 2.6大规模PLD产品概述(本部分几句带过,自学) 2.7 CPLD/FPGA的编程与配置 对教材的三种分类作了修正,将EEPROM和lash分开,共4种 介绍CPLD和FPGA的配置电路,FPGA脱机运算外部需要加配置芯片或单 片机等 注意TAG可以级联 强调CPLD的编程与FPGA的配置之间概念的区别,7种配置方式 2.73FPGA专用配置器件(简略介绍) Altera的可重复编程配置器件:EPC系列,EPCS系列2.7.4使用单片机配置 FPGA(自学) 2.7.5使用CPLD配置FPGA(自学) 3
13 2.3 CPLD 的结构原理 以 MAX3000A 结构为例,首先是整体介绍,然后讲授其五个主要部分:逻 辑阵列块(LAB)、宏单元、扩展乘积顶(共享和并联)、可编程连线阵列和 IO 控制块。 2.4 FPGA 的结构原理 首先介绍 FPGA 的主要生产厂家,然后引入查找表(LUT)结构让学生建立查 找表的概念 介绍 LE 的结构,基本与 CPLD 类似,只是前面的与或阵列变成了 LUT。多 个 LE 又组成了 LAB 介绍 M9K,详细介绍 RAM 的发展,异步 RAM,同步 RAM,动态 RAM, 静态 RAM,可画时序图及结构图,引入同步时钟的概念。 嵌入式乘法器:介绍必要性,内部结构不作要求 时钟:强调时钟的重要性,专用时钟引脚、PLL、全局时钟,解释全局时钟 的目的,不只是延时小,更重要的是保证时钟沿到各个寄存器的一致性。 可编程 IO:主要介绍常用的电平,LVTTL、LVCMOS、LVDS 重点介绍,基 于电流源的驱动、速度快 2.5 硬件测试:主要介绍 JTAG 技术,以及在实际应用中 JTAG 如何使用,4 根信号含义 2.6 大规模 PLD 产品概述(本部分几句带过,自学) 2.7 CPLD/FPGA 的编程与配置 对教材的三种分类作了修正,将 EEPROM 和 flash 分开,共 4 种 介绍 CPLD 和 FPGA 的配置电路,FPGA 脱机运算外部需要加配置芯片或单 片机等 注意 JTAG 可以级联 强调 CPLD 的编程与 FPGA 的配置之间概念的区别,7 种配置方式 2.7.3 FPGA 专用配置器件(简略介绍) Altera 的可重复编程配置器件:EPC 系列,EPCS 系列 2.7.4 使用单片机配置 FPGA (自学) 2.7.5 使用 CPLD 配置 FPGA (自学)
第3章组合电路的Verilog设计 教学目的:在第2章的学习基础上,从典型的组合逻辑电路出发,正式引入 Verilog设计方法学,学会常用的assign语句和always语句用法。 教学基本要求:掌握Verilog的程序典型框架,学会模块化设计准则。 教学内容:组合电路的Verilog描述、半加器电路的Verilog描述、多路选择 器的Verilog描述、Verilog加法器设计、组合逻辑乘法器设计、RTL的概念。 教学提示:注意引导学生逐步建立硬件电路思维,学习Verilog语法的同时 与C语言进行对比,找出二者的本质区别。 教学重点和难点:子模块实例化与C语言子程序的联系和区别、rg型变量 和wire型变量区别 学法指导:积极互动,随时与C语言对比,尽快建立硬件思维。 作业:设计三种基础逻辑门电路的Verilog程序。 小结:从本章开始,学习的重点转向Verilog设计,由于学生的编程功底较 弱,需要在讲解时注意控制进度,尽可能使绝大多数同学消化吸引关键知识点, 并掌握常见组合逻辑电路的设计方式。 详细大纲 引言:介绍Verilog的整体特点,学习方法,要求学生用硬件电路的角度理 解Verilog。 3.1组合电路的Verilog描述 以简单的二选一数据选择器设计为例,分析其结构框图及逻辑表达式,然后 给出Verilog代码,介绍Verilog的模块、端口、assign语句。 在例3-1的基础上,总结Verilog模块设计的基本框架,与C语言作类比, 方便学生理解。并继续例3-2的学习,引入always过程(Begin end块)、reg型 变量、Case的概念。强调reg型并非一定是寄存器。并初步讲授reg型与wire 型各自的主要应用范围。 介绍逻辑状态01XZ,Verilog数据位宽的表达、以及位拼接运算符。 自例3-2之后的例子不再一一细讲,以学生自学主主,课堂上以基础语法为 主,包括:按位逻辑操作、等式表达、注释、条件判断、阻塞与非阻塞、数据位 宽、模块实例化
14 第 3 章 组合电路的 Verilog 设计 教学目的:在第 2 章的学习基础上,从典型的组合逻辑电路出发,正式引入 Verilog 设计方法学,学会常用的 assign 语句和 always 语句用法。 教学基本要求:掌握 Verilog 的程序典型框架,学会模块化设计准则。 教学内容:组合电路的 Verilog 描述、半加器电路的 Verilog 描述、多路选择 器的 Verilog 描述、Verilog 加法器设计、组合逻辑乘法器设计、RTL 的概念。 教学提示:注意引导学生逐步建立硬件电路思维,学习 Verilog 语法的同时 与 C 语言进行对比,找出二者的本质区别。 教学重点和难点:子模块实例化与 C 语言子程序的联系和区别、reg 型变量 和 wire 型变量区别 学法指导:积极互动,随时与 C 语言对比,尽快建立硬件思维。 作业:设计三种基础逻辑门电路的 Verilog 程序。 小结:从本章开始,学习的重点转向 Verilog 设计,由于学生的编程功底较 弱,需要在讲解时注意控制进度,尽可能使绝大多数同学消化吸引关键知识点, 并掌握常见组合逻辑电路的设计方式。 详细大纲 引言:介绍 Verilog 的整体特点,学习方法,要求学生用硬件电路的角度理 解 Verilog。 3.1 组合电路的 Verilog 描述 以简单的二选一数据选择器设计为例,分析其结构框图及逻辑表达式,然后 给出 Verilog 代码,介绍 Verilog 的模块、端口、assign 语句。 在例 3-1 的基础上,总结 Verilog 模块设计的基本框架,与 C 语言作类比, 方便学生理解。并继续例 3-2 的学习,引入 always 过程(Begin end 块)、reg 型 变量、Case 的概念。强调 reg 型并非一定是寄存器。并初步讲授 reg 型与 wire 型各自的主要应用范围。 介绍逻辑状态 01XZ,Verilog 数据位宽的表达、以及位拼接运算符。 自例 3-2 之后的例子不再一一细讲,以学生自学主主,课堂上以基础语法为 主,包括:按位逻辑操作、等式表达、注释、条件判断、阻塞与非阻塞、数据位 宽、模块实例化
第5章时序电路的Verilog设计 教学目的:在第3章的学习基础上,逐步从组合逻辑电路推广至时序电路设 计。 教学基本要求:掌握基础触发器、锁存器的描述方式,学会计数器设计手段。 教学内容:基本时序元件的Verilog表述、二进制计数器及其Verilog表述、 移位寄存器的Verilog表述与设计、可预置型计数器设计。 教学提示:时序电路和组合电路的Verilog描述从形式上看比较相似,需要 学生从敏感信号量形式和条件分支是否完整的角度判断,应逐步做到看到的是代 码,心中想的是电路图。 教学重点和难点:同步复位与异步复位的区别、锁存器与触发器的描述差异 学法指导:先介绍应用实例,再详解具体语法,要求掌握每一种语法背后的 硬件电路含义。 作业:设计简单的计数器Verilog程序。 小结:时序电路的描述比组合电路更为灵活,需要学生多加练习,并逐步具 备自行编写代码的能力。 详细大纲 5.1时序电路设计 从基本的D触发器引入,介绍边沿触发理念,然后以锁存器为例,对比二者 的差异,要求学生尽量避免锁存器的使用。为D触发器引入异步复位和使能端, 强调异步复位的重要性,针对时序电路,分支描述可以不完整。 介绍同步复位与异步复位区别,分析同步复位代码的实现,并深入理解异步 复位形式上虽然是边沿触发,但实质上是电平触发的概念。 异步复位锁存器不再介绍,同学自学 关于异步时序电路,首先介绍同步时序电路,并对比二者,强调同步时序电 路的优点。尽量在实际设计中保证同步设计。 5.2完整的模10计数器设计 完整分析一个功能齐全的代码,其中新概念是关系比较运算,与C语言一样。 注意:=可以同时表示非阻塞赋值或者是小于等于,具体是哪一种含义则要看 它的所处位置
15 第 5 章 时序电路的 Verilog 设计 教学目的:在第 3 章的学习基础上,逐步从组合逻辑电路推广至时序电路设 计。 教学基本要求:掌握基础触发器、锁存器的描述方式,学会计数器设计手段。 教学内容:基本时序元件的 Verilog 表述、二进制计数器及其 Verilog 表述、 移位寄存器的 Verilog 表述与设计、可预置型计数器设计。 教学提示:时序电路和组合电路的 Verilog 描述从形式上看比较相似,需要 学生从敏感信号量形式和条件分支是否完整的角度判断,应逐步做到看到的是代 码,心中想的是电路图。 教学重点和难点:同步复位与异步复位的区别、锁存器与触发器的描述差异 学法指导:先介绍应用实例,再详解具体语法,要求掌握每一种语法背后的 硬件电路含义。 作业:设计简单的计数器 Verilog 程序。 小结:时序电路的描述比组合电路更为灵活,需要学生多加练习,并逐步具 备自行编写代码的能力。 详细大纲 5.1 时序电路设计 从基本的 D 触发器引入,介绍边沿触发理念,然后以锁存器为例,对比二者 的差异,要求学生尽量避免锁存器的使用。为 D 触发器引入异步复位和使能端, 强调异步复位的重要性,针对时序电路,分支描述可以不完整。 介绍同步复位与异步复位区别,分析同步复位代码的实现,并深入理解异步 复位形式上虽然是边沿触发,但实质上是电平触发的概念。 异步复位锁存器不再介绍,同学自学 关于异步时序电路,首先介绍同步时序电路,并对比二者,强调同步时序电 路的优点。尽量在实际设计中保证同步设计。 5.2 完整的模 10 计数器设计 完整分析一个功能齐全的代码,其中新概念是关系比较运算,与 C 语言一样。 注意:<=可以同时表示非阻塞赋值或者是小于等于,具体是哪一种含义则要看 它的所处位置
第8章Verilog设计深入 教学目的:在掌握Verilog基础语法的基础上,深入学习阻塞与非阻塞赋值 的本质区别,使学生真正建立硬件思维:理解Verilog中的高阻态描述,并学会 利用高阻态实现三态及双向数据总线。 教学基本要求:在掌握Verilog基础语法的基础上,进一步提高对部分关键 语法特质的理解,尤其是2种赋值方式的区别和双向数据总线的实现、过程中的 两类赋值语句。 教学内容:过程中的两类赋值语句、过程语句应用总结、不完整条件语句与 时序电路的关系、雀语句归纳、三态与双向端口设计。 教学提示:非阻塞赋值在实际运行中仍然是串行执行的,但由于它的表达式 计算与操作数更新分开进行,导致了最终运算结果等价于并行执行,这是其与阻 塞赋值的本质差异。 学法指导:借用信号与系统中的冲激函数概念,可以有效的帮助学生理解非 阻塞赋值的实质。 作业:如何利用阻塞赋值达到非阻塞赋值的效果? 小结:这一章内容并不多,但对切实提高学生的编程能力十分关键,尤其是 阻塞与非阻塞赋值,这是Verilog语言中的著名难点,也是其特有的语法现象, 甚至许多具有多年经验的FPGA工程师也未能完全理清该问题。,初学者更是对并 发执行的特性难以接受。事实上,借用冲激函数概念,可以更好地帮助学生理解 非阻塞赋值的实质 详细大纲 8.1两种赋值语句 Verilog的著名难点:阻塞与非阻塞赋值,阻塞赋值英文是un--blocking assignment,它可以出现在两种场合,一种是Assign语句,一种是always块内部, 其中assign语句只能使用非阻塞语句,这是语法决定的。但always块内,则是 即可以是阻塞赋值,也可以是非阻塞赋值。 阻塞赋值的执行分成三步:首先是计算右边表达式的值,然后是赋值给左边 操作数,最后完成赋值,只要赋值语句中没有延时语句,这三个步骤不能分开 一旦开始赋值就要完成操作,目标变量的值即刻更新。阻塞赋值的这种执行过程, 6
16 第 8 章 Verilog 设计深入 教学目的:在掌握 Verilog 基础语法的基础上,深入学习阻塞与非阻塞赋值 的本质区别,使学生真正建立硬件思维;理解 Verilog 中的高阻态描述,并学会 利用高阻态实现三态及双向数据总线。 教学基本要求:在掌握 Verilog 基础语法的基础上,进一步提高对部分关键 语法特质的理解,尤其是 2 种赋值方式的区别和双向数据总线的实现、过程中的 两类赋值语句。 教学内容:过程中的两类赋值语句、过程语句应用总结、不完整条件语句与 时序电路的关系、if 语句归纳、三态与双向端口设计。 教学提示:非阻塞赋值在实际运行中仍然是串行执行的,但由于它的表达式 计算与操作数更新分开进行,导致了最终运算结果等价于并行执行,这是其与阻 塞赋值的本质差异。 学法指导:借用信号与系统中的冲激函数概念,可以有效的帮助学生理解非 阻塞赋值的实质。 作业:如何利用阻塞赋值达到非阻塞赋值的效果? 小结:这一章内容并不多,但对切实提高学生的编程能力十分关键,尤其是 阻塞与非阻塞赋值,这是 Verilog 语言中的著名难点,也是其特有的语法现象, 甚至许多具有多年经验的 FPGA 工程师也未能完全理清该问题。初学者更是对并 发执行的特性难以接受。事实上,借用冲激函数概念,可以更好地帮助学生理解 非阻塞赋值的实质。 详细大纲 8.1 两种赋值语句 Verilog 的著名难点:阻塞与非阻塞赋值,阻塞赋值英文是 un-blocking assignment,它可以出现在两种场合,一种是 Assign 语句,一种是 always 块内部, 其中 assign 语句只能使用非阻塞语句,这是语法决定的。但 always 块内,则是 即可以是阻塞赋值,也可以是非阻塞赋值。 阻塞赋值的执行分成三步:首先是计算右边表达式的值,然后是赋值给左边 操作数,最后完成赋值,只要赋值语句中没有延时语句,这三个步骤不能分开, 一旦开始赋值就要完成操作,目标变量的值即刻更新。阻塞赋值的这种执行过程
主要是继承了软件编程语言的顺序执行语句。 而非阻塞赋值是Verilog特有的一种赋值方式,它是为了适应硬件电路的运 行特点而产生的。它的执行也可以分成三个步骤:运算、赋值、赋值完成。但是 它在运算完成后,就不再继续执行,而是执行另外的同类型非阻塞赋值语句的运 算操作,在所有非阻塞赋值语句的运算操作都完成后,然后再统一进行赋值操作 (即所谓并行执行理念)。最后全部赋值完成。 以教材上例5-1和例5-2为例,分析二者的区别: 首先假定A,B初值都是零,然后在同一时刻变成1,对例5一1,顺序执行 阻塞赋值,因此M1M2Q都是1,对例5-2,它采用的是非阻塞赋值,在A、B 没有变化前,按照代码书写内容,M1、M2、Q都为零,而在变化的时刻,这三 条语句会同时开始计算表达式的值,可以看到,对M1的赋值,计算结果为1、 M2的,注意它开始计算时M1还没有更新,因此这时M1仍为原值零,M2赋值 为零,同样,Q赋值M1和M2的或,但此时M1和M2都没有更新,因此最终 Q也为零。 如果是在时序电路中,阻塞赋值与非阻塞赋值的差异更大,它会直接导致综 合后电路的明显差异。 以下分析时序电路中采用两种赋值的对比: 首先分析非阻塞赋值,它定义了三个寄存型变量,ab,q,按照非阻塞赋值的 执行过程来分析,在一个时钟沿到来时,过程被激活运行,三条语句同时计算表 达式的值,然后一同更新。首先在上升沿时刻,D的值被寄存,这对应硬件电 路上的什么结构?1个D寄存器,然后呢,下一条语句是b<=a,注意这时候a 的值还没有更新,因此,相当于把a的老值寄存给b,这又对应一个寄存器,同 样地,Q<b也对应一个寄存器。 因此,我们从整体的角度看,这样的非阻塞赋值代码最终综合后是三个寄存 器级联。 而如果是阻塞赋值,a=D,一个寄存器,接下来b=a,这时候a已经更新 成D的值了,因此相当于b=D,同样地Q=D,因此这种写法最终导致a,b,Q三个 变量的值始终都是一样的,它们都是D变量的寄存器输出,综合后只有一个寄 存器。 17
17 主要是继承了软件编程语言的顺序执行语句。 而非阻塞赋值是 Verilog 特有的一种赋值方式,它是为了适应硬件电路的运 行特点而产生的。它的执行也可以分成三个步骤:运算、赋值、赋值完成。但是 它在运算完成后,就不再继续执行,而是执行另外的同类型非阻塞赋值语句的运 算操作,在所有非阻塞赋值语句的运算操作都完成后,然后再统一进行赋值操作 (即所谓并行执行理念)。最后全部赋值完成。 以教材上例 5-1 和例 5-2 为例,分析二者的区别: 首先假定 A,B 初值都是零,然后在同一时刻变成 1,对例 5-1,顺序执行 阻塞赋值,因此 M1/M2/Q 都是 1,对例 5-2,它采用的是非阻塞赋值,在 A、B 没有变化前,按照代码书写内容,M1、M2、Q 都为零,而在变化的时刻,这三 条语句会同时开始计算表达式的值,可以看到,对 M1 的赋值,计算结果为 1、 M2 的,注意它开始计算时 M1 还没有更新,因此这时 M1 仍为原值零,M2 赋值 为零,同样,Q 赋值 M1 和 M2 的或,但此时 M1 和 M2 都没有更新,因此最终 Q 也为零。 如果是在时序电路中,阻塞赋值与非阻塞赋值的差异更大,它会直接导致综 合后电路的明显差异。 以下分析时序电路中采用两种赋值的对比: 首先分析非阻塞赋值,它定义了三个寄存型变量,a,b,q,按照非阻塞赋值的 执行过程来分析,在一个时钟沿到来时,过程被激活运行,三条语句同时计算表 达式的值,然后一同更新。首先在上升沿时刻,D 的值被 a 寄存,这对应硬件电 路上的什么结构?1 个 D 寄存器,然后呢,下一条语句是 b<=a,注意这时候 a 的值还没有更新,因此,相当于把 a 的老值寄存给 b,这又对应一个寄存器,同 样地,Q<=b 也对应一个寄存器。 因此,我们从整体的角度看,这样的非阻塞赋值代码最终综合后是三个寄存 器级联。 而如果是阻塞赋值,a = D,一个寄存器,接下来 b = a,这时候 a 已经更新 成 D 的值了,因此相当于 b=D,同样地 Q=D,因此这种写法最终导致 a, b,Q 三个 变量的值始终都是一样的,它们都是 D 变量的寄存器输出,综合后只有一个寄 存器