《Verilog硬件描述语言基础.ppt》由会员分享,可在线阅读,更多相关《Verilog硬件描述语言基础.ppt(96页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Verilog硬件描述语言基础简介HDLHardware Description Language简介发展概况Verilog:1983年Gateway Design Automation为其模拟器开发的硬件建模语言;专用、用于模拟、仿真1990 OVI(Open Verilog International)1995 成为IEEE标准Std1364-1995可用于模拟、仿真、综合的硬件建模简介Verilog 的特征支持多级建模方式算法、行为级建模寄存器传输(RTL)级建模门级建模开关级建模简介支持多种建模方式行为功能建模方式结构建模方式数据流建模方式简介层次描述,在描述中显式进行时序建模提供了强
2、大的硬件建模能力,内嵌的任务和函数类C语言,易学已成为业界标准可通过PLI与C接口提供原语描述能力简介EDA工具对Verilog的支持良好Simulation ToolsVerilogXL:业界的黄金模拟器VCS(ViewLogic)NCVerilogNC_Sim(兼容Verilog、VHDL混合结构的描述形式)Synthesis ToolsSynopsys DesignCompilerVeriBest、Ambit、RTLCompilerMagmaEmulation ToolsQuickTurn、PalladiumModelSource、VstationArms、Motorola简介混合建模能
3、力二、Verilog的总体结构1 总体描述方式二、Verilog的总体结构模块的基本描述形式:module module_name(input/output_port list);Declarations:input/output_port declarations;reg,wire,parameter,function,task,UDP.Statements:initial statementsalways statementsGate/Module instantiationUDP instantiationassign statementsendmodule二、Verilog的总体结构描
4、述方式说明二、Verilog的总体结构行为功能描述二、Verilog的总体结构数据流描述方式一、Verilog HDL描述的层次1、结构化、层次式描述2、行为、功能描述3、电路级描述Verilog类C语言的特征行为描述时可采用类C的语言结构ifelsecaseforwhile赋值语句结构与C的语言结构相似算术、逻辑操作与C的语言相似三、Verilog语言要素模块的基本描述形式:module module_name(input/output_port list);Declarations:input/output_port declarations;reg,wire,parameter,func
5、tion,task,UDP.Statements:initial statementsalways statementsGate/Module instantiationUDP instantiationassign statementsendmodule 三、Verilog语言要素1、标识符不能使用保留字作标识符三、Verilog语言要素2、数据类型2.1 verilog 的允许基本逻辑值0:逻辑0/真1:逻辑1/假x:未知()z:高阻三、Verilog语言要素2.2常量类型整型b、o、d、h分别表示二进制数、八进制数、十进制数、十六进制数用数字表示数据宽度3b101表示3位二进制数1018
6、hdf表示8位16进制数df实型字符串型三、Verilog语言要素2.3信号类型线网类型 寄存器类型三、Verilog语言要素线网类型wiretriworwandtriortriandtriregtri1tri0supply0supply1三、Verilog语言要素wand:线与 三、Verilog语言要素寄存器类型reg 并不一定代表设计中实际的寄存器reg数据类型说明时要注意数据长度问题integer数据类型说明时要注意数据长度问题integer数据默认长度为64位三、Verilog语言要素存储器说明及操作说明方式:reg msb:lsb memory_nameupper:lower;re
7、g 15:0mem1255:0;mem1定义为深度为256的16位存储器三、Verilog语言要素存储器说明及操作存储器赋值方式:单个存储单元的赋值reg 15:0 mem1255:0;mem1I=16h8c;mem18=16ha9;使用系统任务对存储器赋值$readmemb(“filename”,memory_name);$readmemh(“filename”,memory_name);存储器说明及操作reg 7:0mem14:0;$readmemb(“memory1”,mem1);memory1内容如下:0100100110110110110100011001110011000111三、
8、Verilog语言要素2.4参数说明parameter参数名 值;parameterBUS_SIZE=16;parameterfilename=“/export/home/joe/my_file”使用参数的优点:增加可读性;可修改性好;设计的可重用性好 四、表达式4.1操作数寄存器类型数据线网类型数据四、表达式4.2操作符算术操作+-*/%逻辑操作&|!&|=22)Sum=0;五、行为建模描述语句块顺序语句块:语句块内的语句按书写的次序执行;begin描述语句1;描述语句2;。描述语句n;end五、行为建模描述语句块并行语句块:语句块内的语句并行执行;fork描述语句1;描述语句2;。描述语句
9、n;join五、行为建模描述语句块顺序语句块内可嵌套并发语句块;并发语句块内可嵌套顺序语句块。分支、条件语句if else及其嵌套语句case语句case、casex、casez基本语法结构与C语言类似五、行为建模五、行为建模循环语句forever 循环forever procedural_statementrepeat 循环repeat (loop_number)procedural_statement五、行为建模循环结构while循环语句while(condition)procedural_statementfor循环语句for(initial_assignment;condition;s
10、tep_assignment)procedural_statement五、行为建模function定义function range function_id;input_declarationsother declarationsprocedural_statementsendfunctionfunction适合描述组合逻辑块五、行为建模function BUS_SIZE-1:0 function_example;inputBUS_SIZE-1:0 Din;integerk;begin for(k=0;kBUS_SIZE-1;k=k+1)function_exampleBUS_SIZE-k=Di
11、nk;endendfunction函数调用func_id(exp1,expn);reg BUS_SIZE-1:0 din,dout;dout=function_example(din);五、行为建模Task定义task task_id;input_declarationother declarationprocedural statementsendtasktask适合于描述时序任务五、行为建模一个建模实例五、行为建模六、UDP定义6.1 UDP定义primitive UDP_name(Output_Name,List_of_inputs);output_declarationdeclarat
12、ion of List_of_inputsother declarations|initial 语句tableList of table entriesendtableendprimitive六、UDP定义6.2 组合逻辑UDP表中规定了不同的输入组合和相对应的输出值。6.3 时序电路UDP用1位寄存器描述内部状态,该寄存器的值是时序电路UDP的输出值。初始化语句用于描述触发器的初始状态。电平触发的触发器的描述沿触发的触发器的描述六、UDP定义六、UDP定义六、UDP定义六、UDP定义?:0、1、xb :0,1-:输出保持(AB):由A变到B r:上跳变沿,与(01)相同f:下跳变沿,与(10
13、)相同p:(01)、(0 x)、(x1)的任一种n:(10)、(1x)、(x0)的任一种七、系统任务和系统函数7.1 显示和写入任务$display$displayb$displayo$displayh$write$writeb$writeo$writeh7.2 探测任务$strobe$strobeb$strobeo$strobeh七、系统任务和系统函数7.3 监测任务$monitor$monitorb$monitoro$monitorh7.4 文件输入、输出任务文件的打开、关闭$fopen$fclose从文件中读取数据$readmemb$readmemh七、系统任务和系统函数7.4 模拟控制
14、任务$finish;退出模拟器,返回操作系统$stop;模拟器挂起。任何TestBench中的激励码须包含下述形式语句:initialbegin$stop;$finish;end七、系统任务和系统函数7.5 值转储(VCD)任务$dumpfile(file_name):指定VCD文件名$dumpvars(level,module_name);$dumpall;$dumplimit(number);$dumpon;$dumpoff;八、与模拟有关的论题8.1 信号驱动强度 八、与模拟有关的论题8.2 竞争问题出现竞争的原因:Nonblocking assignment with nonedela
15、y;Concurrent always statements;Signals are assigned in multiple always statements or in multiple nonblocking assignments.八、与模拟有关的论题8.3 如何避免竞争 HDL Coding StyleHow to write a good verilog codeHDL Coding StyleObjectiveReadableModifiableReuseableOptimal Result in SynthesisFast Simulation保证综合前后逻辑模拟结果的一致性
16、HDL Coding StyleBasic Coding PracticesCoding for PortabilityGuidelines for Clocks and Reset/SetCoding for SynthesisHow to Partition a DesignDesigning with MemoriesCoding ProfilingOverview of the Coding GuidelinesSimple structureBasic type(VHDL only)Simple Clocking SchemeConsistent coding style,consi
17、stent naming conventions,consistent structure for process and state machinesRegular partitioning schema,all module outputs registered and each module roughly the same sizeEasy to read,modify,reuseableUsage of parametersBasic Coding Practices尽可能多使用function描述、少用Task描述尽量少用循环结构注意变量、信号、模块、块命名的协调注意端口描述按一定
18、次序、端口连接的方式Basic Coding Practices命名规则常数名字大写且有确定意义信号名、变量名、端口名小写参数名大写时钟名以clk、clock开头低电平有效信号名为:信号名_nrst、reset/set为复/置为信号名模块名应有意义提高可读性不使用保留字Basic Coding Practices模块端口描述及其引用时的连接建议模块端口描述按次序进行:输入信号输出信号clocks clocksresetsresetsenablesenablesother control signalsother control signalsdata/address signalsdata描述
19、大的模块连接结构时,采用端口名、信号名相对应的连接方式,提高可读性和可修改性.端口名(信号名)Coding for PortabilityObjectiveTechnology-independentCompatible with various simulation toolsCompatible with various synthesis toolsEasily translated from Verilog to VHDLEasily combined with C Coding for PortabilityDont use hard-coded numeric valusa poo
20、r coding style:wire 7:0my_in_bus;wire 7:0 my_out_bus;建议采用:parameterBUS_SIZE=8 wire BUS_SIZE-1:0my_in_bus;wire BUS_SIZE-1:0 my_out_bus;Use technology-independent libraries描述尽量避免与综合、模拟工具相关Guidelines for Clocks and Resets 最简单的设计单个的全局时钟上/下跳变沿触发器优点简单、易懂、易分析Guidelines for Clocks and ResetsAvoid Mixed Cloc
21、k EdgesDifficulty in timing analysis(the duty cycle is a critical issue in timing analysis,in addition to the clock frequency itself);Difficulty in scan_based test;Difficulty to maintain a design.Guidelines for Clocks and ResetsAvoid Use Gated Clock使用内部产生时钟要特别注意:设计的可测性受到严重影响(扫描测试难度大);应将内部产生时钟模块描述放在设
22、计描述的领层;绝对禁止将内部产生时钟模块描述作为宏单元的子模块。Guidelines for Clocks and ResetsGuidelines for Clocks and ResetsMake sure your design are controlled only by a simple reset/set signals;避免条件置复/位;时序逻辑器件的置复/位不应放在initial描述块中(可综合性、保证综合前和综合后的模拟结果相同)Coding for SynthesisObjectivePerformance Testability Synthesis Simplificat
23、ion and Timing Analysis 保证综合前、后的逻辑模拟结果的一致 Coding for Synthesis时序元件问题;always(敏感信号/变量表)完整性问题;组合电路的反馈问题;Blocking/Nonblocking赋值语句的使用问题;ifelse/case描述的选择;FSM的描述Coding for Synthesis1 时序元件问题:避免不必要的Latch;触发器的初始赋值(reset/set)不应在initial描述块内定义,而应该在其功能描述中加以定义。组合电路避免出现反馈回路Coding for Synthesis避免不必要的Latch:在组合逻辑描述中,保
24、证:所有的ifelse及其嵌套结构、case、casex、casez结构是满的描述变量、信号的赋值在每一个分支中都应有明确的指定;ifelse及其嵌套结构本身是满的;case、casex、casez必须包含default分支;Coding for SynthesisCoding for Synthesis2 (敏感信号/变量表)问题敏感信号/变量表必须完整,以保证综合前、后的模拟结果一致,但不相关的信号的加入则会降低模拟速度。对组合块,每一个出现在赋值语句右边且没有在块内被预先赋值的信号应列入表中;对时序块,1)时钟控制信号必须出现在敏感表中;2)若为异步置/复位,则相应的置/复位信号必须列入
25、敏感表。Coding for Synthesis3 Blocking and NonBlocking Assignments Blocking(阻塞)赋值语句顺序执行 Nonblocking(非阻塞)赋值语句并发执行对于组合逻辑块描述,建议采用阻塞赋值语句;对于时序块描述,建议采用非阻塞赋值语句。Coding for SynthesisCoding for SynthesisCoding for Synthesis4 ifelse 及其嵌套结构与case语句 尽量少用嵌套的ifelse结构;级联的二选一开关采用case、casex、casez结构 多路选择开关Coding for Synthe
26、sisCoding for Synthesis4 FSM描述Mealy机 NS=f(PS,INPUT);OUTPUT=h(PS,INPUT);posedge Clk:PS=NS;Coding for Synthesis描述方式:组合块:always (INPUT or PS)begin NS=f(PS,INPUT);OUTPUT=h(PS,INPUT);end时序块:Partitioning for SynthesisObjective Better Synthesis Results Faster Compile Runtimes Ability to Use Simple Strategy
27、 to meet Timing Constraints Optimal DesignPartitioning for SynthesisGuidelinesRegister all output signals of the module Separate modules that have different design goals Complete combinational logic paths in a single module,and specially avoid glue logic Considering resource sharing Separate asychro
28、nous logic from synchronous logic Separate blocks controlled by different clocksSeparate memory from random logicPartitioning for SynthesisRegister all output signals of the modulePartitioning for SynthesisSeparate modules that have different design goalsPartitioning for Synthesiscombinational logic paths in a single modulePartitioning for SynthesisPartitioning for SynthesisPartitioning for SynthesisFSM PartitionObjective:High performanceMethod:Cascade partitionMaster-Slave PartitionPartitioning for SynthesisPartitioning for SynthesisPartitioning for Synthesis