版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1 FPGA逻辑设计逻辑设计 2 n逻辑设计是一种并行的思想,不同于软件设计; n同一时刻,有多个语句块同时执行; n逻辑设计者要明白写的代码将会综合成什么电路; n逻辑设计分时序设计与算法设计两部分; Action 3 主要内容主要内容 设计命名设计命名 主要内容 设计技巧设计技巧 4 信号与变量信号与变量 n信号的缩写 模块设计过程中,为了避免各信号命名冗余过长,对 信号采取简写方式命名; 示例: reset_n简写为rst_n; clock_20m简写为clk_20m; write_enable 简写为wr_en; 常用的信号简写如表: 5 常用信号缩写常用信号缩写 信号名缩写信号名缩写
2、信号名缩写 resetrstwritewremptyept clockclkreadrdalmostal enableencontrolctrlfrequencyfre datadataddressadrreceiverrx transmittertxmemorymemcomparecompa parallelparaserialserierrorerr countercntdelaydyinitialinit registerregbufferbufcurrentcurr switchswrequestreqacknowack temptmpcheckchksystemsys clearcl
3、rreadyrdyloadld 6 系统级信号系统级信号 n系统级信号 系统级信号指复位信号,置位信号,时钟信号等 需要输送到各个模块的全局信号;系统信号以前 缀“sys_”开头。 示例: sys_rst/系统复位信号 sys_clk/系统时钟 sys_set/系统置位信号 7 n低电平信号 是指低电平有效的信号,加后缀“_n”; 示例: rst_n/代表低电平复位有效; en_n/代表低电平使能有效; n锁存器锁存信号 组合逻辑信号经过锁存器锁存后的信号,加后缀 “_r”,与锁存前的信号相区分。 示例: wr_en 经锁存后,命名为:wr_en_r; 8 n多拍信号 为了考虑数据对齐或者同步
4、,需要对信号进行多级锁存延时, 经多级锁存的信号可加后缀dx(x = 0,1,2,3)。 示例: mii_rx_en延时三拍的信号,分别命名为: mii_rx_en_d0、mii_rx_en_d1、mii_rx_en_d2; n时钟信号 为了体现时钟的频率、相位,对时钟信号除了加前缀clk外, 还要加表标示时钟频率及时钟相位的后缀; 示例: 相位为90度的125MHz时钟,命名为clk_125m_90; 对相位为0度的时钟,可不加相位指示; 9 n跨时钟域的同步信号 当一个信号在一个时钟域生成,进入另一时钟域 时,需要对该信号进行同步,同步的信号可加syn 前缀;必要时加同步前的时钟做为后缀,
5、以表示 该信号来自哪个时钟域; 示例: read_ip由50MHz的时钟生成,进入100MHz时钟 域时,经同步后,命名为syn_read_ip;或者命名 为syn_read_ip_50m; 10 模块说明格式模块说明格式 n模块说明格式 为了便于后期的维护,对每个模块需要进行详细的说明;可采用如下格式 : /*- - ZTE NetView -*/ /*- - Project : ETNMS - Module: frame_top.v - Description : the top module of Framer - Created Date: 2009-05-25 - Author :
6、CamelKing() - Department: Power else if(ld_en) data_out = data_in; else data_out = data_out + 1b1; end 12 n空格的使用(一) 不同变量,以及变量与符号、变量与括号之间都应当保留 一个空格; 例如:x = ( a = b ) ? 1b1 : 1b0 ; Verilog关键字与其它任何字符串之间都应当保留一个空格; 例如:always ( * ) 使用大括号和小括号时,前括号的后边和后括号的前边应 当留有一个空格。逻辑运算符、算术运算符、比较运算符等 运算符的两侧各留一个空格,与变量分隔开来;
7、单操作数运 算符例外,直接位于操作数前,不使用空格。 assign SramAddrBus = AddrBus31:24, AddrBus7:0 ; assign DivCntr3:0 = DivCntr3:0 + 4b0001; assign Result = Operand; 13 n语句块的缩进 不同层次之间的语句使用Tab键进行缩进,每加深 一层缩进一个Tab(建议一个Tab四个字符); n语句块的注释 在endmodule,endtask,endcase等标记一个代 码块结束的关键词后面要加上一行注释说明这个 代码块的名称; n大小写 对所有的信号名、变量名和端口名都用小写,这 样做
8、是为了和业界的习惯保持一致;对常量名和 用户定义的类型用大写; 14 n模块例化 在例化模块时,最好采用名字相关的显式映射而不要采用位 置相关的隐式映射,提高代码的可读性和方便debug连线错 误; 示例: mux4 uut ( .a(a), .b(b), .c(c), .d(d), .sel(sel), .y(y) ); 15 TB文件命名文件命名 n测试向量文件 为了与模块文件区分,测试文件要加后缀tb; 比如: e1_framer的测试文件可命名为:e1_framer_tb; 16 n逻辑设计命名 n逻辑设计技巧逻辑设计技巧 17 逻辑设计技巧逻辑设计技巧 n阻塞与非阻塞赋值 区别 非阻
9、塞赋值(=)语句右端表达式计算完后并不立即赋值给 左端,而是同时启动下一条语句继续执行。可以理解为所有 的右端表达式RHS1、RHS2等在进程开始时同时计算,计 算完后,等进程结束时同时分别赋给左端变量LHS1、LHS2 等。 阻塞赋值(=)语句在每个右端表达式计算完后立即赋给左 端变量,即赋值语句LHS1=RHS1执行完后LHS1是立即更新 的,同时只有LHS1=RHS1执行 完后才可执行语句 LHS2=RHS2,依次类推。前一条语句的执行结果直接影响 到后面语句的执行结果。 18 n阻塞与非阻塞赋值 使用建议 1,时序逻辑建模时,使用“非阻塞赋值”; 2,为锁存器(latch)建模,使用“
10、非阻塞赋值”; 3,用always块为组合逻辑建模,使用“阻塞赋值”; 4,当在同一个always块里面既为组合逻辑又为时序 逻辑建模,使用“非阻塞赋值”;建议不要有这样的语句 5,不要在同一个always块混合使用“阻塞赋值”和“非阻塞赋 值”,编译时通不过; 6,不要在两个或两个以上always块里面对同一个变量进行赋值, 编译时通不过; 19 n信号延时 信号的延时,强烈建议不要采用门电路延时来实 现,不同工艺,不同厂家的器件门延时不一样; 建议采用计数器或者移位寄存器来实现; (Altera:LCELL) n避免子模块内部三态/内部双向IO 避免在子模块内部使用三态电路,否则会增加其
11、功耗,要把三态信号及使能信号引到顶层做三态 门处理; n避免子模块内部双向IO 避免子模块内部采用双向IO,最好把把双向IO分 开为输入,输出口处理比较好; 20 nIf与case语句 1,if语句 if.else if . else 语句是有优先级的,第一个if的优先级最高, 最后一个else的优先级最低。 2,case语句 case语句是“平行”的结构,所有的case的条件和执行都没 有“优先级”。但casex、casez例处; 3,建议 a,能用case语句的地方最好采用case语句;避免消耗更多 的逻辑资源; b,if语句中,一定要有else语句,否则在组合逻辑设计中容 易综合成锁存器
12、(latch); c,case语句中,一定要有default项,否则组合设计中,容 易综合成锁存器; 21 n信号敏感表 在verilog_97版本中,always ()的敏感表一 定要完善,否则逻辑综合后,达不到预期的效果; 但在verilog_2001版本中,此问题可不予考虑,因 为采用always ( * )描述方式,软件会自动增加 敏感信号; 因此建议采用verilog_2001版本描述逻辑; 22 n状态编码码型实例 状态机的一般设计原则,binary, gray-code 编码 使用最少的触发器,较多的组合逻辑。而one-hot 编码反之。 CPLD多使用gray-code;FPG
13、A多使用one_hot编 码。 小型设计使用gray和binary编码更有效,而大型状 态机使用ONE-HOT更有效; 在实际应用中,没有必要一定把某些状态编码强 行综合为one-hot方式,软件会根据状态数量自动 综合为最佳方式; 23 n基本逻辑块 xilinx的最小逻辑单元是slice,一个slice包含2个 FF和2个LUT;4个slice组成一个CLB; altera的最小逻辑单元是LE,一个LE包含1个FF和 1个LUT;16个LE组成一个LAB; 24 n时钟的使用时钟分布 1,为时钟信号选用全局时钟缓冲器(BUFG),不选 用全局时钟缓冲器的时钟将会引入偏差; 2,只用一个时钟
14、沿来寄存数据;使用时钟的两个 沿不可靠,因为时钟的某沿或者两个沿会”偏 移”。如果只使用时钟的一个沿,就会降低时钟 边沿偏移的风险。 可以使用CLKDLL 自动纠正时钟的占空比以达到 50%的占空比.否则,强烈建议只使用一个时钟沿; 25 n时钟如何上全局时钟网? FPGA器件中有专门的快速时钟走线,叫全局时钟网;上了 全局时钟网的时钟可称为全局时钟,在全局网上传输的时钟 抖动(jitter)与偏斜(skew)最小; altera器件 1,由FPGA时钟引脚引入的外部时钟,会自动上全局时钟网; 2,FPGA内部时钟或者其它时钟,可通过PLL/DPLL上全局时 钟网;或者通过global原语约束
15、上全局时钟网; 3,global原语 global instance_name (.in(),.out(); 4, 或者通过assignments editor中添加全局时钟约束; 26 n时钟如何上全局时钟网? XILINX 1,从FPGA时钟引脚引入的时钟,可通过设置上全 局时钟网; 2,也可以通过BUFG、IBUFG、BUFGDS、DCM 上全局时钟;草图 27 n门控时钟 (gate clock) 在FPGA内部,内部产生的时钟叫门控时钟;在高速数据设 计中,门控时钟不能做为DFF/FF的时钟输入;因为门控时 钟的jitter与skew都比较大,会造成数据误采样; 实际应用中,可以把门
16、控时钟做为时钟使能的方式引入 DFF/FF的使能脚,并采用源时钟做为DFF/FF的输入时钟; 草图 n行波时钟 (ripple clock) 由一个触发器的输出做为下一个触发器的时钟输入;数字电 路课程中学过的异步计数器就是行波时钟的方式; 行波时钟的偏斜最大,每经过一级FF,抖动与偏斜越大,实 际中最好不采用; 28 n信号初始化 为考虑代码的可移植性,可维护性,尽量不要使 用信号的默认值(或初始值),要用复位来初始 化信号。 当然,altera的某些器件本身支持上电初始化值, 具体可用initial定义; 但xilinx不支持;这就是完全OK的代码完全移植到 不同芯片时,工作不稳定的原因;
17、 29 n驱动能力 有些厂家的器件驱动能力有限,过多的负载可能 导致逻辑工作不正常; a,FPGA虽然提供内部上下拉机制,但电阻值有 限(几十欧姆到几千欧姆) ;采用内部上拉时,引 脚驱动能力可能有限;建议使用外部上下拉。 b,内部信号的驱动能力,不同厂家各不同,在逻 辑设计中,采用冗余方式编写代码。比如altera的 一些低端器件可能存在此问题;xilinx不存在此问 题,软件综合时,如果超过一定的扇出数,会进 行逻辑复制,增加信号的驱动能力;草图 30 n同步复位,异步复位 同步复位 同步复位就是指复位信号只有在时钟上升沿到来时,才能有 效。否则,无法完成对系统的复位工作。 always
18、(posedge clk) begin if(rst) y = 0; else y = d; end 31 n同步复位,异步复位 异步复位 指无论时钟沿是否到来,只要复位信号有效,就对系 统进行复位。 always (posedge clk or posedge rst) begin if(rst) y = 0; else y = d; end 32 n同步复位优缺点 优 可以使所设计的系统成为100%的同步时序电路,这便大大 有利于时序分析,而且综合出来的fmax一般较高。 因只有在时钟有效电平到来时才有效,可达到滤除毛刺的 目的。 缺 复位信号的有效时长必须大于一个或多个时钟周期,才能 真
19、正被系统识别并完成复位任务。布局布线时还要考虑诸 如:clk skew,组合逻辑路径延时,复位延时等因素。否则 更可能出现复位异外;讲述下PLL/DCM的同步复位不好 之处 一般FPGA器件结构中DFF都只有异步复位端口。所以,如 果采用同步复位,综合器会在DFF的复位端口前插入组合 逻辑,这样会耗费更多逻辑资源。 33 n异步复位优缺点 优 大多FPGA器件中DFF都有异步复位端口,因此 采用异步复位可以节省逻辑资源; 异步复位信号识别方便,可以很方便使用FPGA 的全局复位端口GSR; 缺 在复位信号释放(release)的时候容易出现问题。 倘若复位释放时恰恰在时钟有效沿附近,就很容 易
20、使寄存器输出出现亚稳态; 复位信号容易受到毛刺影响; 34 n异步复位,同步释放 因异步复位容易受毛刺影响,采用“异步复位,同步释放”的方式,可以 避免此问题; 给出实例 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; end 35 n毛刺(glitc
21、h) 由于FPGA内部存在线延时,门延时等因素,同时受电压, 温度等的影响;信号的高低电平转换需要一定的过渡时间; 因此在信号变化的瞬间,组合逻辑的输出会有先后顺序, 出现规则不一的脉冲,这种脉冲称“毛刺”。 毛刺的影响 如果将带有“毛刺”的信号引入触发器的清零端、置位端, 可能因“毛刺”导致触发器误跳转,影响整个逻辑的正常工 作; 如何消除 1,“毛刺”电平很窄,当不满足DFF的建议保持时间时, 可通过DFF来实现对毛刺的消除; 2,计数器采用gray码计数,gray码每次只变化一位; 在实际的逻辑中,特别是高速设计中,对于任何组合逻辑产 生的控制信号(使能、清零、单脉冲等),建议后面加一级
22、 DFF来消除“毛刺”; 36 n“竞争”与“冒险” 关于竞争冒险,有多种不同的定义,但大致的理解如下: 竞争由于FPGA内部的各种不同的延时,导致信号到达 门输入口的先后时间不同; 冒险由竞争引起门输出错误的瞬间叫冒险;主要表现为 门输出有异常的脉冲出现,这种脉冲叫毛刺; 静态冒险与动态冒险 静态冒险输入信号变化前后,输出的稳态值是一样的, 但在输入信号变化时,输出信号产生毛刺的现象; 若输出的稳态值为0,出现了正的尖脉冲毛刺,称为静态0险 象。若输出稳态值为1,出现了负的尖脉冲毛刺,则称为静 态1冒险。 动态冒险输入信号变化前后,输出的稳态值不同,并在 边沿处出现了毛刺的现象; 37 n“
23、亚稳态” FPGA中的触发器FF,数据信号的过渡都要满足 建立与保持时钟,如果在不满足建立与保持时间 情况下,对数据进行采样,就会导致采样失误, 采样结果意外,这种现象叫亚稳态。 经过不同的时钟域的信号,由于时钟频率相位的 不同,很容易出现“亚稳态”; n建立与保持时间草图 时钟沿到来前,数据必须保持的时间叫建立时间 (setup time); 时钟沿过后,数据必须保持的时间叫保持时间 (hold time); 38 n跨时钟域 信号处理草图 在越来越复杂的大型FPGA逻辑设计中,时钟不再 是单一的时钟,而是有多个时钟并存, 多个时钟可能频率不同,初始相位也不同;不同 的时钟所驱动的不同逻辑块
24、,可称做时钟域。 跨时钟域信号的影响 当一个信号从一个时钟穿越到另一个时钟域是, 由于时钟频率/相位的不同,会造成建立保持时间 的不足,由此造成采样时“亚稳态”出现,电路 不能正常工作; 39 n如果处理跨时钟域的信号或数据? 1,对于慢时钟到快时钟的跨时钟域的信号,我们可以采用两个 或者多个DFF级联的方式来实现单一信号的同步;描述 2,但对于快时钟到慢时钟的信号,由于快时钟产生的信号可能 会引起慢时钟的采样失效,造成数据漏掉;因此要把快时 钟的信号要扩展,以达到慢时钟的采样周期; 实现应用中,有两种方式可实现快时钟到慢时钟信号的过 渡: a,扩展快时钟域的信号宽度,满足慢时钟的采样要求,确
25、 保采样时钟能正确采样; b,采样结绳法(应用高速设计中); 3,对于跨时钟域的大流量数据,可以采用DPRAM/ asyn FIFO来实现有效的时钟隔离及数据通讯;细讲一下 40 n逻辑复制(logic replicate) 考虑到逻辑门的扇出最大能力,在某些时候,需 要对逻辑功能块通行复制,以此来提高对后级电 路的驱动能力,使电路工作更可靠;草图 在实际应用中,如果有使能到逻辑复制逻辑复制,可以采 取两种方式避免逻辑复制部分被优化掉: 1,对需要保留逻辑复制的信号或模块,采用HDL 约束方式; (* preserve *) ; (* preserve *) module (.); 2,关闭r
26、eplicate逻辑优化选项; 41 n逻辑重定时(logic retiming) 时序设计中,FF与FF之间的组合逻辑,可能因大 小不同,造成FF级联之间的延时分配不同;为使 组合逻辑延时平衡,可采用retiming的技术来实现; 草图 实现应用中,不用人为的去考虑此项,一般可通 过软件设置来要不要retiming技术; xilinx的ISE 软件中retiming分前向retiming与后面 retiming; 42 n模块输入输出寄存 复杂的逻辑设计中,常对每个功能模块的输入输出 都用FF打一拍,可以防止模块与模块之间的路径成 为关键路径(critical path),方便优化;在层次打
27、平或 者保留时,模块与模块之间的路径就是FF与FF之间 路径,接口信号可保留下来,方便调试; FFFF D D Q Q M1M2 43 nfull case/paralle case 1, full case是指编码下的各种可能的条件项 (包括default)都有对应的输出,没有任何遗漏 项; 2, paralle case是指编码下的各种可能的条件 项与输出项是一一对应关系,不存在多个条件项 对应一个输出的情况;如果出现此情况,代码很 可能会被综合成具有优先级的电路; 可通过软件设置使用full case/paralle case;也可以 在HDL语言中加(* parallel_case *) 、(*full case*) 来约束; 44 n状态机 类型 a,Moore Machine状态输出只与当前的状态有关,与 输入无关; b,Mealy Machine状态输出不仅与当前的状态有关,而 且与输入有关; 在实际应用中,Mealy状态机用得比较多; 一段式状态机 一段式状态机把所有状态跳转、状态输入、状态输出都放在 一个always
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版土地买卖居间合同签订与履行指导3篇
- 2025年度桶装纯净水销售数据分析与应用合同
- 二零二五年度医院布草用品消毒服务及质量监控合同3篇
- 二零二五年度商业场地租赁合同转让与租赁合同续签协议2篇
- 二手房交易协议(2024版)
- 2025版事业单位聘用合同正规范本(含岗位调整)3篇
- 2025立医院医用控温仪设备采购与安装服务合同2篇
- 2025年度绿植种子研发与种植合同3篇
- 二零二五年度农用货车运输保险代理服务合同
- 二零二五年度土地承包经营权租赁与农村电商服务合同
- 山东省青岛市2023-2024学年七年级上学期期末考试数学试题(含答案)
- 墓地销售计划及方案设计书
- 从偏差行为到卓越一生3.0版
- 优佳学案七年级上册历史
- 铝箔行业海外分析
- 纪委办案安全培训课件
- 超市连锁行业招商策划
- 医药高等数学智慧树知到课后章节答案2023年下浙江中医药大学
- 城市道路智慧路灯项目 投标方案(技术标)
- 【公司利润质量研究国内外文献综述3400字】
- 工行全国地区码
评论
0/150
提交评论