基于Xilinx芯片Verilog进阶设计

上传人:ra****d 文档编号:243079928 上传时间:2024-09-15 格式:PPT 页数:64 大小:917.50KB
返回 下载 相关 举报
基于Xilinx芯片Verilog进阶设计_第1页
第1页 / 共64页
基于Xilinx芯片Verilog进阶设计_第2页
第2页 / 共64页
基于Xilinx芯片Verilog进阶设计_第3页
第3页 / 共64页
点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,嵌入式系统工程系,第四章 基于Xilinx芯片Verilog进阶设计,面向硬件电路的设计方法,代码风格与可综合设计,通用代码风格,专用代码风格,企业代码风格,企业级大规模FPGA应用设计方法,原语的使用,面向硬件电路的设计方法,将具体功能形成硬件的RTL级模型,编写代码始终要考虑硬件如何实现,基于FPGA实现的Verilog设计特点,并行化,同步控制,实现代价,面向硬件电路的设计方法,硬件实现的并行化,从电路上来看:,只要芯片上电,所有逻辑就开始工作。,从代码上来看:,所有的描述语句之间是并行执行的;,always语句在边沿触发条件下的行为描述均采用非阻塞赋值,并行执行;,面向RTL级电路的电路设计易于实现流水操作;,与一般高级语言的顺序代码为主的设计方法有本质的区别。,面向硬件电路的设计方法,时序延迟信号,reg,a, a_d1, a_d2;,always, (,posedge,clk,or,negedge,rst),begin,if,(rst),begin,a_d1 = #TP 0;,a_d2 = #TP 0;,end,else,begin,a_d1 = #TP a;,a_d2 = #TP a_d1;,end,end,面向硬件电路的设计方法,基于全局时钟的同步设计,数据存储在FPGA的存放器或存储器中,时钟可看作执行控制器;,串行算法的执行可以按照时钟节拍的顺序进行控制,存放器输出以及组合逻辑通常作为控制条件。,例如:采用计数器控制状态变化或数据处理过程。,面向硬件电路的设计方法,实现代价,“面积和“速度的综合考虑:,“面积指所占用的FPGA资源FF和LUT;,“速度指芯片稳定运行所到达的最高频率。,“面积和“速度是一对矛盾,可相互转化:,“面积优先:资源复用;,“速度优先:冗余同构部件。,ISE 的Map选项:,优化策略可选择Area和Speed的优化策略,代码风格与可综合设计,Verilog HDL语言本身的标准只面向仿真,不使用综合工具不支持的Verilog结构,除了wire、reg的多数数据类型,开关级原语,deassign、wait等行为语句,UDP和specify模块,遵循可综合设计原那么,代码综合出预想的逻辑,行为描述的完整性,代码风格与可综合设计,同步电路设计,优点,容易使用存放器的异步复位/置位端,以使整个电路有一个确定的初始状态;,有效防止毛刺,提高可靠性;,简化时序分析过程;,减少对工作环境的依赖性,提高可移植性;,原那么,尽可能使用单时钟全局时钟,尽可能使用单时钟沿触发posedge clk,防止使用门控时钟组合逻辑驱动的时钟,假设使用分频时钟应当统一管理,代码风格与可综合设计,同步电路设计,代码风格与可综合设计,同步电路设计的模块划分,信息隐蔽、抽象:,防止跨模块控制,边界清晰;,端口明确:,禁制多重功能和无用接口;,时钟域区分:,异步FIFO或双端口RAM实现多时钟域隔离;,低频时钟域尽可能划分到一个模块中;,资源优化:,尽量使用厂商提供的原语,存放器划分:,模块的输出尽可能采用存放器输出reg型,代码风格与可综合设计,代码风格包括书写标准和描述方法,通用代码风格,Verilog HDL语言标准,硬件无关,性能未必最优;,专用代码风格,基于具体芯片的结构和资源,性能优化,移植性可能受影响。,“华为Verilog HDL设计标准,Sun公司 “Verilog Style and Coding Guidelines,“Actel HDL Coding Style Guider,注重代码的硬件实现质量。,目标:功能正确,性能最优,通用代码风格,逻辑复用,Synplify提供逻辑复用选项,但假设要获得最正确的复用效果,在源代码设计中应采用显式的复用控制逻辑;,节约面积。,逻辑复制,Synplify提供最大扇出选项,如果扇出过大驱动过多后续逻辑,需增加缓冲器提高驱动能力,但信号延迟增大;,增加面积。,通用代码风格,逻辑结构,树状结构优于链式结构,缩短延迟级数。,if语句和case语句使用原那么,if语句面积小,延迟大;case语句面积大,速度快。,if适合对速度无特殊要求的场合;case适合高速编解码电路。,if分支具有优先级,case分支无优先级。,if不可嵌套技术过多,一般不超过3-4层。,兼顾面积和速度,if和case混合使用。,通用代码风格,关键路径信号处理,引起电路建立时间缺乏的信号路径成为关键路径,组合电路关键路径提取采用逻辑拆分方式,降低关键信号的组合延迟级数。,分析下面语句中b所经过的LUT级数。,assign y = a ,assign t = a ,assign y = b ,通用代码风格,if和case不完整分支造成的意外锁存器,当always语句使用电平触发时有可能产生锁存器。,参见P106例3-12和例3-13,当always语句使用时钟沿触发时不会产生,此时只产生存放器。,通用代码风格,reg型信号只能在一个always语句中赋值,最常见的HDL行为描述建模错误之一,防止assign不确定语句,assign signal_a = #4 signal_a;,#4被综合工具忽略掉,专用代码风格,时钟信号分配原那么,使用全局时钟,通过BUFG驱动,时钟信号到达各个存放器的延迟相同。,减少时钟信号种类,防止时钟毛刺信号不使用门控时钟,专用代码风格,SRL16的使用,SRL16是一种基于LUT的移位存放器;,可生成任意位宽和深度的移位存放器;,srl16_based_ram my_shift_ram,(,.clk ( ),.d ( ),.q ( ),);,专用代码风格,触发器资源分配,尽量使用库中的触发器资源;,状态机编码尽可能采用“独热码one-hot。,(synplify综合工具可提供相关功能),反向信号,尽量使用符号,而不使用not原语;,不要尝试用多个反向器级联来增加需要的信号延迟;,反向信号驱动多个负载可采用分散反向。,综合工具可自动优化,企业代码风格,1.根本书写规那么,用有意义而有效的名字;,用连贯的缩写;,Clk Rst,用最右边左边的字符下划线表示低电平有效,高电平有效的信号不得以下划线表示;,Rst_ Trdy_,名字一般首字符大写,其余小写但parameter, integer 定义的数值名可全部用大写,两个词之间要用下划线连接,Packet_addr Data_in,企业代码风格,1.根本书写规那么,全局信号名字中应包含信号来源的一些信息;,同一信号在不同层次应保持一致性;,自己定义的常数类型等用大写标识,parameter CYCLE = 100;,防止使用保存字作为信号、模块名称;,添加有意义的后缀使信号名更加明确。,企业代码风格,2.Module,顶层模块应只是内部模块间的互连,除了内部的互连和模块的调用外尽量防止再做逻辑如不能再出现对reg变量的always赋值,不能再用assign语句完成复杂逻辑;,每一个模块应在开始处注明文件名功能描述引用模块设计者设计时间及版权信息ISE生成模板;,不要对input进行驱动, 在module 内不要存在没有驱动的信号,更不能在模块端口中出现没有驱动的输出信号,防止在仿真或综合时产生warning,干扰错误定位;防止由于未驱动产生的x,z,企业代码风格,2.Module,每行应限制在80个字符以内以保持代码的清晰美观和层次感;,模块实例名应采用U_xx命名,端口采用显式关联而非隐式关联;,用一个时钟的上沿或下沿采样信号,不能混合使用;,如果一定要使用时钟双沿,可使用180度相位时钟;,在模块中增加注释;,Module 名要用大写标示,且应与文件名保持一致;,企业代码风格,2.Module,严格芯片级模块的划分,只有顶层包括IO引脚;,模块输出存放器化,对所有模块的输出加以存放,输出的驱动强度和输入的延迟可以预测,从而使得模块的综合过程更简单;,将关键路径逻辑和非关键路径逻辑放在不同模块,实施不同的优化策略。,企业代码风格,3.线网与存放器,一个reg变量只能在一个always语句中赋值;,向量有效位顺序的定义一般是从大数到小数;,模块输出端口,对线网和存放器类型的要做声明;,使用克综合的的线网和存放器类型。,企业代码风格,4.表达式,用括号来表示执行的优先级,使优先级阅读更清晰;,注意不要造成额外的延迟,用一个函数(function)来代替表达式的屡次重复,仿真中经常使用的一组描述可以写到一个任务(task)中;,企业代码风格,5. if语句,向量比较时比较的向量宽度要相等,不相等时建议采用显示扩展;,每一个if 都应有一个else 和它相对应;,应注意if .else if .else if .else 的优先级;,如果变量在if-else 或case 语句中做非完全赋值那么应给变量一个缺省值。,always语句的自身要求,企业代码风格,6. case语句,case语句通常综合成一级多路复用器,if-then-else那么综合成优先编码的串接的多个多路复用器;,所有的Case 应该有一个default case 允许空语句,Default : ;,企业代码风格,7.函数,在function的最后给function赋值;,函数中防止使用全局变量,否那么容易引起HDL行为级仿真和门级仿真的差异。,注意:函数与任务的调用均为静态调用,企业代码风格,8.赋值,Verilog 支持两种赋值:过程赋值(procedural) 和连续赋值(continuous) ,过程赋值用于过程代码(initial, always, task or function)中给reg和integer变量timerealtime、real赋值,而连续赋值一般给wire变量赋值;,reg型与wire型赋值问题,always (敏感表敏感表要完整如果不完整将会引起仿真和综合结果不一致;,电平触发的意外锁存器问题,企业代码风格,8.赋值,force/release 仅用于debug,对存放器和线网均有用;,防止使用Disable,assign/deassign 仅用于仿真加速仅对存放器有用;,可综合设计问题,对任何reg赋值用非阻塞赋值代替阻塞赋值, reg 的非阻塞赋值要加单位延迟,但异步复位可加可不加。,reg赋值问题,仿真赋值延迟问题,企业代码风格,9.组合逻辑与时序逻辑,如果一个事件持续几个时钟周期设计时就用时序逻辑代替组合逻辑;,内部总线不要悬空,在default状态要把它上拉或下拉。,企业代码风格,10.宏与参数,为了保持代码的可读性常用 define做常数声明;,把define放在一个独立的文件中;,参数parameter 必须在一个模块中定义,不要传替参数到模块;,如果希望宏的作用域仅在一个模块中就用参数来代替。,企业代码风格,11.注释,对更新的内容更新要做注释;,在语法块的结尾做标记;,每一个模块都应在模块开始处做模块级的注释;,在模块端口列表中出现的端口信号都应做简要的功能描述。,企业代码风格,12.有限状态机FSM,VerilogHDL描述状态机时由parameter分配好状态;,组合逻辑和时序逻辑分开用不同的进程:,组合逻辑包括状态译码和输出;,时序逻辑那么是状态存放器的切换;,必须包括对所有状态都处理不能出现无法处理的状态使状态机失控;,Mealy机的状态和输入有关,而Moore机的状态转换和输入无关。,Mealy机使用的较多,企业代码风格,13.testbench,在testbench中防止使用绝对的时间,如#20,#15或#(CYC+15)等,应该在文件前面使用parameter定义一些常量,使得时间的定义象#(CYC+OFF0)的形式,便于修改;,观测结果可以输出到波形文件或数据文件 ;,对大的设计的顶层仿真一般不要对所有信号跟踪波形文件会很大仿真时间延长可以有选择的观测一些信号;,企业代码风格:常见代码问题,在for-loop中包括不变的表达式浪费运算时间,for (i=0;i4;i=i+1),begin,Sig1 = Sig2;,DataOuti = DataIni;,end,for-loop中第一条语句始终不变,浪费运算时间。,注意,这是仿真代码,企业代码风格:常见代码问题,资源共享问题,条件算子中不存在资源共享,如,z = (cond) ? (a + b) : (c + d);,必须使用两个加法器;,而等效的条件if-then-else语句那么可以资源共享如,if (Cond),z = a + b;,else,z = c + d;,只要加法器的输入端复用,就可以实现加法器的共享,使用一个加法器实现,企业代码风格:常见代码问题,由于组合逻辑位置不同而引起过多的触发器综合,组合逻辑单独使用一个,电平触发的always语句,,存放器减少一个。,注:1需根据具体需要,2少用always描述,组合逻辑,企业代码风格:常见代码问题,谨慎使用异步逻辑,防止门控时钟,always (posedge GATED_Clk or posedge Rst) begin,if (Rst),Z Language Templates,UCF,Verilog,原语的使用,语言模板: UCF,用户约束文件,时钟管理单元约束,初始化约束,引脚约束,布局布线约束,时序约束,使用UCF语句,图形界面,原语的使用,语言模板: Verilog,根本构件:根本的语言要素,注释,条件编译,操作符,函数和任务,原语的使用,语言模板: Verilog,仿真构件:根本的语句规那么,时钟模拟,配置语句,仿真延迟,循环语句,过程描述语句,数据流描述语句,数据类型,系统函数库,原语的使用,语言模板: Verilog,可综合构件,always语句,综合属性高级综合,代码样例建议使用,条件语句,assign语句,generate语句,端口声明,信号声明,原语的使用,语言模板: Verilog,用户模板,自定义的模板,原语的使用,语言模板: Verilog,原语模板,计算组件,时钟组件,I/O组件,片内存储器组件,存放器组件,移位存放器/LUT组件,Slice/CLB组件,ISE不同版本组件不同,不同芯片有自己的专用组件,原语的使用,组件例如:OBUF组件,原语的使用,组件例如:Virtex-2芯片的DCM组件,原语的使用,组件例如:分布式单端口RAM,原语的使用,组件例如:分布式双端口RAM,原语的使用,组件例如:Virtex-4芯片异步FIFO,原语的使用,Virtex-II的块状RAM,原语的使用,组件例如:Virtex-2芯片双端口块状RAM,原语的使用,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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