通过实际的例子,来学习如何实现三态门。解释例(5-26)中新的状态Z, 如果ena不为l,也就是为零,那么DOUT就变成高阻态。这就实现了一个4位 的三态门。 关于高阻态:只能用于设计的引脚端口级,而不能用于模块内部信号,因为 FPGA,CPLD内部没有三态门的,只有LUT、寄存器这些资源,所以即使写了 三态,器件也无法实现,而引脚10级则是有三态门的,可以实现这些功能。 理解了三态门后,实现双向端口就很容易了,所谓双向,又能输出,又能输 入,但对应的都是一个端口,从时间上看,其实就是所谓的时分复用,控制端口 中三态门的状态,在三态门打开时,可以输出信号,对方接收,在三态门处于高 阻态时,这时候输出被禁用,外面的信号就可以通过输入缓冲器进来,这样就实 现了双向端口。 (双向端口电路设计一assign语句) 实现双向端口的核心就是控制好三态门的状态。通过例5一27学习。该模块 是双向端口的一个完整描述,可以作为设计中的一个子模块直接调用。解释代码 及功能(略),只有在ctn为0时输入数据才是有效的,ena为1时输入,反之输 入。 (双向端口电路设计一always语句) 用always块也可以实现,例5-29就是如此,靠Ctrl来控制端口方向,为零 时Q置为高阻,也就是输入模式,反之为输出模式。 (双向端口电路设计错误实例) 教材上例5-30给出了一个错误的例子,还有例5-31/5-32,这些课堂上都不 细讲了,本质上,大家只要控制好三态门的状态,不要出现分支遗漏情况,也尽 量不要使用多重赋值(像教材上的例5-315-32虽然可以实现正常功能,但从代 码风格的角度看,并不是一个好的设计,实际上,用一个多分支if/else或者Case 语句就可以了,大家可以自行写一下)。 8.7 Verilog设计准则 l:Verilog的语法很多,可综合语法只占Verilog语法的很小一部分,但正是 这一部分才是Verilog语法的精髓,要强调的是,Verilog不是软件代码,描述的 是硬件电路结构及其行为。在设计代码之前,最好先自己画一个结构图出来,设 22
22 通过实际的例子,来学习如何实现三态门。解释例(5-26)中新的状态 Z, 如果 ena 不为 1,也就是为零,那么 DOUT 就变成高阻态。这就实现了一个 4 位 的三态门。 关于高阻态:只能用于设计的引脚端口级,而不能用于模块内部信号,因为 FPGA,CPLD 内部没有三态门的,只有 LUT、寄存器这些资源,所以即使写了 三态,器件也无法实现,而引脚 IO 级则是有三态门的,可以实现这些功能。 理解了三态门后,实现双向端口就很容易了,所谓双向,又能输出,又能输 入,但对应的都是一个端口,从时间上看,其实就是所谓的时分复用,控制端口 中三态门的状态,在三态门打开时,可以输出信号,对方接收,在三态门处于高 阻态时,这时候输出被禁用,外面的信号就可以通过输入缓冲器进来,这样就实 现了双向端口。 (双向端口电路设计-assign 语句) 实现双向端口的核心就是控制好三态门的状态。通过例 5-27 学习。该模块 是双向端口的一个完整描述,可以作为设计中的一个子模块直接调用。解释代码 及功能(略),只有在 ctrl 为 0 时输入数据才是有效的,ena 为 1 时输入,反之输 入。 (双向端口电路设计-always 语句) 用 always 块也可以实现,例 5-29 就是如此,靠 Ctrl 来控制端口方向,为零 时 Q 置为高阻,也就是输入模式,反之为输出模式。 (双向端口电路设计错误实例) 教材上例 5-30 给出了一个错误的例子,还有例 5-31/5-32,这些课堂上都不 细讲了,本质上,大家只要控制好三态门的状态,不要出现分支遗漏情况,也尽 量不要使用多重赋值(像教材上的例 5-31/5-32 虽然可以实现正常功能,但从代 码风格的角度看,并不是一个好的设计,实际上,用一个多分支 if/else 或者 Case 语句就可以了,大家可以自行写一下)。 8.7 Verilog 设计准则 1:Verilog 的语法很多,可综合语法只占 Verilog 语法的很小一部分,但正是 这一部分才是 Verilog 语法的精髓,要强调的是,Verilog 不是软件代码,描述的 是硬件电路结构及其行为。在设计代码之前,最好先自己画一个结构图出来,设
计包含哪些模块,模块有哪些端口,各个模块完成什么功能,必要时还要画时序 图,然后确定没有问题了再开始写代码,尤其是在大型项目中,一上来就写代码 是最不可取的,一方面思路不可能考虑得面面俱到,写着改着,最后改得面目全 非。 而且,Verilog语言不像软件语言那么精妙,像C语言,指针、多维数组、 递归,很多高级算法在里面,往往程序写得很精致,执行效率比较高,但Verilog 恰恰相反,我们可以看到,基本上在可综合语句中,就是assign语句和always 语句,所有的功能都是在这些语句中完成,所以,Verilog不追求面子工程,只 考虑综合效果好不好。 2:对现代电子设计是尤其重要的,一定要有同步设计的理念在里面,同步 设计要求设计中的所有元器件都依赖于单一的或者有明确相位关系的时钟,所有 寄存器的翻转是依赖于固定时钟沿的,就是说它有一个稳定的工作节拍,最忌讳 异步信号,但实际上异步信号却不可避免,怎么办?同步化,像复位信号,如果 复位信号释放和时钟沿离得很近,那就会导致亚稳态的严重问题,因此,我们在 外部异步复位进来后都要先用寄存器打2拍,就样就做到了异步复位,同步释放。 同样地,如果有些信号是异步输入,也要先打2拍再使用。具体为什么打2 拍就可以,现在我们先不介绍,大家先知道应该怎么用,后面高级教程中我们会 详细解释。 3:关于输出信号,在数字电路早期,寄存器是比较宝贵的资源,因此输出 变量能用逻辑型就不用寄存型,但逻辑型有很大的问题,竞争、冒险不可避免, 经常会产生输出毛刺,这些毛刺一般都出现在其相关输入逻辑变量多位同时翻转 时,这是组合逻辑电路的先天特点,但事实上,如果采用寄存器型输出,只在每 个时钟沿采样一次,就是说寄存器型输出,只要保证时钟沿附近没有毛刺就行( 般毛刺是在时钟沿之后)就可以有效地避免毛刺现象,也正因为寄存器可以有效 滤除毛刺,现在FPGA中寄存器资源一般都是极其丰富的,所以大家不要怕浪费, 省个寄存器,出来一堆毛刺,后果更严重,这也是现代高速设计的一个基本准则。 从这个角度看,现在FPGA中己经很少有纯粹的组合逻辑电路了,寄存器占的比 例越来越大。 第9章Verilog系统设计优化 23
23 计包含哪些模块,模块有哪些端口,各个模块完成什么功能,必要时还要画时序 图,然后确定没有问题了再开始写代码,尤其是在大型项目中,一上来就写代码 是最不可取的,一方面思路不可能考虑得面面俱到,写着改着,最后改得面目全 非。 而且,Verilog 语言不像软件语言那么精妙,像 C 语言,指针、多维数组、 递归,很多高级算法在里面,往往程序写得很精致,执行效率比较高,但 Verilog 恰恰相反,我们可以看到,基本上在可综合语句中,就是 assign 语句和 always 语句,所有的功能都是在这些语句中完成,所以,Verilog 不追求面子工程,只 考虑综合效果好不好。 2:对现代电子设计是尤其重要的,一定要有同步设计的理念在里面,同步 设计要求设计中的所有元器件都依赖于单一的或者有明确相位关系的时钟,所有 寄存器的翻转是依赖于固定时钟沿的,就是说它有一个稳定的工作节拍,最忌讳 异步信号,但实际上异步信号却不可避免,怎么办?同步化,像复位信号,如果 复位信号释放和时钟沿离得很近,那就会导致亚稳态的严重问题,因此,我们在 外部异步复位进来后都要先用寄存器打 2 拍,就样就做到了异步复位,同步释放。 同样地,如果有些信号是异步输入,也要先打 2 拍再使用。具体为什么打 2 拍就可以,现在我们先不介绍,大家先知道应该怎么用,后面高级教程中我们会 详细解释。 3:关于输出信号,在数字电路早期,寄存器是比较宝贵的资源,因此输出 变量能用逻辑型就不用寄存型,但逻辑型有很大的问题,竞争、冒险不可避免, 经常会产生输出毛刺,这些毛刺一般都出现在其相关输入逻辑变量多位同时翻转 时,这是组合逻辑电路的先天特点,但事实上,如果采用寄存器型输出,只在每 个时钟沿采样一次,就是说寄存器型输出,只要保证时钟沿附近没有毛刺就行(一 般毛刺是在时钟沿之后)就可以有效地避免毛刺现象,也正因为寄存器可以有效 滤除毛刺,现在 FPGA 中寄存器资源一般都是极其丰富的,所以大家不要怕浪费, 省个寄存器,出来一堆毛刺,后果更严重,这也是现代高速设计的一个基本准则。 从这个角度看,现在 FPGA 中已经很少有纯粹的组合逻辑电路了,寄存器占的比 例越来越大。 第 9 章 Verilog 系统设计优化
教学目的:理解常用的系统优化手段 教学基本要求:了解资源共享、逻辑优化、串行化等资源优化手段的原理及 应用,掌握流水线技术的工作原理。 教学内容:资源优化、速度优化。 教学提示:由于并发执行语句的存在,HDL语言在可读性上明显逊色于各 类软件高级编程语言,而且代码量普遍很大,即使是一些中小规模HDL设计, 其代码也通常都在数千行甚至上万行,再加上后期的功能升级等要求,均对HDL 代码的可读性、可维护性提出了更高要求。因此学生必须注意提高自己的代码阅 读能力。 学法指导:针对同一设计要求,自行编写不同实现方式对应的Verilog代码, 并比较优劣,给出自己的结论。 作业:为什么流水线技术能有效提高工作速度?其缺陷是什么? 小结:这一章内容重点针对资源优化与速率优化2大方面展开,尤其是流水 线设计,是该章的重点,学生可以通过生活实例感知到流水线的优点,并推广至 EDA领域。 详细大纲 9.1资源优化 主要介绍三种常用的资源优化手段,重点使学生理解其工作原理。 9.11资源共享 注意不要盲目使用资源共享的策略优化。 重点是区分常系数乘法器与变系数乘法器 9.2速度优化 从福特公司生产的T型车引入工业流水线的概念,然后将其扩展至FPGA 设计中,并通过加法器设计实例实现流水线加法器。 插入一级流水线可使最高工作频率提高一倍左右。 第l0章Verilog状态机设计技术 教学目的:理解状态机的理念、优势,学会用Verilog设计同步状态机 教学基本要求:通过状态机设计实例讲解使学生掌握简单的状态机设计流 程,并进一步提高代码风格的规范性。 24
24 教学目的:理解常用的系统优化手段 教学基本要求:了解资源共享、逻辑优化、串行化等资源优化手段的原理及 应用,掌握流水线技术的工作原理。 教学内容:资源优化、速度优化。 教学提示:由于并发执行语句的存在,HDL 语言在可读性上明显逊色于各 类软件高级编程语言,而且代码量普遍很大,即使是一些中小规模 HDL 设计, 其代码也通常都在数千行甚至上万行,再加上后期的功能升级等要求,均对 HDL 代码的可读性、可维护性提出了更高要求。因此学生必须注意提高自己的代码阅 读能力。 学法指导:针对同一设计要求,自行编写不同实现方式对应的 Verilog 代码, 并比较优劣,给出自己的结论。 作业:为什么流水线技术能有效提高工作速度?其缺陷是什么? 小结:这一章内容重点针对资源优化与速率优化 2 大方面展开,尤其是流水 线设计,是该章的重点,学生可以通过生活实例感知到流水线的优点,并推广至 EDA 领域。 详细大纲 9.1 资源优化 主要介绍三种常用的资源优化手段,重点使学生理解其工作原理。 9.1.1 资源共享 注意不要盲目使用资源共享的策略优化。 重点是区分常系数乘法器与变系数乘法器 9.2 速度优化 从福特公司生产的 T 型车引入工业流水线的概念,然后将其扩展至 FPGA 设计中,并通过加法器设计实例实现流水线加法器。 插入一级流水线可使最高工作频率提高一倍左右。 第 10 章 Verilog 状态机设计技术 教学目的:理解状态机的理念、优势,学会用 Verilog 设计同步状态机 教学基本要求:通过状态机设计实例讲解使学生掌握简单的状态机设计流 程,并进一步提高代码风格的规范性
教学内容:Verilog状态机的一般形式、Moore和Mealy型状态机设计、状态 机编码方式、安全状态机。 教学提示:状态机设计是反映工程师FPGA应用能力的最直接手段,学生如 果想真正掌握EDA技术,必须具备有限状态机设计能力。 学法指导:首先给出状态机设计范式,从代码风格上引导学生学会3段式状 态机书写及设计。 作业:针对红绿灯设计实例进行改写,增加LED倒计时功能。 小结:状态机设计是现代数字电路设计中最重要的设计手段,此前的简单时 序电路均可以视作是状态机的简化,状态机的功能十分强大,不亚于传统的CPU。 但状态机的核心是同步时序电路,只有从电路的角度去考虑,才能理解状态机的 设计关键。本章是我们整个教材的重点,也是难点,一旦掌握了状态机设计技术, 使用Verilog完成各种系统设计都会游刃有余。 该章节教材上小节很多,但实际上只有10.1小节是重点,后续小节知识点以 学生自学为主,不再课堂统一讲解,这样不仅提高教学效率,而且有助于培养学 生自己解决问题的能力。 详细大纲 引言 状态机设计是现代数字电路设计中最重要的设计手段,此前的简单时序电路 均可以视作是状态机的简化,状态机的功能十分强大,不亚于传统的CPU。但 状态机的核心是同步时序电路,只有从电路的角度去考虑,才能理解状态机的设 计关键。 本章是我们整个教材的重点,也是难点,一旦掌握了状态机设计技术,使用 Verilog完成各种系统设计都会游刃有余,且以后的EDA实验也会以状态机设计 为主,要求学生重视该章节学习。 10.1状态机的一般形式 理论上,只要有时序电路,就有状态机(举例说明D触发器、4位计数器都 是简化状态机),但这种并非有意写出的状态机,在Verilog中,对状态机的描述 是有相对比较固定的模式的,只要掌握了这些模式,就可以很轻松地设计出各种 状态机。 25
25 教学内容:Verilog 状态机的一般形式、Moore 和 Mealy 型状态机设计、状态 机编码方式、安全状态机。 教学提示:状态机设计是反映工程师 FPGA 应用能力的最直接手段,学生如 果想真正掌握 EDA 技术,必须具备有限状态机设计能力。 学法指导:首先给出状态机设计范式,从代码风格上引导学生学会 3 段式状 态机书写及设计。 作业:针对红绿灯设计实例进行改写,增加 LED 倒计时功能。 小结:状态机设计是现代数字电路设计中最重要的设计手段,此前的简单时 序电路均可以视作是状态机的简化,状态机的功能十分强大,不亚于传统的CPU。 但状态机的核心是同步时序电路,只有从电路的角度去考虑,才能理解状态机的 设计关键。本章是我们整个教材的重点,也是难点,一旦掌握了状态机设计技术, 使用 Verilog 完成各种系统设计都会游刃有余。 该章节教材上小节很多,但实际上只有 10.1 小节是重点,后续小节知识点以 学生自学为主,不再课堂统一讲解,这样不仅提高教学效率,而且有助于培养学 生自己解决问题的能力。 详细大纲 引言 状态机设计是现代数字电路设计中最重要的设计手段,此前的简单时序电路 均可以视作是状态机的简化,状态机的功能十分强大,不亚于传统的 CPU。但 状态机的核心是同步时序电路,只有从电路的角度去考虑,才能理解状态机的设 计关键。 本章是我们整个教材的重点,也是难点,一旦掌握了状态机设计技术,使用 Verilog 完成各种系统设计都会游刃有余,且以后的 EDA 实验也会以状态机设计 为主,要求学生重视该章节学习。 10.1 状态机的一般形式 理论上,只要有时序电路,就有状态机(举例说明 D 触发器、4 位计数器都 是简化状态机),但这种并非有意写出的状态机,在 Verilog 中,对状态机的描述 是有相对比较固定的模式的,只要掌握了这些模式,就可以很轻松地设计出各种 状态机
10.1.1状态机的特点与优势: 状态机与CU,这是数字电路领域中最强大的两种武器,当然后者可能名气 更大(介绍典型的CPU),但从功能上,状态机并不逊色于它,甚至许多场合下 还要优于CPU。 介绍状态机主要特点:1、借用CPU的顺序控制模型,克服硬件系统顺序方 式控制不灵活的缺点:2、EDA工具支持良好,可有效优化状态机设计,降低人 工设计难度(像一些冗余状态消除、编码选择,EDA都可以自动完成):3、采 用同步时序的状态机可有效避免竞争冒险现象,工作稳定可靠:4、性能高效, 可灵活设计多个状态机、嵌套状态机,多个状态机并行工作,处理性能远超CPU (近年来火爆的多核CPU也是吸取了状态机的特色),正因为状态机的并行工作 特性,虽然其工作频率一般较低(FPGA系统一般在10OM-20OM就己经算高速 系统),但吞吐量仍可大大超过工作频率数GHz的CPU。 10.12状态机的一般结构 主控时序过程、主控组合过程、以及辅助过程。 第13章Verilog语法补充说明 教学目的:在已有的学习基础上,进一步查缺补漏,建立完整的Verilog语 法体系 教学基本要求:掌握initial块语句用法,了解条件编译指令。 教学内容:Verilog文字规则、变量数据类型、常用语句补充、用库元件实现 结构描述。 教学提示:仍然借用C语言知识与Verilog展开多方面对比,找出异同点。 学法指导:通过典型设计代码讲解消化新的语法知识点。 作业:思考为什么库文件设计手段未能得到广泛应用。 小结:这一章知识点相对琐碎,但重点并不多,大部分属于了解范畴,只有 initi过程块应用相对广泛,要求学生掌握。 详细大纲 l3.1 Verilog文字规则 常数的3种类型 1.整数,可综合 6
26 10.1.1 状态机的特点与优势: 状态机与 CPU,这是数字电路领域中最强大的两种武器,当然后者可能名气 更大(介绍典型的 CPU),但从功能上,状态机并不逊色于它,甚至许多场合下 还要优于 CPU。 介绍状态机主要特点:1、借用 CPU 的顺序控制模型,克服硬件系统顺序方 式控制不灵活的缺点;2、EDA 工具支持良好,可有效优化状态机设计,降低人 工设计难度(像一些冗余状态消除、编码选择,EDA 都可以自动完成);3、采 用同步时序的状态机可有效避免竞争冒险现象,工作稳定可靠;4、性能高效, 可灵活设计多个状态机、嵌套状态机,多个状态机并行工作,处理性能远超 CPU (近年来火爆的多核 CPU 也是吸取了状态机的特色),正因为状态机的并行工作 特性,虽然其工作频率一般较低(FPGA 系统一般在 100M~200M 就已经算高速 系统),但吞吐量仍可大大超过工作频率数 GHz 的 CPU。 10.1.2 状态机的一般结构 主控时序过程、主控组合过程、以及辅助过程。 第 13 章 Verilog 语法补充说明 教学目的:在已有的学习基础上,进一步查缺补漏,建立完整的 Verilog 语 法体系。 教学基本要求:掌握 initial 块语句用法,了解条件编译指令。 教学内容:Verilog 文字规则、变量数据类型、常用语句补充、用库元件实现 结构描述。 教学提示:仍然借用 C 语言知识与 Verilog 展开多方面对比,找出异同点。 学法指导:通过典型设计代码讲解消化新的语法知识点。 作业:思考为什么库文件设计手段未能得到广泛应用。 小结:这一章知识点相对琐碎,但重点并不多,大部分属于了解范畴,只有 initial 过程块应用相对广泛,要求学生掌握。 详细大纲 13.1 Verilog 文字规则 常数的 3 种类型 1. 整数,可综合