




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Spring 2010,可综合VerilogHDL设计,Slide 1,基于FPGA的嵌入式系统设计电工电子工程基础,loy.,Spring 2010,可综合VerilogHDL设计,Slide 2,3 可综合VerilogHDL设计,3.1 FPGA中逻辑设计的一些概念和原则 3.2 组合逻辑的建模 3.3 时序逻辑的建模 3.4 存储器的建模与使用 3.5 有限状态机的建模 3.6 课堂操作实验,Spring 2010,可综合VerilogHDL设计,Slide 3,3.1 FPGA中逻辑设计的一些概念和原则,3.1.1 一些基本概念 3.1.2 同步设计 3.1.3 串并操作 3.1.4
2、 流水线 3.1.5 异步时钟域处理,Spring 2010,可综合VerilogHDL设计,Slide 4,3.1.1 一些基本概念,3.1.1.1 面积和速度,面积:是指一个设计所消耗FPGA,可理解为一个设计在FPGA中占用的“面积”。主要由LE衡量,还包括RAM和DSP块等。 速度:是指一个设计在FPGA芯片上能稳定运行的最高频率。 “面积”和“速度”是一对对立统一的矛盾体。可以用更多的逻辑资源实现更快速的处理,也可以牺牲速度用较少的逻辑资源“面积”和“速度”互换。科学的设计目标是:在满足设计时序要求的前提下,占用最小的芯片面积;或者在所规定的面积下,使设计的时序余量更大,频率更高。,
3、Spring 2010,可综合VerilogHDL设计,Slide 5,3.1.1 一些基本概念,3.1.1.1 Verilog描述的逻辑的并行性,Verilog很多语法规则和C语言相似,但两者有本质区别! 在编写Verilog代码时,要始终记住:“我在描述一个硬件电路的连接,而不是顺序执行的代码。”,对于一个硬件电路,在Verilog描述中各部分语句的“执行”是并发的。 一个HDL代码的优劣的最终评价标准是其描述实现的硬件电路的性能(包括面积和速度两个方面),而不能只是片面地追求代码的简洁。 在编写Verilog代码前,应先对系统要实现的硬件电路的连接在大体上和关键点上有一个明确地规划。硬件
4、描述语言是描述硬件的,要实现对硬件实现“胸有成竹”,才能描述得好。,Spring 2010,可综合VerilogHDL设计,Slide 6,3.1.1 一些基本概念,3.1.1.1 合理分配模块,在设计一个较大的系统时,往往需要将系统分为多个模块。模块的划分是需要合理考虑的。 按实际功能划分模块。 划分出来的模块的端口意义尽量简明。 一个模块自成一体,调用模块者绝对不需要知道模块内部原理,绝对不需要干涉内部工作过程。 模块规模合理。,Spring 2010,可综合VerilogHDL设计,Slide 7,3.1.1 一些基本概念,3.1.1.1 合理利用资源,在设计一个电子系统时,要了解,什么
5、样的功能适合用LE实现,什么样的功能时候由DSP、CPU实现(包括FPGA内部的DSP、CPU)。实时性要求高、频率高、大量并行的功能模块适合使用传统的FPGA逻辑实现。 在FPGA内部设计时,要对的FPGA全局有宏观上的合理安排,比如时钟、模块组织结构、RAM的利用、面积和速度等问题。 善于利用片内RAM、乘法器。,Spring 2010,可综合VerilogHDL设计,Slide 8,3.1.2 同步设计,3.1.2.1 同步和异步设计,异步数字电路: 电路的核心逻辑用组合电路实现; 电路的主要信号并不依赖任何一个时钟性信号; 容易产生毛刺,出现竞争冒险; 不利于器件移植、不利于时序分析与
6、验证。 同步数字电路: 电路核心逻辑用各种触发器实现; 电路的主要信号都是由某个时钟沿驱动产生的; 可以很好地避免毛刺; 有利于器件移植和时序分析及验证。 可编程器件成本越来越低,综合效果越来越强,现代PLD设计首选同步时序设计方式!,Spring 2010,可综合VerilogHDL设计,Slide 9,3.1.2 同步设计,3.1.2.2 同步设计的原则,所有信号均由时钟驱动,并且在同一个设计内,最好只由同一个时钟驱动。 在同步设计中,一切逻辑均可简化为由下面的结构罗列而成,Spring 2010,可综合VerilogHDL设计,Slide 10,3.1.2 同步设计,3.1.2.3 建立
7、时间和保持时间,建立时间(TSU):在时钟有效沿之前数据必须保持稳定的最小时间 保持时间(TH):在时钟有效沿之后数据必须保持稳定的最小时间 建立时间和保持时间形成一个时间窗,在此窗之内,数据必须保持稳定。 同步设计的速度限制,根本上源于建立时间和保持时间的要求,Spring 2010,可综合VerilogHDL设计,Slide 11,3.1.2 同步设计,3.1.2.4 统一时钟和时钟使能!,在同一个设计中,尽量让所有的模块使用同一时钟,让所有的“always(xxxedge clk)”中的clk是同一个clk。 系统中不同部分的信号速率可能不一样,使用时钟使能控制处理速率。,例如:要让一个
8、模块以1/8时钟工作:,Spring 2010,可综合VerilogHDL设计,Slide 12,3.1.2 同步设计,3.1.2.4 统一时钟和数据使能!,数据流处理模块的端口建议,使用于一切对单个数据处理需要数个、甚至不确定数目的时钟周期的情况。,Clk:工作时钟 ARst:异步复位 DataIn:数据输入 DataEn:输入数据有效 DataOut:数据输出 DataValid:输出数据有效指示 每一级的DataValid接至后级的DataEn。 DataEn有效时,采入数据进行处理。 处理完数据输出的同时让DataValid有效,通知下级。,Spring 2010,可综合Verilog
9、HDL设计,Slide 13,3.1.3 串并操作,“串并操作”是面积速度互换原则的直接体现。 将串行转换为并行,一般旨在通过复制逻辑,提高整个设计的设计吞吐量,其本质是通过面积的消耗提高系统的工作速率。 将并行转换为串行,一般旨在节约资源,因为设计速度有足够的余量,通过提高串行通道的工作速率而节约了面积,其本质是通过速度的提高节约芯片面积。如串行加法器,乘法器,除法器等。,Spring 2010,可综合VerilogHDL设计,Slide 14,3.1.4 流水线,流水线处理是高速设计中的常用设计手段,是面积换取速度原则的又一具体体现。 时序逻辑处理数据流就是天然的流水线结构。 流水线的结构
10、示例:,Spring 2010,可综合VerilogHDL设计,Slide 15,3.1.4 流水线,流水线示例:Y=|A|*100-100,Spring 2010,可综合VerilogHDL设计,Slide 16,3.1.5 异步时钟域处理,如果连续两个数据处理模块需要使用不同的时钟,前级的数据由一个时钟驱动输出,而后级的输入却有另一个时钟采入。这时出现时钟异步。 异步域数据同步也是FPGA设计的一个较常见问题,处理不好往往会影响系统稳定。 异步时钟域同步的表现形式: 同频异相问题,两个时钟域频率相同,但相差不固定。 异频问题,两个时钟域的频率不同。,Spring 2010,可综合Veril
11、ogHDL设计,Slide 17,3.1.5 异步时钟域处理,一般同步方法: 两级寄存器采样,即用后级时钟对前级数据采样两次。这种做法可以有效地减少亚稳态的传播,使后级电平都是有效电平值,但不一定是正确电平值。该方法适用于对错误不敏感的同频异相时钟域数据的同步。 使用FIFO,可以可靠解决异步时钟域数据的同步问题,注意数据满和空:前级时钟大于后级时钟,注意写满;前级时钟小于后级时钟,注意读空。,Spring 2010,可综合VerilogHDL设计,Slide 18,3.1.5 异步时钟域处理,特殊情况转换低频时钟为时钟使能: 如果低频时钟频率远低于高频时钟,建议用高频时钟将低频时钟同步为单周
12、期使能信号。 典型例子: 用外部处理器(或用NIOS PIO)与FPGA逻辑交互。外部处理器送来的时钟可能很慢。,Spring 2010,可综合VerilogHDL设计,Slide 19,3.2 组合逻辑的建模,3.2.1 方法一数据流建模 参数化的奇偶校验器 3.2.2 方法二行为建模 BCD7段译码器 3.2.3 方法三结构建模 双向信号接口,Spring 2010,可综合VerilogHDL设计,Slide 20,3.2.1 组合逻辑的数据流建模,参数化的奇偶校验器的建模 module ParityGenerator(DataIn,OddPar,EvenPar); parameter N
13、BITS=4; input NBITS-1:0 DataIn; output OddPar,EvenPar; assign EvenPar=DataIn; assign OddPar=EvenPar; endmodule,Spring 2010,可综合VerilogHDL设计,Slide 21,3.2.2 组合逻辑的行为建模,BCD7段译码器的建模 module bcd2led(a,b,c,d,e,f,g,D3,D2,D1,D0); output a,b,c,d,e,f,g; input D3,D2,D1,D0; reg a,b,c,d,e,f,g; always(D3 or D2 or D1
14、 or D0) begin case(D3,D2,D1,D0) 4d0: a,b,c,d,e,f,g=7b1111110; 4d1: a,b,c,d,e,f,g=7b0110000; 4d2: a,b,c,d,e,f,g=7b1101101; 4d3: a,b,c,d,e,f,g=7b1111001; 4d4: a,b,c,d,e,f,g=7b0110011; 4d5: a,b,c,d,e,f,g=7b1011011; 4d6: a,b,c,d,e,f,g=7b1011111; 4d7: a,b,c,d,e,f,g=7b1110000; 4d8: a,b,c,d,e,f,g=7b1111111
15、; 4d9: a,b,c,d,e,f,g=7b1111011; default: a,b,c,d,e,f,g=7b0000000; endcase end endmodule,Spring 2010,可综合VerilogHDL设计,Slide 22,3.2.3 组合逻辑的结构建模,双向信号接口的建模 module EE_SSTL(O,I,IO,E,BI); output O; input I,E,BI; inout IO; wire q1; bufif1 g1(IO,I,E); bufif1 g2(q1,IO,BI); buf g3(O,q1); endmodule,Spring 2010,可
16、综合VerilogHDL设计,Slide 23,3.3 时序逻辑的建模,3.3.1 触发器建模 异步清零或置位 同步清零或置位 3.3.2 锁存器建模 异步清零或置位 3.3.3 计数器建模 二进制计数器 模N计数器 格雷码计数器 3.3.4 移位寄存器建模 3.3.5 一些设计的注意事项,Spring 2010,可综合VerilogHDL设计,Slide 24,3.3.1 触发器建模,3.3.1.1 异步置位清零D触发器 module AsyncPreClrDFF(clk,clear,preset,data,q); input clk,clear,data,preset; output q;
17、 reg q; always(posedge clk or posedge clear or posedge preset) if(preset) q=1b1; else if(clear) q=1b0; else q=data; endmodule,Spring 2010,可综合VerilogHDL设计,Slide 25,3.3.1 触发器建模,3.3.1.2 同步置位清零D触发器 module SyncPreClrDFF(clk,clear,preset,data,q); input clk,clear,data,preset; output q; reg q; always(negedg
18、e clk) if(preset) q=1b1; else if(clear) q=1b0; else q=data; endmodule,Spring 2010,可综合VerilogHDL设计,Slide 26,3.3.2 锁存器建模,3.3.2.1 异步置位清零锁存器 module AsyncPreClrLatch(clk,clear,preset,data,q); input clk,clear,data,preset; output q; reg q; always(clk or clear or preset or data) if(preset) q=1b1; else if(cl
19、ear) q=1b0; else if(clk) q=data; endmodule,Spring 2010,可综合VerilogHDL设计,Slide 27,3.3.3 计数器建模,3.3.3.1 二进制计数器 module BinaryCounter(Ck,UpDown,PresetClear,LoadData,DataIn,Q,QN); parameter NBITS=2; input Ck,UpDown,PresetClear,LoadData; input NBITS-1:0 DataIn; output NBITS-1:0 Q,QN; reg NBITS-1:0 Counter;
20、always(posedge Ck) if(PresetClear) Counter=0; else if(LoadData) Counter=DataIn; else if(UpDown) Counter=Counter+1; else Counter=Counter-1; assign Q=Counter; assign QN=Counter; endmodule,Spring 2010,可综合VerilogHDL设计,Slide 28,3.3.3 计数器建模,3.3.3.2 模N计数器 module ModuloN_Cntr(Clock,Clear,Q,QBAR); parameter
21、NBITS=2,UPTO=3; input Clock,Clear; output NBITS-1:0 Q,QBAR; reg NBITS-1:0 Counter; always(posedge Clock) if(Clear) Counter=0; else Counter=(Counter+1)%UPTO; assign Q=Counter; assign QBAR=Counter; endmodule,Spring 2010,可综合VerilogHDL设计,Slide 29,3.3.3 计数器建模,3.3.3.3 格雷码计数器 转换规则:格雷码最高位与二进制码最高位相同;格雷码的次高位是
22、其二进制码的最高位和次高位异或的结果;依次类推,直到最低位。 module GrayCounter(ClockG,Clear,Q,QN); parameter NBITS=2; input ClockG,Clear; output 1:NBITS Q,QN; reg 1:NBITS Counter,GrayCount; integer K; always(posedge ClockG) if(Clear) Counter=0; else Counter=Counter+1; always(Counter) begin GrayCount1=Counter1; for(K=2;K=NBITS;K
23、=K+1) GrayCountK=CounterK-1CounterK; end assign Q=GrayCount; assign QN=GrayCount; endmodule,Spring 2010,可综合VerilogHDL设计,Slide 30,3.3.4 移位寄存器建模,3.3.3.4 3位通用移位寄存器的综合模型 具备功能:保持、左移、右移、载入。 module UnivShiftRegister(Clock,Clear,LeftIn,RightIn,S0,S1,ParIn,Q); input Clock,Clear,LeftIn,RightIn,S0,S1; input 2:
24、0 ParIn; output 2:0 Q; reg 2:0 Q; always(negedge Clear or posedge Clock) if(!Clear) Q=3b000; else case(S0,S1) 2b00: ; 2b01: Q=Q1:0,RightIn; 2b10: Q=LeftIn,Q2:1; 2b11: Q=ParIn; endcase endmodule,Spring 2010,可综合VerilogHDL设计,Slide 31,3.3.5 一些设计的注意事项,3.3.5.1 避免组合逻辑反馈环路 组合逻辑反馈环路( Combinational Loops)是 PL
25、D设计的大忌!它最容易因振荡、毛刺、时序违规等引起整个系统的不稳定和不可靠。 处理方法: 牢记任何反馈环路必须包含寄存器。 检查综合、实现报告的Warning信息,发现Combinational Loops后进行相应修改。,Spring 2010,可综合VerilogHDL设计,Slide 32,3.3.5 一些设计的注意事项,3.3.5.2 替换延迟链 延迟链是异步时序设计的常用手段,特别是在早期PLD设计和当代ASIC设计中,经常使用Delay Chains实现两个结点间的延迟调整。当代PLD设计推荐使用同步实现设计方法,一般要避免使用异步的Delay Chains。 在同步时序设计中,取
26、代异步Delay Chains的最常用方法是用分频或倍频的时钟或者同步计数器完成所需延迟。,Spring 2010,可综合VerilogHDL设计,Slide 33,3.3.5 一些设计的注意事项,3.3.5.3 替换异步脉冲产生单元:,在异步设计中,常用Delay Chains完成脉冲产生:,常用的同步脉冲产生方法:,Spring 2010,可综合VerilogHDL设计,Slide 34,3.3.5 一些设计的注意事项,3.3.5.4 慎用锁存器 同步逻辑设计要避免使用Latch。 综合出与设计意图不吻合的Latch结构的主要原因有: 在设计组合逻辑时,使用不完全的条件判断语句,如if没有
27、else,或不完整的case语句; 设计中存在组合逻辑的反馈环路。 防止产生非目的性Latch的方法: 使用完备的ifelse语句; 检查设计中是否含有组合逻辑反馈环路; 为每个输入条件设计输出操作,对case语句设置默认操作; 使用case语句时,特别是在设计状态机时,尽量附加综合约束属性,综合为完全条件case语句(full case)。,Spring 2010,可综合VerilogHDL设计,Slide 35,3.3.5 一些设计的注意事项,3.3.5.5 同步时序电路推荐的时钟设计方法 时钟经全局时钟输入引脚输入,通过FPGA内部专用PLL进行分频/倍频(一般可实现小数分频倍频)、移相
28、等调整与运算,然后经FPGA内部全局时钟布线资源(一般为全铜工艺)驱动到达芯片内所有寄存器和其它模块的时钟输入端。,Spring 2010,可综合VerilogHDL设计,Slide 36,3.3.5 一些设计的注意事项,3.3.5.6 内部逻辑产生的时钟 如果需要使用内部逻辑产生时钟,必须要在组合逻辑产生的时钟后插入寄存器。,Spring 2010,可综合VerilogHDL设计,Slide 37,3.3.5 一些设计的注意事项,3.3.5.7 门控时钟的使用问题 门控时钟即Gated Clock,是IC设计的一种常用减少功耗的手段。但是Gated Clock不是同步时序电路,其门控逻辑会污
29、染Clock的质量。 门控时钟改进电路:,Spring 2010,可综合VerilogHDL设计,Slide 38,3.4 存储器的建模与使用,最好把存储器建模成一个元件。通常,综合工具不能有效地设计出存储器。一般采用更传统的技术来建立存储器。一旦建立了存储器模块,就可以在综合模型中使用模块实例化语句来实例化该模块。 层次设计方法和图文混合设计的概念 实例:查找表乘法器,Spring 2010,可综合VerilogHDL设计,Slide 39,3.4.1 存储器的使用步骤,Spring 2010,可综合VerilogHDL设计,Slide 40,3.4.1 存储器的使用步骤,Spring 20
30、10,可综合VerilogHDL设计,Slide 41,3.4.1 存储器的使用步骤,Spring 2010,可综合VerilogHDL设计,Slide 42,3.4.1 存储器的使用步骤,Spring 2010,可综合VerilogHDL设计,Slide 43,3.4.1 存储器的使用步骤,Spring 2010,可综合VerilogHDL设计,Slide 44,3.4.1 存储器的使用步骤,Spring 2010,可综合VerilogHDL设计,Slide 45,3.4.1 存储器的使用步骤,Spring 2010,可综合VerilogHDL设计,Slide 46,3.4.2 图形输入,S
31、pring 2010,可综合VerilogHDL设计,Slide 47,3.4.3 建立存储器初始化文件,Spring 2010,可综合VerilogHDL设计,Slide 48,3.4.4 设定存储器初始化数据,Spring 2010,可综合VerilogHDL设计,Slide 49,3.4.5 仿真结果,Spring 2010,可综合VerilogHDL设计,Slide 50,3.5 有限状态机的建模,3.5.1 有限状态机的概念 3.5.2 有限状态机的设计步骤 3.5.3 有限状态机的状态编码 3.5.4 有限状态机的设计方法 3.5.5 有限状态机的建模实例序列检测器,Spring
32、2010,可综合VerilogHDL设计,Slide 51,3.5.1 有限状态机的概念,Spring 2010,可综合VerilogHDL设计,Slide 52,3.5.2 有限状态机的设计步骤,1、逻辑抽象,得出状态转换图 2、状态化简 3、状态分配 4、选定触发器类型,求出状态方程,驱动方程,输出方程 5、按照方程得出逻辑图 用Verilog语言描述,大部分工作都由计算机自动完成,Spring 2010,可综合VerilogHDL设计,Slide 53,3.5.3 有限状态机的状态编码,二进制编码或格雷码 独热码 CPLD格雷码 FPGA独热码,Spring 2010,可综合Verilo
33、gHDL设计,Slide 54,3.5.4 有限状态机的设计方法,三段式状态机的设计方法 状态转移块(时序) 状态驱动块(组合) 状态输出块(组合),Spring 2010,可综合VerilogHDL设计,Slide 55,3.5.5 序列检测器,检测到序列110,输出1,否则0 状态转换图: (S0:输入一个0;S1:收到一个1;S2:连续收到两个1;S3:连续收到110),Spring 2010,可综合VerilogHDL设计,Slide 56,3.5.5 序列检测器,状态转移块 parameter 3:0 s0=4b0001,s1=4b0010,s2=4b0100,s3=4b1000;
34、/独热码 reg 3:0 current_state,next_state; always (posedge clk) /状态转移块 begin if(!nclr) current_state=s0; else current_state=next_state; end,Spring 2010,可综合VerilogHDL设计,Slide 57,3.5.5 序列检测器,状态驱动块 always (current_state or data) / 状态驱动块 begin case(current_state) s0: next_state=(data=1)?s1:s0); s1: next_state=(data=1)?s2:s0); s2: next_state=(data=1)?s2:s3); s3: next_st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 植树节节约纸张活动方案
- 沃尔沃售后活动方案
- 河南农村阅读活动方案
- 比武比赛活动方案
- 求婚政策活动方案
- 检察院思想体检活动方案
- 校长走访教师活动方案
- 武汉妇联联谊活动方案
- 汽车修理店活动方案
- 母婴洗澡活动方案
- 2024-2025学年第一学期部编版语文八年级教学计划(含教学进度表)
- 2024-2030年中国割草机行业发展前景预测及投资战略研究报告
- 育苗室管理-细菌与真菌的防治方法(植物组织培养技术课件)
- 伟大的《红楼梦》智慧树知到期末考试答案章节答案2024年北京大学
- jsp花溪食堂美食点评系统springmvc论文
- 期末测试卷(试题)-2023-2024学年苏教版五年级数学下册
- 压力容器相关标准
- (正式版)SHT 3045-2024 石油化工管式炉热效率设计计算方法
- 《养老护理员》-课件:协助卧床老年人使用便器排便
- 滚动轴承常见故障及其原因分析
- 绿色建筑保险产品
评论
0/150
提交评论