1、。 u循环 只有for-loop语句是可以综合的。 44 verilog语句结构到门级的映射(5 ) u 设计时序电路时,建议变量在always语句中赋值,而在该 always语句外使用,使综合时能准确地匹配。建议不要使用局 部变量。 u 不能在多个always块中对同一个变量赎值 u 函数 函数代表一个组合逻辑,所有内部定义的变量都是临时的,这些 变量综合后为wire。 u 任务 任务可能是组合逻辑或者时序逻辑,取决于何种情况下调用任务 。 u Z Z会综合成一个三态门,必须在条件语句中赋值 u 参数化设计 优点:参数可重载,不需要多次定义模块 45 模块优化(1) u资源共享 当进程涉及到
2、共用ALU时,要考虑资源分配问题。 可以共享的操作符主要有:关系操作符、加减乘除 操作符。通常乘和加不共用ALU,乘除通常在其内 部共用。 u共用表达式 如:C=A+B; D=G+(A+B); 两者虽然有共用的,但是有些综合工具不能 识别。可以将第二句改为:D=G+C;这样只需两个 加法器。 46 模块优化(2) u转移代码 如循环语句中没有发生变化的语句移出循环 u避免latch 两种方法:1、在每一个IF分支中对变量赋值。 2、在每一个IF语句中都对变量赋初值。 u模块 综合生成的存储器如ROM或RAM不是一种好方 法。最好用库自带的存储器模块。 47 验证 u敏感表 在always语句中
3、,如果敏感表不含时钟,最好 将所有的被读取的信号都放在敏感表中。 u异步复位 建议不要在异步时对变量读取,即异步复位时 ,对信号赎以常数值。 48 学习Verilog入门阶段 1.建立项目 2.Verilog nand/nor/and/or assignment always 3.选设device 4.Settings 加减文件 设置top module文件 设置classic timing时序仿真主时钟fMAX(可以不设) 5.编译(直接选按钮) 6.仿真(直接选按钮) 创建.vwf波形文件 添加netlist节点 设置激励波形 设置仿真波形文件 阅读并判断仿真结果的正确性 49 学习Ver
4、ilog初级阶段(1) 1.setting 选择并使用functional / timing仿真 选择时序分析方法:Classic timing / TimeQuest 阅读在线帮助,选择其他设置 阅读编译报表,理解Tsu、 Tpd、Th、Tco 设置各种独立时钟 2.pin assignment 各输入输出引脚的location分配 接入但未用引脚的特别处理 多电平的选设(若有多为io的供电) 3.阅读并理解项目文件夹下各种扩展名文件的基本功能 *.v、*.qpf、*.pin、*.vwf、*.qof 浏览*.qsf,完全理解各部分的意义 掌握*.sof文件的生成方法,了解其它各种生成文件的使
5、用场合 50 学习Verilog初级阶段(2) 4.仿真 生成功能仿真网表 ctrl + 滚轮缩放 或 ctrl+shift+space 缩放 ctrl + alt + space 全屏切换 处理仿真中inout端口的时钟冲突warning 5.Verilog 充分理解reg与output的相关性和区别 掌握dff的直接引用方法 充分了解可综合语句与不可综合语句的区别及其不同使用场合 阅读coding_and_synthesis_with_verilog.pdf inout端口的写法 instantiate参数带点引用方法 function,task的使用,其与module引用的区别 优化程序
6、,设法消除时序仿真中的毛刺 6.programmer Jtag驱动与设置 Programmer内check项选择 熔丝/加密的使用方法与保护程度 51 学习Verilog中级阶段(1) 1.Verilog 熟练dff,dffe的使用技巧;消除latch使用恐惧症 理解并熟练掌握同步、异步复位的写法 阅读芯片datasheet中的关于时序的波形图和列表 for 循环体跳出方法,for语句的宜使用原则 了解异步电路的读写触发特点和时序要求 充分领悟“端口只有线型” 2.Settings 设置派生时钟(倍频等) 充分理解setting下所有设置栏目及其选项的意义与可预见结果 3.Simulation
7、 设置并生成正确无误的时序仿真图 4.选择Classic timing (fast model) 菜单进行时序分析 52 学习Verilog中级阶段(2) 5.点击TimeQuest按钮进行时序分析,生成*.sdc文件 直接修改*.sdc原文件,精确定义当输入触发被看作时钟时的时 钟频率 消除各种与时钟相关的warning 6. 在assignment edit中增加Tsu,Th等时序约束条件 观察再编译后报表的区别 理解multicyle clock及其他各选项的意义 7.设法消除一切不甚理解的warning,消除一切可能被消除的毛刺 8.硬件验证(LED,示波器) 功能仿真必须正确无误 引
8、脚位置分配复验正确 杂脚处理停当 VccIO分配处理正确 53 学习Verilog高级阶段 1.使用Megawizard,引入除法模块并成功进行时序仿真 16位被除数numer,8位除数denum,8位商quotient,8位 余数remain,时序仿真正确性论证 锁相环电路的理解、数字锁相环实现方法及lpm_pll引用 IP core的调用,明确生成方法 2.使用Floorplan & Chip editor 观察各引脚的fan-in,fan-out, 熟练进行信号追踪, 手动进行部分逻辑单元的优化调整 注意虽然在floorplan界面拖拉有效,但还是建议到 assignmeng edit中
9、输入/确信 54 Verilog学习小结 1.Verilog是描述,而不是运行代码。代码综合以后是逻辑网表,而不是指令,所以需要注意 我们写的代码是否正确描述了需要实现的逻辑电路。 2.除了逻辑功能,还要把描述中的时序给看出来,一开始的时候,可以根据代码尝试着把波 形画出来,尽管仿真软件也能做到这个,还是建议自己画以加强对语言的理解,可以用仿 真软件来验证你画的波形。 3.注意区分哪些是可综合的,哪些是不可综合的代码,这个对出学Verilog的人会比较困惑, 因为C只要语法正确,可以编译就能运行,而Verilog一些代码只能在仿真环境中用,不能综 合成实际的电路。 4.要多关注描述代码综合后的
10、电路,不能象C语言那样写好了就行,Verilog写好代码只能算做 了一半工作,还要做仿真,如果时序不满足还可能调整程序代码。 5.多写多试,这个方法对学习任何事物都一样,如果有环境,即使没有老师指导照样可以试 出来。 6.多看代码,特别是原厂提供的代码,这些代码应该代表了比较高的FPGA设计水平,从中我 们可以学习两个方面的知识:一是相对比较大规模的逻辑设计如何组织模块结构,二是局 部应用处理,可以照搬,作为我们开发时的模板。熟读唐诗三百首,不会作诗也会吟,看 多了,就会习惯的学会他们的开发模式,我有这样的体会,看多了,很多东西思想上已经 把它当作是自己的理所当然的东西了,实际一做,手生的很,
11、遇到很多问题,解决这些问 题,这个过程就通过了,学习就需要这么个过程。 7.Modelsim仿真环境的使用。学习HDL需要有一个编译、验证环境,首推的就是Modelsim, Modelsim在各家FPGA厂商的开发工具中都提供内置或外挂,这种共性的工具自然是越多越 好。 55 项目规划 下面以JPEG图像 编码作为项目, 进行简单的项目 规划分析。 56 电路功能设计 1.方案论证 反复论证此方案行得通。 2.系统设计 系统设计根据任务要求,即JPEG图像的编码,把系统分成为三个 基本单元,一是DCT变换单元,二是量化单元,三是编码单元。 如下图所示: 然后再把每个基本单元划分为下一层次的基本
12、单元,一直这样做 下去,直到可以直接使用EDA元件库为止。 3.FPGA芯片选择 根据系统的指标和复杂度,对工作速度和芯片本身的各种资源、 成本等方面进行权衡,选择合理的设计方案和合适的器件类型。 57 设计输入 1. 任务划分: DCT模块设计; 量化模块设计; 熵编码模块设计; 系统层面的总体设计。 2. 模块与模块之间,定义接口,即确定输入输出分 别是什么。 3. 三个模块分别用硬件描述语言Verilog HDL实现,并 仿真调试通过。 4. 系统设计,确定原始图像数据输入和压缩图像数 据输出,并添加存储单元的驱动。 5. 把模块结合成一个整体。 58 功能仿真 1. 设计波形文件和测试
13、向量。 2. 进行仿真,验证功能。 3. 如果发现错误,则返回设计修改逻辑设计 ,直到功能正确无误。 59 综合 1. 综合优化是指将设计输入编译成由与门、 或门、非门、RAM、触发器等基本逻辑单 元组成的逻辑连接网表,而并非真实的门 级电路。 2. 为了能转换成标准的门级结构网表,HDL 程序的编写必须符合特定综合器所要求的 风格。由于门级结构、RTL级的HDL程序的 综合是很成熟的技术,所有的综合器都可 以支持到这一级别的综合。 60 综合后仿真 综合后仿真检查综合结果是否和原设计一 致。 61 实现与布局布线 1. 实现是将综合生成的逻辑网表配置到具体的 FPGA芯片上,布局布线是其中最重要的过程 。 2. 布局将逻辑网表中的硬件原语和底层单元合 理地配置到芯片内部的固有硬件结构上,并 且往往需要在速度最优和面积最优