[工学]VHDL设计方法.ppt_第1页
[工学]VHDL设计方法.ppt_第2页
[工学]VHDL设计方法.ppt_第3页
[工学]VHDL设计方法.ppt_第4页
[工学]VHDL设计方法.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

VHDL设计中的一些问题 一、 VHDL源代码的综合 n功能相同但是编写不同的代码会产生不 同的综合效果; n不可能依赖软件工具去综合一个编写很 差的源代码; n如果能很好理解所作设计的硬件结构, 则会使设计有一个良好的开端。 三个重要的方面 1. 考虑硬件结构 n编写能够描述硬件拓扑结构的代码; n不要编写仿真模型; 2. 考虑同步逻辑 n同步逻辑在综合、测试、仿真和布线中 都比较方便; n异步逻辑需要人为操作及一些扩充的仿 真功能才能进行验证。(将异步逻辑划 分成独立的块单元来编译。) ? 3. 考虑RTL级描述 n用RTL级的描述意味着描述: 寄存器的结构; 电路结构; 寄存器之间的功能。 n由编译器优化寄存器之间的逻辑,但不优化 寄存器的布局。 IF语句的综合 nIF-ELSE语句隐含了一个多路选择器的硬件结 构。 n例: IF (Aflag = 1) THEN OutData = A + B; ELSE OutDate = C + D; END IF; 多路选择器的位置取决于IF-ELSE语句的结构 IF (Aflag = 1) THEN Op1 = A; Op2 = B; ELSE Op1 = C; Op2 = D; END IF; OutData = Op1+Op2; 若IF语句不带ELSE,可以表示锁存 nVHDL语言的定义要求信号在没有被赋予新 值前保持原来的值。 n锁存功能在硬件上实现了以上要求。 例:LS373: PROCESS (ALE, ADBUS) BEGIN IF (ALE =1) THEN ABUS = ADBUS; END IF; END PROCESS LS373; 一个二输入与门的设计 由于没有ELSE,综合时会被默认为其他情 况时:c = c; PROCESS (a, b) BEGIN IF (a =1 and b =1) THEN c = 1; END IF; END PROCESS; IF-THEN-ELSIF语句 nIF-THEN-ELSIF语句隐含了优先级的关系, 因此在电路设计中如果有优先级的要求才使 用该语句; n如果在没有优先级设计要求的情况下使用该 语句,那么综合后的逻辑电路会比较复杂, 速度较慢; n例:中断优先级控制器,int0优先级最高 中断优先级控制器的实现 IF (int0 = 1) THEN active(0) = 1; ELSIF (int1 = 1) THEN active(1) = 1; ELSIF (int2 = 1) THEN active(2) = 1; ELSE active(3) = 1; END IF; FOR-LOOP语句的综合 nFOR-LOOP语句首先进行“翻译”,然后再进 行综合。 PROCESS (a, b) BEGIN FOR i IN 0 to 3 LOOP out(i) = a(i) AND b(3-i); END LOOP; END PROCESS; out(0) = a(0) AND b(3); out(1) = a(1) AND b(2); out(2) = a(2) AND b(1); out(3) = a(3) AND b(0); 实现奇偶校验的例子 PROCESS (data) VARIABLE sum: INTEGER; BEGIN sum := 0; FOR I IN 0 to 7 LOOP -数1的个数 sum := data(i) + sum; END LOOP; odd_parity = sum mod 2; -校验奇偶性 END PROCESS; 综合后 操作符对综合结果的影响 nVHDL编译器对表达式从左至右进行语 法分析; n圆括号可以改变编译的顺序; n例1: ADD = A + B + C + D ; (1) ADD = (A + B) + (C + D) ; (2) 综合后结果: ADD = A+B + C+D ; 综合后结果: ADD = (A+B) + (C+D) ; 例2: SUM = A*B + C*D + E + F + G; 综合后结果: 改变顺序或加括号来改变结构 nSUM = E + F + G + C*D + A*B; nSUM = (A*B) +( C*D) +( E + F) + G); 二、可综合代码的设计特点 1. 比较综合和仿真的结果 nVHDL语言是一种硬件描述和仿真语言 ; n一些仿真结构在综合器中不被支持; 2. 避免使用 nWAIT FOR xx ns 语句; nAFTER xx ns 语句; n信号和变量的赋初值语句; 3. 使用CASE和IF_ELSE语句 nIF_ELSE描述一个优先级编码的逻辑; nCASE语句描述一种对称平衡的行为; n仿真结果一致; n综合出来的设计速度会有不同。 4. 遵循一定的编代码规则 n选择使用大小写字母的规则; n文件名与实体名匹配; n给程序添加标号、注释; n使用代码缩进、空行、空格等; n建议使用std_logic类型; 5. 例子 n设计实现一个2-4译码器 bcd (1) bcd(0)Led(3) led(2) led(1) led(0) 0 00 0 0 1 0 1 0 0 1 0 1 00 1 0 0 1 1 1 0 0 0 方法一: 结构描述法 n基于元件例化和GENERATE语句; n建立层次结构; n可用简单的逻辑门和复杂的元件来描述 系统; n互连通过端口实现。 n调用两个元件: 与门ANDGate (调用4 次) 非门Inverter (调用2次) 方法二: 数据流描述 n采用并发代入语句实现; n通过输入信号值的改变来激活代入语 句。 n采用并发代入语句; 方法三:行为描述法 n描述的是电路的功能,而不是电路的结 构; n采用PROCESS和CASE语句; 三、FPGA中的一些设计方法 n竞争和冒险现象 n清除和置位信号 n触发器和锁存器 n同步设计 n延时电路的产生 n多时钟系统 1. 竞争和冒险 n信号在FPGA中传送会有不一样延迟; n当多个输入信号同时发生变化时,其 组合逻辑就可能发生“毛刺”; n毛刺会向下一级传送; n毛刺会影响电路的稳定性。 “毛刺”的例子 解决毛刺问题的方法 n改变设计:比如采用格雷码计数器代替 普通的二进制计数器,因为格雷码计数 器的输出每次只有一位跳变; n采用同步电路:毛刺在时钟的上升沿不 能形成有效的操作; n采用对毛刺不敏感的D触发器输出信号 ; 2. 清除和置位信号 n清除和置位信号对毛刺很敏感; n有时可以使用同步置位的方法来代替异 步清零。 3. 触发器和锁存器 n触发器在时钟沿锁存数据; n锁存器是用电平来锁存数据; n建议尽量使用触发器。 锁存器 4. 同步设计 n异步设计不是总能满足建立和保持时间 的要求; n异步设计常常会将错误的数据锁存到触 发器中; n导致触发器出现亚稳态,不能识别1或0 ; n尽量采用同步设计,以全局时钟为基准 。 FPGA中的时钟树 FPGA中的时钟树 n全局时钟为布局布线的延时参数提取、 分析提供了基准; n如果不使用时钟树的时钟,则延时数据 将不准确; n设计中应注意以全局时钟为参考。 分频器的例子(不规范) 分频器的例子(正确) clk Shift_reg 5. 延时电路的产生 n有时候需要对信号进行延时处理来适应 外接端口的时序关系

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论