FPGA逻辑设计.ppt

上传人:1595****071 文档编号:71843367 上传时间:2023-02-06 格式:PPT 页数:50 大小:437.50KB
返回 下载 相关 举报
FPGA逻辑设计.ppt_第1页
第1页 / 共50页
FPGA逻辑设计.ppt_第2页
第2页 / 共50页
点击查看更多>>
资源描述

《FPGA逻辑设计.ppt》由会员分享,可在线阅读,更多相关《FPGA逻辑设计.ppt(50页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、FPGA逻辑设计逻辑设计 n逻辑设计是一种并行的思想,不同于软件设计;n同一时刻,有多个语句块同时执行;n逻辑设计者要明白写的代码将会综合成什么电路;n逻辑设计分时序设计与算法设计两部分;Action主要内容主要内容 设计命名设计命名主要内容设计技巧设计技巧信号与变量信号与变量n信号的缩写模块设计过程中,为了避免各信号命名冗余过长,对信号采取简写方式命名;示例:reset_n简写为rst_n;clock_20m简写为clk_20m;write_enable 简写为wr_en;常用的信号简写如表:常用信号缩写常用信号缩写信号名缩写信号名缩写信号名缩写resetrstwritewremptyept

2、clockclkreadrdalmostalenableencontrolctrlfrequencyfredatadataddressadrreceiverrxtransmittertxmemorymemcomparecompaparallelparaserialserierrorerrcountercntdelaydyinitialinitregisterregbufferbufcurrentcurrswitchswrequestreqacknowacktemptmpcheckchksystemsysclearclrreadyrdyloadld系统级信号系统级信号n系统级信号系统级信号指复位

3、信号,置位信号,时钟信号等需要输送到各个模块的全局信号;系统信号以前缀“sys_”开头。示例:sys_rst/系统复位信号 sys_clk/系统时钟 sys_set/系统置位信号n低电平信号 是指低电平有效的信号,加后缀“_n”;示例:rst_n/代表低电平复位有效;en_n/代表低电平使能有效;n锁存器锁存信号组合逻辑信号经过锁存器锁存后的信号,加后缀“_r”,与锁存前的信号相区分。示例:wr_en 经锁存后,命名为:wr_en_r;n多拍信号 为了考虑数据对齐或者同步,需要对信号进行多级锁存延时,经多级锁存的信号可加后缀dx(x=0,1,2,3)。示例:mii_rx_en延时三拍的信号,分

4、别命名为:mii_rx_en_d0、mii_rx_en_d1、mii_rx_en_d2;n时钟信号为了体现时钟的频率、相位,对时钟信号除了加前缀clk外,还要加表标示时钟频率及时钟相位的后缀;示例:相位为90度的125MHz时钟,命名为clk_125m_90;对相位为0度的时钟,可不加相位指示;n跨时钟域的同步信号 当一个信号在一个时钟域生成,进入另一时钟域时,需要对该信号进行同步,同步的信号可加syn前缀;必要时加同步前的时钟做为后缀,以表示该信号来自哪个时钟域;示例:read_ip由50MHz的时钟生成,进入100MHz时钟域时,经同步后,命名为syn_read_ip;或者命名为syn_r

5、ead_ip_50m;模块说明格式模块说明格式n模块说明格式为了便于后期的维护,对每个模块需要进行详细的说明;可采用如下格式:/*-ZTE NetView-*/*-Project:ETNMS-Module:frame_top.v-Description :the top module of Framer-Created Date:2009-05-25-Author:CamelKing()-Department:Power&Chain-Platform:Quartus II 9.1-Simulators:Modelsim 6.4a-Synthesizers:-*/*-Revisions:-Rev

6、ision Number:-Version:-Date:-Modifier:name -Description:-*/n语句块的对齐 同一个层次的所有语句左端对齐;Initial、always等语句块的beginend关键词起到承上启下的作用,可对always/initial 语句左端对齐;ifelse ifelse中的begin可跟在语句块后面,end新起一行;这样做的好处是避免因begin独占一行而造成行数太多;always(posedge sys_clk or negege sys_rst_n)beginif(!sys_rst_n)data_out=4b0000;else if(ld_e

7、n)data_out=data_in;elsedata_out=data_out+1b1;endn空格的使用(一)不同变量,以及变量与符号、变量与括号之间都应当保留一个空格;例如:x =(a=b)?1b1 :1b0;Verilog关键字与其它任何字符串之间都应当保留一个空格;例如:always (*)使用大括号和小括号时,前括号的后边和后括号的前边应当留有一个空格。逻辑运算符、算术运算符、比较运算符等运算符的两侧各留一个空格,与变量分隔开来;单操作数运算符例外,直接位于操作数前,不使用空格。assign SramAddrBus =AddrBus31:24,AddrBus7:0;assign D

8、ivCntr3:0 =DivCntr3:0 +4b0001;assign Result =Operand;n语句块的缩进 不同层次之间的语句使用Tab键进行缩进,每加深一层缩进一个Tab(建议一个Tab四个字符);n语句块的注释 在endmodule,endtask,endcase等标记一个代码块结束的关键词后面要加上一行注释说明这个代码块的名称;n大小写 对所有的信号名、变量名和端口名都用小写,这样做是为了和业界的习惯保持一致;对常量名和用户定义的类型用大写;n模块例化在例化模块时,最好采用名字相关的显式映射而不要采用位置相关的隐式映射,提高代码的可读性和方便debug连线错误;示例:mux

9、4 uut(.a(a),.b(b),.c(c),.d(d),.sel(sel),.y(y);TB文件命名文件命名n测试向量文件为了与模块文件区分,测试文件要加后缀tb;比如:e1_framer的测试文件可命名为:e1_framer_tb;n逻辑设计命名n逻辑设计技巧逻辑设计技巧逻辑设计技巧逻辑设计技巧n阻塞与非阻塞赋值 区别非阻塞赋值(=)语句右端表达式计算完后并不立即赋值给左端,而是同时启动下一条语句继续执行。可以理解为所有的右端表达式RHS1、RHS2等在进程开始时同时计算,计算完后,等进程结束时同时分别赋给左端变量LHS1、LHS2等。阻塞赋值(=)语句在每个右端表达式计算完后立即赋给左

10、端变量,即赋值语句LHS1=RHS1执行完后LHS1是立即更新的,同时只有LHS1=RHS1执行 完后才可执行语句LHS2=RHS2,依次类推。前一条语句的执行结果直接影响到后面语句的执行结果。n阻塞与非阻塞赋值 使用建议1,时序逻辑建模时,使用“非阻塞赋值”;2,为锁存器(latch)建模,使用“非阻塞赋值”;3,用always块为组合逻辑建模,使用“阻塞赋值”;4,当在同一个always块里面既为组合逻辑又为时序 逻辑建模,使用“非阻塞赋值”;建议不要有这样的语句5,不要在同一个always块混合使用“阻塞赋值”和“非阻塞赋值”,编译时通不过;6,不要在两个或两个以上always块里面对同

11、一个变量进行赋值,编译时通不过;n信号延时 信号的延时,强烈建议不要采用门电路延时来实现,不同工艺,不同厂家的器件门延时不一样;建议采用计数器或者移位寄存器来实现;(Altera:LCELL)n避免子模块内部三态/内部双向IO 避免在子模块内部使用三态电路,否则会增加其功耗,要把三态信号及使能信号引到顶层做三态门处理;n避免子模块内部双向IO避免子模块内部采用双向IO,最好把把双向IO分开为输入,输出口处理比较好;nIf与case语句1,if语句if.else if.else 语句是有优先级的,第一个if的优先级最高,最后一个else的优先级最低。2,case语句case语句是“平行”的结构,

12、所有的case的条件和执行都没有“优先级”。但casex、casez例处;3,建议a,能用case语句的地方最好采用case语句;避免消耗更多的逻辑资源;b,if语句中,一定要有else语句,否则在组合逻辑设计中容易综合成锁存器(latch);c,case语句中,一定要有default项,否则组合设计中,容易综合成锁存器;n信号敏感表在verilog_97版本中,always()的敏感表一定要完善,否则逻辑综合后,达不到预期的效果;但在verilog_2001版本中,此问题可不予考虑,因为采用always(*)描述方式,软件会自动增加敏感信号;因此建议采用verilog_2001版本描述逻辑;

13、n状态编码码型实例状态机的一般设计原则,binary,gray-code 编码使用最少的触发器,较多的组合逻辑。而one-hot编码反之。CPLD多使用gray-code;FPGA多使用one_hot编码。小型设计使用gray和binary编码更有效,而大型状态机使用ONE-HOT更有效;在实际应用中,没有必要一定把某些状态编码强行综合为one-hot方式,软件会根据状态数量自动综合为最佳方式;n基本逻辑块 xilinx的最小逻辑单元是slice,一个slice包含2个FF和2个LUT;4个slice组成一个CLB;altera的最小逻辑单元是LE,一个LE包含1个FF和1个LUT;16个LE

14、组成一个LAB;n时钟的使用时钟分布1,为时钟信号选用全局时钟缓冲器(BUFG),不选用全局时钟缓冲器的时钟将会引入偏差;2,只用一个时钟沿来寄存数据;使用时钟的两个沿不可靠,因为时钟的某沿或者两个沿会”偏移”。如果只使用时钟的一个沿,就会降低时钟边沿偏移的风险。可以使用CLKDLL 自动纠正时钟的占空比以达到50%的占空比.否则,强烈建议只使用一个时钟沿;n时钟如何上全局时钟网?FPGA器件中有专门的快速时钟走线,叫全局时钟网;上了全局时钟网的时钟可称为全局时钟,在全局网上传输的时钟抖动(jitter)与偏斜(skew)最小;altera器件1,由FPGA时钟引脚引入的外部时钟,会自动上全局

15、时钟网;2,FPGA内部时钟或者其它时钟,可通过PLL/DPLL上全局时钟网;或者通过global原语约束上全局时钟网;3,global原语global instance_name(.in(),.out();4,或者通过assignments editor中添加全局时钟约束;n时钟如何上全局时钟网?XILINX1,从FPGA时钟引脚引入的时钟,可通过设置上全局时钟网;2,也可以通过BUFG、IBUFG、BUFGDS、DCM上全局时钟;草图n门控时钟(gate clock)在FPGA内部,内部产生的时钟叫门控时钟;在高速数据设计中,门控时钟不能做为DFF/FF的时钟输入;因为门控时钟的jitte

16、r与skew都比较大,会造成数据误采样;实际应用中,可以把门控时钟做为时钟使能的方式引入DFF/FF的使能脚,并采用源时钟做为DFF/FF的输入时钟;草图n行波时钟(ripple clock)由一个触发器的输出做为下一个触发器的时钟输入;数字电路课程中学过的异步计数器就是行波时钟的方式;行波时钟的偏斜最大,每经过一级FF,抖动与偏斜越大,实际中最好不采用;n信号初始化 为考虑代码的可移植性,可维护性,尽量不要使用信号的默认值(或初始值),要用复位来初始化信号。当然,altera的某些器件本身支持上电初始化值,具体可用initial定义;但xilinx不支持;这就是完全OK的代码完全移植到不同芯

17、片时,工作不稳定的原因;n驱动能力 有些厂家的器件驱动能力有限,过多的负载可能导致逻辑工作不正常;a,FPGA虽然提供内部上下拉机制,但电阻值有限(几十欧姆到几千欧姆);采用内部上拉时,引脚驱动能力可能有限;建议使用外部上下拉。b,内部信号的驱动能力,不同厂家各不同,在逻辑设计中,采用冗余方式编写代码。比如altera的一些低端器件可能存在此问题;xilinx不存在此问题,软件综合时,如果超过一定的扇出数,会进行逻辑复制,增加信号的驱动能力;草图n同步复位,异步复位同步复位同步复位就是指复位信号只有在时钟上升沿到来时,才能有效。否则,无法完成对系统的复位工作。always(posedge cl

18、k)beginif(rst)y=0;elsey=d;endn同步复位,异步复位异步复位指无论时钟沿是否到来,只要复位信号有效,就对系统进行复位。always(posedge clk or posedge rst)beginif(rst)y=0;elsey=d;endn同步复位优缺点优可以使所设计的系统成为100%的同步时序电路,这便大大有利于时序分析,而且综合出来的fmax一般较高。因只有在时钟有效电平到来时才有效,可达到滤除毛刺的目的。缺复位信号的有效时长必须大于一个或多个时钟周期,才能真正被系统识别并完成复位任务。布局布线时还要考虑诸如:clk skew,组合逻辑路径延时,复位延时等因素。

19、否则更可能出现复位异外;讲述下PLL/DCM的同步复位不好之处一般FPGA器件结构中DFF都只有异步复位端口。所以,如果采用同步复位,综合器会在DFF的复位端口前插入组合逻辑,这样会耗费更多逻辑资源。n异步复位优缺点优大多FPGA器件中DFF都有异步复位端口,因此采用异步复位可以节省逻辑资源;异步复位信号识别方便,可以很方便使用FPGA的全局复位端口GSR;缺在复位信号释放(release)的时候容易出现问题。倘若复位释放时恰恰在时钟有效沿附近,就很容易使寄存器输出出现亚稳态;复位信号容易受到毛刺影响;n异步复位,同步释放 因异步复位容易受毛刺影响,采用“异步复位,同步释放”的方式,可以避免此

20、问题;给出实例module Reset_Synchronizer(output reg rst_n,input clk,input asyncrst_n);reg rff1;always (posedge clk,negedge asyncrst_n)begin if(!asyncrst_n)rst_n,rff1=2b0;else rst_n,rff1=rff1,1b1;endn毛刺(glitch)由于FPGA内部存在线延时,门延时等因素,同时受电压,温度等的影响;信号的高低电平转换需要一定的过渡时间;因此在信号变化的瞬间,组合逻辑的输出会有先后顺序,出现规则不一的脉冲,这种脉冲称“毛刺”。毛

21、刺的影响如果将带有“毛刺”的信号引入触发器的清零端、置位端,可能因“毛刺”导致触发器误跳转,影响整个逻辑的正常工作;如何消除1,“毛刺”电平很窄,当不满足DFF的建议保持时间时,可通过DFF来实现对毛刺的消除;2,计数器采用gray码计数,gray码每次只变化一位;在实际的逻辑中,特别是高速设计中,对于任何组合逻辑产生的控制信号(使能、清零、单脉冲等),建议后面加一级DFF来消除“毛刺”;n“竞争”与“冒险”关于竞争冒险,有多种不同的定义,但大致的理解如下:竞争由于FPGA内部的各种不同的延时,导致信号到达门输入口的先后时间不同;冒险由竞争引起门输出错误的瞬间叫冒险;主要表现为门输出有异常的脉

22、冲出现,这种脉冲叫毛刺;静态冒险与动态冒险静态冒险输入信号变化前后,输出的稳态值是一样的,但在输入信号变化时,输出信号产生毛刺的现象;若输出的稳态值为0,出现了正的尖脉冲毛刺,称为静态0险象。若输出稳态值为1,出现了负的尖脉冲毛刺,则称为静态1冒险。动态冒险输入信号变化前后,输出的稳态值不同,并在边沿处出现了毛刺的现象;n“亚稳态”FPGA中的触发器FF,数据信号的过渡都要满足建立与保持时钟,如果在不满足建立与保持时间情况下,对数据进行采样,就会导致采样失误,采样结果意外,这种现象叫亚稳态。经过不同的时钟域的信号,由于时钟频率相位的不同,很容易出现“亚稳态”;n建立与保持时间草图时钟沿到来前,

23、数据必须保持的时间叫建立时间(setup time);时钟沿过后,数据必须保持的时间叫保持时间(hold time);n跨时钟域 信号处理草图在越来越复杂的大型FPGA逻辑设计中,时钟不再是单一的时钟,而是有多个时钟并存,多个时钟可能频率不同,初始相位也不同;不同的时钟所驱动的不同逻辑块,可称做时钟域。跨时钟域信号的影响 当一个信号从一个时钟穿越到另一个时钟域是,由于时钟频率/相位的不同,会造成建立保持时间的不足,由此造成采样时“亚稳态”出现,电路不能正常工作;n如果处理跨时钟域的信号或数据?1,对于慢时钟到快时钟的跨时钟域的信号,我们可以采用两个或者多个DFF级联的方式来实现单一信号的同步;

24、描述2,但对于快时钟到慢时钟的信号,由于快时钟产生的信号可能会引起慢时钟的采样失效,造成数据漏掉;因此要把快时钟的信号要扩展,以达到慢时钟的采样周期;实现应用中,有两种方式可实现快时钟到慢时钟信号的过渡:a,扩展快时钟域的信号宽度,满足慢时钟的采样要求,确保采样时钟能正确采样;b,采样结绳法(应用高速设计中);3,对于跨时钟域的大流量数据,可以采用DPRAM/asyn FIFO来实现有效的时钟隔离及数据通讯;细讲一下n逻辑复制(logic replicate)考虑到逻辑门的扇出最大能力,在某些时候,需要对逻辑功能块通行复制,以此来提高对后级电路的驱动能力,使电路工作更可靠;草图在实际应用中,如

25、果有使能到逻辑复制逻辑复制,可以采取两种方式避免逻辑复制部分被优化掉:1,对需要保留逻辑复制的信号或模块,采用HDL约束方式;(*preserve*);(*preserve*)module(.);2,关闭replicate逻辑优化选项;n逻辑重定时(logic retiming)时序设计中,FF与FF之间的组合逻辑,可能因大小不同,造成FF级联之间的延时分配不同;为使组合逻辑延时平衡,可采用retiming的技术来实现;草图实现应用中,不用人为的去考虑此项,一般可通过软件设置来要不要retiming技术;xilinx的ISE 软件中retiming分前向retiming与后面retiming;

26、n模块输入输出寄存复杂的逻辑设计中,常对每个功能模块的输入输出都用FF打一拍,可以防止模块与模块之间的路径成为关键路径(critical path),方便优化;在层次打平或者保留时,模块与模块之间的路径就是FF与FF之间路径,接口信号可保留下来,方便调试;FFFFDDQQM1M2nfull case/paralle case 1,full case是指编码下的各种可能的条件项(包括default)都有对应的输出,没有任何遗漏项;2,paralle case是指编码下的各种可能的条件项与输出项是一一对应关系,不存在多个条件项对应一个输出的情况;如果出现此情况,代码很可能会被综合成具有优先级的电路

27、;可通过软件设置使用full case/paralle case;也可以在HDL语言中加(*parallel_case*)、(*full case*)来约束;n状态机类型a,Moore Machine状态输出只与当前的状态有关,与输入无关;b,Mealy Machine状态输出不仅与当前的状态有关,而且与输入有关;在实际应用中,Mealy状态机用得比较多;一段式状态机 一段式状态机把所有状态跳转、状态输入、状态输出都放在一个always语句块下;这样做可以节省代码空间,并且状态机输出信号都会经DFF打一拍后输出;但一段式状态机难以阅读与维护,因状态跳转、输出逻辑集中在一个always 语句块,

28、综合优化的不太好;提供范例n状态机二段式状态机二段式状态机把时序部分(当前态/次态)与跳转、输出,用两个always块来分开;其中一个always块专注于时序逻辑,另一个always块专注组合逻辑;这样做可以达到好的综合效果,状态机也便于维护;但状态输出因组合逻辑产生,可能存在毛刺,需要额外再打一拍;范例三段式状态机三段式状态机把当前态/次态、状态跳转、状态机输出,用三个always块来实现,这样可以状态机输出有较好的时序性;范例n逻辑设计模板的参考altera与xilinx的开发软件中都有提供相关的设计模板,模板包括原语(primite),语法结构,约束综合等基本常识的东西;值得大家去学习;

29、n避免组合逻辑反馈回路 草图尽量避免,或者组合逻辑后的信号通过一FF再反馈;组合逻辑FFDQFPGA四种设计思想四种设计思想n乒乓操作简单的理解就是数据流以乒乓的方式写入缓冲区,对端同样以乒乓的方式从缓冲区读取数据;n串并转换复用/解复用高速的串行数据流,可以通过串并转换,转换成多路低速的并行数据流来输出;1,比如16M数据可能分解成8个2M的数据来传输;2,多个并行流通过高速的串行流来传输(serdes)n流水线设计流水线的实质可以理解为把一个信号用个时钟拍来输出;常用于高速设计中;n数据同步化 数据传输时,以一定的帧格式,并用一定的同步字来实现数据同步;最典型的是E1传输;n时分与空分的思想多方会议/VAD算法n速度与面积的平衡1,时分复用2,资源共享 3,并行设计 4,串并转换5,括号使用x=sel?(a+b):(c+d);x_tmp1=sel?a:b;x_tmp2=sel?c:d;x=sel?x_tmp1:x_tmp2;+面积大面积小n一些仲裁策略略逻辑设计讲解完

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com