已阅读5页,还剩21页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第十章 设计练习进阶 2 6 6 设计练习进阶 前言 在前面九章学习的基础上 通过本章十个阶段的练习 一定能逐步掌握 V e r i l o g H D L 设计的 要点 我们可以先理解样板模块中每一条语句的作用 然后对样板模块进行综合前和综合后 仿真 再独立完成每一阶段规定的练习 当十个阶段的练习做完后 便可以开始设计一些简 单的逻辑电路和系统 很快我们就能过渡到设计相当复杂的数字逻辑系统 当然 复杂的数 字逻辑系统的设计和验证 不但需要系统结构的知识和经验的积累 还需要了解更多的语法 现象和掌握高级的 V e r i l o g H D L 系统任务 以及与 C 语言模块接口的方法 即 P L I 这些已 超出的本书的范围 有兴趣的同学可以阅读 V e r i l o g 语法参考资料和有关文献 自己学习 我们将在下一本书中介绍 V e r i l o g 较高级的用法 练习一 简单的组合逻辑设计 目的 掌握基本组合逻辑电路的实现方法 这是一个可综合的数据比较器 很容易看出它的功能是比较数据 a与数据 b 如果两个 数据相同 则给出结果 1 否则给出结果 0 在 V e r i l o g H D L 中 描述组合逻辑时常使用 a s s i g n 结构 注意 e q u a l a b 1 0 这是一种在组合逻辑实现分支判断时常使用的格式 模块源代码 c o m p a r e v m o d u l e c o m p a r e e q u a l a b i n p u t a b o u t p u t e q u a l a s s i g n e q u a l a b 1 0 a 等于 b 时 e q u a l输出为 1 a 不等于 b 时 e q u a l 输出为 0 e n d m o d u l e 测试模块用于检测模块设计得正确与否 它给出模块的输入信号 观察模块的内部信号 和输出信号 如果发现结果与预期的有所偏差 则要对设计模块进行修改 测试模块源代码 t i m e s c a l e 1 n s 1 n s 定义时间单位 i n c l u d e c o m p a r e v 包含模块文件 在有的仿真调试环境中并不需要此语句 而需要从调试环境的菜单中键入有关模块文件的路径和名称 m o d u l e c o m p a r e t e s t r e g a b w i r e e q u a l i n i t i a l i n i t i a l 常用于仿真时信号的给出 W W W CPLD FPG A NET 第十章 设计练习进阶 2 6 7 b e g i n a 0 b 0 1 0 0 a 0 b 1 1 0 0 a 1 b 1 1 0 0 a 1 b 0 1 0 0 s t o p 系统任务 暂停仿真以便观察仿真波形 e n d c o m p a r e c o m p a r e 1 e q u a l e q u a l a a b b 调用模块 e n d m o d u l e 仿真波形 部分 练习 设计一个字节 8 位 比较器 要求 比较两个字节的大小 如 a 7 0 大于 b 7 0 输出高电平 否则输出低电平 改写测试 模型 使其能进行比较全面的测试 练习二 简单时序逻辑电路的设计 目的 掌握基本时序逻辑电路的实现 在 V e r i l o g H D L 中 相对于组合逻辑电路 时序逻辑电路也有规定的表述方式 在可综 合的 V e r i l o g H D L 模型 我们通常使用 a l w a y s 块和 p o s e d g e c l k 或 n e g e d g e c l k 的结 构来表述时序逻辑 下面是一个 1 2 分频器的可综合模型 h a l f c l k v m o d u l e h a l f c l k r e s e t c l k i n c l k o u t i n p u t c l k i n r e s e t o u t p u t c l k o u t r e g c l k o u t a l w a y s p o s e d g e c l k i n 第十章 设计练习进阶 2 6 8 b e g i n i f r e s e t c l k o u t 0 e l s e c l k o u t c l k o u t e n d e n d m o d u l e 在 a l w a y s 块中 被赋值的信号都必须定义为 r e g型 这是由时序逻辑电路的特点所决定的 对于 r e g 型数据 如果未对它进行赋值 仿真工具会认为它是不定态 为了能正确地观察到 仿真结果 在可综合风格的模块中我们通常定义一个复位信号 r e s e t 当 r e s e t 为低电平时 对电路中的寄存器进行复位 测试模块的源代码 c l k T o p v t i m e s c a l e 1 n s 1 0 0 p s d e f i n e c l k c y c l e 5 0 m o d u l e c l k T o p v r e g c l k r e s e t w i r e c l k o u t a l w a y s c l k c y c l e c l k c l k i n i t i a l b e g i n c l k 0 r e s e t 1 1 0 0 r e s e t 0 1 0 0 r e s e t 1 1 0 0 0 0 s t o p e n d h a l f c l k h a l f c l k r e s e t r e s e t c l k i n c l k c l k o u t c l k o u t e n d m o d u l e 仿真波形 第十章 设计练习进阶 2 6 9 练习 依然作 c l k i n 的二分频 c l k o u t 要求输出与上例的输出正好反相 编写测试模块 给出仿真波形 练习三 利用条件语句实现较复杂的时序逻辑电路 目的 掌握条件语句在 V e r i l o g H D L 中的使用 与常用的高级程序语言一样 为了描述较为复杂的时序关系 V e r i l o g H D L 提供了条件语 句供分支判断时使用 在可综合风格的 V e r i l o g H D L 模型中常用的条件语句有 i f e l s e和 c a s e e n d c a s e 两种结构 用法和 C 程序语言中类似 两者相较 i f e l s e用于不很复杂的 分支关系 实际编写可综合风格的模块 特别是用状态机构成的模块时 更常用的是 c a s e e n d c a s e 风格的代码 这一节我们给的是有关 i f e l s e 的范例 有关 c a s e e n d c a s e 结构的代码已后会经常用到 下面给出的范例也是一个可综合风格的分频器 是将 1 0 M 的时钟分频为 5 0 0 K 的时钟 基 本原理与 1 2 分频器是一样的 但是需要定义一个计数器 以便准确获得 1 2 0分频 模块源代码 f d i v i s i o n v m o d u l e f d i v i s i o n R E S E T F 1 0 M F 5 0 0 K i n p u t F 1 0 M R E S E T o u t p u t F 5 0 0 K r e g F 5 0 0 K r e g 7 0 j a l w a y s p o s e d g e F 1 0 M i f R E S E T 低电平复位 b e g i n F 5 0 0 K 0 j 0 e n d e l s e b e g i n i f j 1 9 对计数器进行判断 以确定 F 5 0 0 K 信号是否反转 b e g i n j 0 F 5 0 0 K F 5 0 0 K e n d e l s e j j 1 e n d e n d m o d u l e 第十章 设计练习进阶 2 7 0 测试模块源代码 f d i v i s i o n T o p v t i m e s c a l e 1 n s 1 0 0 p s d e f i n e c l k c y c l e 5 0 m o d u l e d i v i s i o n T o p r e g F 1 0 M c l k R E S E T w i r e F 5 0 0 K c l k a l w a y s c l k c y c l e F 1 0 M c l k F 1 0 M c l k i n i t i a l b e g i n R E S E T 1 F 1 0 M 0 1 0 0 R E S E T 0 1 0 0 R E S E T 1 1 0 0 0 0 s t o p e n d f d i v i s i o n f d i v i s i o n R E S E T R E S E T F 1 0 M F 1 0 M c l k F 5 0 0 K F 5 0 0 K c l k e n d m o d u l e 仿真波形 练习 利用 1 0 M 的时钟 设计一个单周期形状如下的周期波形 练习四 设计时序逻辑时采用阻塞赋值与非阻塞赋值的区别 1 0 s 2 0 s 2 0 s 0 T 第十章 设计练习进阶 2 7 1 目的 1 明确掌握阻塞赋值与非阻塞赋值的概念和区别 2 了解阻塞赋值的使用情况 阻塞赋值与非阻塞赋值 在教材中我们已经了解了它们之间在语法上的区别以及综合后 所得到的电路结构上的区别 在 a l w a y s 块中 阻塞赋值可以理解为赋值语句是顺序执行的 而非阻塞赋值可以理解为赋值语句是并发执行的 实际的时序逻辑设计中 一般的情况下非 阻塞赋值语句被更多地使用 有时为了在同一周期实现相互关联的操作 也使用了阻塞赋值 语句 注意 在实现组合逻辑的 a s s i g n 结构中 无一例外地都必须采用阻塞赋值语句 下例通过分别采用阻塞赋值语句和非阻塞赋值语句的两个看上去非常相似的两个模块 b l o c k i n g v 和 n o n b l o c k i n g v 来阐明两者之间的区别 模块源代码 b l o c k i n g v m o d u l e b l o c k i n g c l k a b c o u t p u t 3 0 b c i n p u t 3 0 a i n p u t c l k r e g 3 0 b c a l w a y s p o s e d g e c l k b e g i n b a c b d i s p l a y B l o c k i n g a d b d c d a b c e n d e n d m o d u l e n o n b l o c k i n g v m o d u l e n o n b l o c k i n g c l k a b c o u t p u t 3 0 b c i n p u t 3 0 a i n p u t c l k r e g 3 0 b c a l w a y s p o s e d g e c l k b e g i n b a c b d i s p l a y N o n B l o c k i n g a d b d c d a b c e n d 第十章 设计练习进阶 2 7 2 e n d m o d u l e 测试模块源代码 c o m p a r e T o p v t i m e s c a l e 1 n s 1 0 0 p s i n c l u d e b l o c k i n g v i n c l u d e n o n b l o c k i n g v m o d u l e c o m p a r e T o p w i r e 3 0 b 1 c 1 b 2 c 2 r e g 3 0 a r e g c l k i n i t i a l b e g i n c l k 0 f o r e v e r 5 0 c l k c l k e n d i n i t i a l b e g i n a 4 h 3 d i s p l a y 1 0 0 a 4 h 7 d i s p l a y 1 0 0 a 4 h f d i s p l a y 1 0 0 a 4 h a d i s p l a y 1 0 0 a 4 h 2 d i s p l a y 1 0 0 d i s p l a y s t o p e n d n o n b l o c k i n g n o n b l o c k i n g c l k a b 2 c 2 b l o c k i n g b l o c k i n g c l k a b 1 c 1 e n d m o d u l e 第十章 设计练习进阶 2 7 3 仿真波形 部分 思考 在 b l o c k i n g 模块中按如下写法 仿真与综合的结果会有什么样的变化 作出仿真 波形 分析综合结果 1 a l w a y s p o s e d g e c l k b e g i n c b b a e n d 2 a l w a y s p o s e d g e c l k b a a l w a y s p o s e d g e c l k c b 练习五 用 a l w a y s 块实现较复杂的组合逻辑电路 目的 1 掌握用 a l w a y s 实现组合逻辑电路的方法 2 了解 a s s i g n 与 a l w a y s两种组合逻辑电路实现方法之间的区别 仅使用 a s s i g n 结构来实现组合逻辑电路 在设计中会发现很多地方会显得冗长且效率低 下 而适当地采用 a l w a y s 来设计组合逻辑 往往会更具实效 已进行的范例和练习中 我们 仅在实现时序逻辑电路时使用 a l w a y s 块 从现在开始 我们对它的看法要稍稍改变 下面是一个简单的指令译码电路的设计示例 该电路通过对指令的判断 对输入数据执 行相应的操作 包括加 减 与 或和求反 并且无论是指令作用的数据还是指令本身发生 变化 结果都要作出及时的反应 显然 这是一个较为复杂的组合逻辑电路 如果采用 a s s i g n 语句 表达起来非常复杂 示例中使用了电平敏感的 a l w a y s 块 所谓电平敏感的触发条件是 指在 后的括号内电平列表中的任何一个电平发生变化 与时序逻辑不同 它在 后的括号内 没有沿敏感关键词 如 p o s e d g e 或 n e g e d g e 就能触发 a l w a y s 块的动作 并且运用了 c a s e 结构来进行分支判断 不但设计思想得到直观的体现 而且代码看起来非常整齐 便于理解 a l u v d e f i n e p l u s 3 d 0 d e f i n e m i n u s 3 d 1 d e f i n e b a n d 3 d 2 d e f i n e b o r 3 d 3 d e f i n e u n e g a t e 3 d 4 m o d u l e a l u o u t o p c o d e a b 第十章 设计练习进阶 2 7 4 o u t p u t 7 0 o u t r e g 7 0 o u t i n p u t 2 0 o p c o d e i n p u t 7 0 a b 操作数 a l w a y s o p c o d e o r a o r b 电平敏感的 a l w a y s 块 b e g i n c a s e o p c o d e p l u s o u t a b 加操作 m i n u s o u t a b 减操作 b a n d o u t a 求与 b o r o u t a b 求或 u n e g a t e o u t a 求反 d e f a u l t o u t 8 h x 未收到指令时 输出任意态 e n d c a s e e n d e n d m o d u l e 同一组合逻辑电路分别用 a l w a y s 块和连续赋值语句 a s s i g n描述时 代码的形式大相径 庭 但是在 a l w a y s 中适当运用 d e f a u l t 在 c a s e 结构中 和 e l s e 在 i f e l s e 结构中 通常可以综合为纯组合逻辑 尽管被赋值的变量一定要定义为 r e g型 不过 如果不使用 d e f a u l t 或 e l s e 对缺省项进行说明 则易生成意想不到的锁存器 这一点一定要加以注意 指令译码器的测试模块源代码 a l u T o p v t i m e s c a l e 1 n s 1 n s i n c l u d e a l u v m o d u l e a l u t e s t w i r e 7 0 o u t r e g 7 0 a b r e g 2 0 o p c o d e p a r a m e t e r t i m e s 5 i n i t i a l b e g i n a r a n d o m 2 5 6 G i v e a r a d o m n u m b e r b l o n g s t o 0 2 5 5 b r a n d o m 2 5 6 G i v e a r a d o m n u m b e r b l o n g s t o 0 2 5 5 o p c o d e 3 h 0 r e p e a t t i m e s b e g i n 1 0 0 a r a n d o m 2 5 6 G i v e a r a d o m n u m b e r b r a n d o m 2 5 6 G i v e a r a d o m n u m b e r o p c o d e o p c o d e 1 e n d 第十章 设计练习进阶 2 7 5 1 0 0 s t o p e n d a l u a l u 1 o u t o p c o d e a b e n d m o d u l e 仿真波形 部分 练习 运用 a l w a y s 块设计一个八路数据选择器 要求 每路输入数据与输出数据均为 4 位 2 进制数 当选择开关 至少 3 位 或输入数据发生变化时 输出数据也相应地变化 练习六 在 V e r i l o g H D L 中使用函数 目的 掌握函数在模块设计中的使用 与一般的程序设计语言一样 V e i r l o g H D L也可使用函数以适应对不同变量采取同一运 算的操作 V e i r l o g H D L函数在综合时被理解成具有独立运算功能的电路 每调用一次函数 相当于改变这部分电路的输入以得到相应的计算结果 下例是函数调用的一个简单示范 采用同步时钟触发运算的执行 每个 c l k 时钟周期都 会执行一次运算 并且在测试模块中 通过调用系统任务 d i s p l a y 在时钟的下降沿显示每次 计算的结果 模块源代码 m o d u l e t r y f u n c t c l k n r e s u l t r e s e t o u t p u t 3 1 0 r e s u l t i n p u t 3 0 n i n p u t r e s e t c l k r e g 3 1 0 r e s u l t a l w a y s p o s e d g e c l k c l k 的上沿触发同步运算 b e g i n i f r e s e t r e s e t 为低时复位 r e s u l t 0 e l s e b e g i n 第十章 设计练习进阶 2 7 6 r e s u l t n f a c t o r i a l n n 2 1 e n d e n d f u n c t i o n 3 1 0 f a c t o r i a l 函数定义 i n p u t 3 0 o p e r a n d r e g 3 0 i n d e x b e g i n f a c t o r i a l o p e r a n d 1 0 f o r i n d e x 2 i n d e x o p e r a n d i n d e x i n d e x 1 f a c t o r i a l i n d e x f a c t o r i a l e n d e n d f u n c t i o n e n d m o d u l e 测试模块源代码 i n c l u d e s t e p 6 v t i m e s c a l e 1 n s 1 0 0 p s d e f i n e c l k c y c l e 5 0 m o d u l e t r y f u c t T o p r e g 3 0 n i r e g r e s e t c l k w i r e 3 1 0 r e s u l t i n i t i a l b e g i n n 0 r e s e t 1 c l k 0 1 0 0 r e s e t 0 1 0 0 r e s e t 1 f o r i 0 i y b e g i n t m p x x 与 y 变量的内容互换 要求顺序执行 所以采用阻塞赋值方式 x y y t m p e n d e n d t a s k e n d m o d u l e 值得注意的是 t a s k 中的变量定义与模块中的变量定义不尽相同 它们并不受输入输出类 型的限制 如此例 x 与y 对于t a s k s o r t 2 来说虽然是i n o u t 型 但实际上它们对应的是a l w a y s 块中变量 都是 r e g 型变量 测试模块源代码 t i m e s c a l e 1 n s 1 0 0 p s i n c l u d e s o r t 4 v m o d u l e t a s k T o p r e g 3 0 a b c d w i r e 3 0 r a r b r c r d i n i t i a l b e g i n a 0 b 0 c 0 d 0 r e p e a t 5 b e g i n 1 0 0 a r a n d o m 1 5 b r a n d o m 1 5 c r a n d o m 1 5 d r a n d o m 1 5 e n d 第十章 设计练习进阶 2 7 9 1 0 0 s t o p s o r t 4 s o r t 4 a a b b c c d d r a r a r b r b r c r c r d r d e n d m o d u l e 仿真波形 部分 练习 设计一个模块 通过任务完成 3 个 8 位 2 进制输入数据的冒泡排序 要求 时钟触发 任务的执行 每个时钟周期完成一次数据交换的操作 练习八 利用有限状态机进行复杂时序逻辑的设计 目的 掌握利用有限状态机实现复杂时序逻辑的方法 在数字电路中我们已经学习过通过建立有限状态机来进行数字逻辑的设计 而在 V e r i l o g H D L硬件描述语言中 这种设计方法得到进一步的发展 通过 V e r i l o g H D L提供的 语句 我们可以直观地设计出适合更为复杂的时序逻辑的电路 关于有限状态机的设计方法 在教材中已经作了较为详细的阐述 在此就不赘述了 下例是一个简单的状态机设计 功能是检测一个 5 位二进制序列 1 0 0 1 0 考虑到序列 重叠的可能 有限状态机共提供 8 个状态 包括初始状态 I D L E 模块源代码 s e q d e t v m o d u l e s e q d e t x z c l k r s t s t a t e i n p u t x c l k r s t o u t p u t z o u t p u t 2 0 s t a t e r e g 2 0 s t a t e w i r e z 第十章 设计练习进阶 2 8 0 p a r a m e t e r I D L E d 0 A d 1 B d 2 C d 3 D d 4 E d 5 F d 6 G d 7 a s s i g n z s t a t e E 当 x 0 时 状态已变为 E 状态为 D 时 x 仍为 1 因此 输出为 1 的条件为 s t a t e E e n d e l s e c a s e x s t a t e I D L E i f x 1 b e g i n s t a t e A e n d A i f x 0 b e g i n s t a t e B e n d B i f x 0 b e g i n s t a t e C e n d e l s e b e g i n s t a t e F e n d C i f x 1 b e g i n s t a t e D e n d e l s e b e g i n s t a t e G e n d D i f x 0 b e g i n s t a t e E 第十章 设计练习进阶 2 8 1 e n d e l s e b e g i n s t a t e A e n d E i f x 0 b e g i n s t a t e C e n d e l s e b e g i n s t a t e A e n d F i f x 1 b e g i n s t a t e A e n d e l s e b e g i n s t a t e B e n d G i f x 1 b e g i n s t a t e F e n d d e f a u l t s t a t e I D L E 缺省状态为初始状态 e n d c a s e e n d m o d u l e 测试模块源代码 s e q d e t v t i m e s c a l e 1 n s 1 n s i n c l u d e s e q d e t v m o d u l e s e q d e t T o p r e g c l k r s t r e g 2 3 0 d a t a w i r e 2 0 s t a t e w i r e z x a s s i g n x d a t a 2 3 a l w a y s 1 0 c l k c l k a l w a y s p o s e d g e c l k d a t a d a t a 2 2 0 d a t a 2 3 i n i t i a l 第十章 设计练习进阶 2 8 2 b e g i n c l k 0 r s t 1 2 r s t 0 3 0 r s t 1 d a t a b 1 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 5 0 0 s t o p e n d s e q d e t m x z c l k r s t s t a t e e n d m o d u l e 仿真波形 练习 设计一个串行数据检测器 要求是 连续 4 个或 4 个以上的 1 时输出为 1 其他输入 情况下为 0 编写测试模块并给出仿真波形 练习九 利用状态机的嵌套实现层次结构化设计 目的 运用主状态机与子状态机产生层次化的逻辑设计 在结构化设计中灵活使用任务 t a s k 结构 在上一节 我们学习了如何使用状态机的实例 实际上 单个有限状态机控制整个逻辑 电路的运转在实际设计中是不多见 往往是状态机套用状态机 从而形成树状的控制核心 这一点也与我们提倡的层次化 结构化的自顶而下的设计方法相符 下面我们就将提供一个 这样的示例以供大家学习 该例是一个简化的 E P R O M 的串行写入器 事实上 它是一个 E P R O M读写器设计中实现写 功能的部分经删节得到的 去除了 E P R O M 的启动 结束和 E P R O M控制字的写入等功能 只具 备这样一个雏形 工作的步骤是 地址的串行写入 数据的串行写入 3 给信号源应 答 信号源给出下一个操作对象 结束写操作 通过移位令并行数据得以一位一位输出 模块源代码 第十章 设计练习进阶 2 8 3 m o d u l e w r i t i n g r e s e t c l k a d d r e s s d a t a s d a a c k i n p u t r e s e t c l k i n p u t 7 0 d a t a a d d r e s s o u t p u t s d a a c k s d a 负责串行数据输出 a c k 是一个对象操作完毕后 模块给出的应答信号 r e g l i n k w r i t e l i n k w r i t e 决定何时输出 r e g 3 0 s t a t e 主状态机的状态字 r e g 4 0 s h 8 o u t s t a t e 从状态机的状态字 r e g 7 0 s h 8 o u t b u f 输入数据缓冲 r e g f i n i s h F 用以判断是否处理完一个操作对象 r e g a c k p a r a m e t e r i d l e 0 a d d r w r i t e 1 d a t a w r i t e 2 s t o p a c k 3 p a r a m e t e r b i t 0 1 b i t 1 2 b i t 2 3 b i t 3 4 b i t 4 5 b i t 5 6 b i t 6 7 b i t 7 8 a s s i g n s d a l i n k w r i t e s h 8 o u t b u f 7 1 b z a l w a y s p o s e d g e c l k b e g i n i f r e s e t 复位 b e g i n l i n k w r i t e 0 s t a t e i d l e f i n i s h F 0 s h 8 o u t s t a t e i d l e a c k 0 s h 8 o u t b u f 0 e n d e l s e c a s e s t a t e i d l e b e g i n l i n k w r i t e 0 s t a t e i d l e f i n i s h F 0 s h 8 o u t s t a t e i d l e a c k 0 s h 8 o u t b u f a d d r e s s s t a t e a d d r w r i t e e n d 第十章 设计练习进阶 2 8 4 a d d r w r i t e 地址的输入 b e g i n i f f i n i s h F 0 b e g i n s h i f t 8 o u t e n d e l s e b e g i n s h 8 o u t s t a t e i d l e s h 8 o u t b u f d a t a s t a t e d a t a w r i t e f i n i s h F 0 e n d e n d d a t a w r i t e 数据的写入 b e g i n i f f i n i s h F 0 b e g i n s h i f t 8 o u t e n d e l s e b e g i n l i n k w r i t e 0 s t a t e s t o p a c k f i n i s h F 0 a c k 1 e n d e n d s t o p a c k 完成应答 b e g i n a c k 0 s t a t e i d l e e n d e n d c a s e e n d t a s k s h i f t 8 o u t 串行写入 b e g i n c a s e s h 8 o u t s t a t e i d l e b e g i n l i n k w r i t e 1 s h 8 o u t s t a t e b i t 0 第十章 设计练习进阶 2 8 5 e n d b i t 0 b e g i n l i n k w r i t e 1 s h 8 o u t s t a t e b i t 1 s h 8 o u t b u f s h 8 o u t b u f 1 e n d b i t 1 b e g i n s h 8 o u t s t a t e b i t 2 s h 8 o u t b u f s h 8 o u t b u f 1 e n d b i t 2 b e g i n s h 8 o u t s t a t e b i t 3 s h 8 o u t b u f s h 8 o u t b u f 1 e n d b i t 3 b e g i n s h 8 o u t s t a t e b i t 4 s h 8 o u t b u f s h 8 o u t b u f 1 e n d b i t 4 b e g i n s h 8 o u t s t a t e b i t 5 s h 8 o u t b u f s h 8 o u t b u f 1 e n d b i t 5 b e g i n s h 8 o u t s t a t e b i t 6 s h 8 o u t b u f s h 8 o u t b u f 1 e n d b i t 6 b e g i n s h 8 o u t s t a t e b i t 7 s h 8 o u t b u f s h 8 o u t b u f 1 e n d 第十章 设计练习进阶 2 8 6 b i t 7 b e g i n l i n k w r i t e 0 f i n i s h F f i n i s h F 1 e n d e n d c a s e e n d e n d t a s k e n d m o d u l e 测试模块源代码 t i m e s c a l e 1 n s 1 0 0 p s d e f i n e c l k c y c l e 5 0 m o d u l e w r i t i n g T o p r e g r e s e t c l k r e g 7 0 d a t a a d d r e s s w i r e a c k s d a a l w a y s c l k c y c l e c l k c l k i n i t i a l b e g i n c l k 0 r e s e t 1 d a t a 0 a d d r e s s 0 2 c l k c y c l e r e s e t 0 2 c l k c y c l e r e s e t 1 1 0 0 c l k c y c l e s t o p e n d a l w a y s p o s e d g e a c k 接收到应答信号后 给出下一个处理对象 b e g i n d a t a d a t a 1 a d d r e s s a d d r e s s 1 e n d w r i t i n g w r i t i n g r e s e t r e s e t c l k c l k d a t a d a t a a d d r e s s a d d r e s s a c k a c k s d a s d a e n d m o d u l e 仿真波形 第十章 设计练习进阶 2 8 7 练习 仿照上例 编写一个实现 E P R O M 内数据串行读取的模块 编写测试模块 给出仿真波 形 练习十 通过模块之间的调用实现自顶向下的设计 目的 学习状态机的嵌套使用实现层次化 结构化设计 现代硬件系统的设计过程与软件系统的开发相似 设计一个大规模的集成电路的往往由 模块多层次的引用和组合构成 层次化 结构化的设计过程 能使复杂的系统容易控制和调 试 在 V e r i l o g H D L 中 上层模块引用下层模块与 C 语言中程序调用有些类似 被引用的子 模块在综合时作为其父模块的一部分被综合 形成相应的电路结构 在进行模块实例引用时 必须注意的是模块之间对应的端口 即子模块的端口与父模块的内部信号必须明确无误地一 一对应 否则容易产生意想不到的后果 下面给出的例子是设计中遇到的一个实例 其功能是将并行数据转化为串行数据送交外 部电路编码 并将解码后得到的串行数据转化为并行数据交由 C P U 处理 显而易见 这实际 上是两个独立的逻辑功能 分别设计为独立的模块 然后再合并为一个模块显得目的明确 层次清晰 p t o s v m o d u l e p t o s D i n T 0 d a t a S E N D E S C A D D 1 0 0 o u t p u t D i n T 0 D i n 是串行输出 T 0 是移位时钟并给 C P U 中断 以确定何时给出下个数据 i n p u t 7 0 d a t a 并行输入的数据 i n p u t S E N D E S C A D D 1 0 0 S E N D E S C 共同决定是否进行并到串 的数据转化 A D D 1 0 0 决定何时置数 w i r e D i n T 0 r e g 7 0 D A T A Q D A T A Q b u f a s s i g n T 0 S E N D 形成移位时钟 a s s i g n D i n D A T A Q 7 给出串行数据 a l w a y s p o s e d g e T 0 o r n e g e d g e A D D 1 0 0 A D D 1 0 0 下沿置数 T 0 上沿移位 b e g i n 第十章 设计练习进阶 2 8 8 i f A D D 1 0 0 D A T A Q d a t a e l s e b e g i n D A T A Q b u f D A T A Q 1 D A T A Q b u f 作为中介 以令综合器 D A T A Q D A T A Q b u f 能辨明 e n d e n d e n d m o d u l e 在 p t o s v中 由于移位运算虽然可综合 但是不是简单的 R T L级描述 直接用 D A T A Q D A T A Q 1 的写法在综合时会令综合器产生误解 另外 在该设计中 由于时钟 T 0 的频率较低 所以没有象以往那样采用低电平置数 而是采用 A D D 1 0 0 的下降沿置数 s t o p v m o d u l e s t o p T 1 d a t a D o u t D S C T A K E A D D 1 0 1 o u t p u t T 1 给 C P U 中断 以确定 C P U何时取转化 得到的并行数据 o u t p u t 7 0 d a t a i n p u t D o u t D S C T A K E A D D 1 0 1 D o u t 提供输入串行数据 D S C T A K E 共同决定何时取数 w i r e 7 0 d a t a w i r e T 1 c l k 2 r e g 7 0 d a t a l a t c h d a t a l a t c h b u f a s s i g n c l k 2 D S C 提供移位时钟 a s s i g n T 1 c l k 2 a s s i g n d a t a A D D 1 0 1 d a t a l a t c h 8 b z a l w a y s p o s e d g e c l k 2 b e g i n d a t a l a t c h b u f d a t a l a t c h 1 d a t a l a t c h b u f 作缓冲 d a t a l a t c h d a t a l a t c h b u f 以令综合器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 44736-2024野生动物保护繁育象
- 2024年度山西省高校教师资格证之高等教育法规自我提分评估(附答案)
- 2024年度年福建省高校教师资格证之高等教育学综合练习试卷B卷附答案
- 2024年碱锰电池项目投资申请报告代可行性研究报告
- 新条令.新亮点-内务条令解读
- 2024年度卫生间工程承建协议
- 基建类和生产类标准差异条款
- 2024宾馆租赁与管理协议
- 2024年产品销售与购买具体协议
- 人教部编版二年级语文上册第18课《刘胡兰》精美课件
- 期中模拟试卷(1-4单元)(试题)-2024-2025学年五年级上册数学人教版
- 人教版八年级上册生物期中考试试卷
- 中西医协同发展多学科诊疗制度
- 期中模拟练习(1-4单元)(试题)2024-2025学年二年级上册数学苏教版
- 2024年江苏省淮安市中考英语试题卷(含答案解析)
- 《医疗机构工作人员廉洁从业九项准则》制定主题学习课件
- 《大学美育》 课件 22.模块五 第二十二章 光影交织的摄影艺术之美
- 2024-2030年月子中心行业市场发展分析及发展趋势与投资前景研究报告
- 2024-2025一年级上册科学教科版1.5 《植物的变化》课件
- 2024语文新教材培训讲座:初中语文教材修订的变与不变
- 2024年学年八年级语文上册 第6课《我的家》教案 新疆教育版
评论
0/150
提交评论