第17章-Verilog中的高级结构

上传人:油** 文档编号:240715911 上传时间:2024-05-02 格式:PPT 页数:22 大小:1.18MB
返回 下载 相关 举报
第17章-Verilog中的高级结构_第1页
第1页 / 共22页
第17章-Verilog中的高级结构_第2页
第2页 / 共22页
第17章-Verilog中的高级结构_第3页
第3页 / 共22页
点击查看更多>>
资源描述
第第1717章章-Verilog-Verilog中的高级中的高级结构结构Verilog的任的任务及函数及函数 结构化构化设计是将任是将任务分解分解为较小的,更易管理的小的,更易管理的单元,并将可重用代元,并将可重用代码进行封装。行封装。这通通过将将设计分成模分成模块,或任,或任务和函数和函数实现。任任务(task)通常用于通常用于调试,或,或对硬件硬件进行行行行为描述描述可以包含可以包含时序控制(序控制(#延延迟,,wait)可以有可以有 input,output,和,和inout参数参数可以可以调用其他任用其他任务或函数或函数函数函数(function)通常用于通常用于计算,或描述算,或描述组合合逻辑不能包含任何延不能包含任何延迟;函数仿真;函数仿真时间为0只含有只含有input参数并由函数名返回一个参数并由函数名返回一个结果果可以可以调用其他函数,但不能用其他函数,但不能调用任用任务Verilog的任的任务及函数及函数任任务和函数必和函数必须在在module内内调用用在任在任务和函数中不能声明和函数中不能声明wire所有所有输入入/输出都是出都是局部局部寄存器寄存器任任务/函数函数执行完成后才返回行完成后才返回结果。果。例如,若任例如,若任务/函数中有函数中有forever语句,句,则永永远不会返回不会返回结果果任任务 下下面面的的任任务中中含含有有时序序控控制制和和一一个个输入入,并并引引用用了了一一个个module变量量,但没有但没有输出、出、输入入输出和内部出和内部变量,也不量,也不显示任何示任何结果。果。时序控制中使用的信号(例如序控制中使用的信号(例如ck)一定不能作)一定不能作为任任务的的输入,因入,因为输入入值只向只向该任任务传送一次。送一次。module top;reg clk,a,b;DUT u1(out,a,b,clk);always#5 clk=!clk;task neg_clocks;input 31:0 number_of_edges;repeat(number_of_edges)(negedge clk);endtask initial begin clk=0;a=1;b=1;neg_clocks(3);/任任务调用用 a=0;neg_clocks(5);b=0;endendmodule任任务任任务可以有可以有input,output 和和 inout参数。参数。传送送到到任任务的的参参数数和和与与任任务I/O说明明顺序序相相同同。尽尽管管传送送到到任任务的的参参数数名名称称与与任任务内内部部I/O说明明的的名名字字可可以以相相同同,但但在在实际中中这通通常常不不是是一一个个好好的的方法。参数名的唯一性可以使任方法。参数名的唯一性可以使任务具有好的模具有好的模块性。性。可以在任可以在任务内使用内使用时序控制。序控制。在在Verilog中任中任务定定义一个新范一个新范围(scope)要禁止任要禁止任务,使用关,使用关键字字disable。主要特点:主要特点:从从代代码中中多多处调用用任任务时要要小小心心。因因为任任务的的局局部部变量量的的只只有有一一个个拷拷贝,并并行行调用任用任务可能可能导致致错误的的结果。在任果。在任务中使用中使用时序控制序控制时这种情况种情况时常常发生。生。在在任任务或或函函数数中中引引用用调用用模模块的的变量量时要要小小心心。如如果果想想使使任任务或或函函数数能能从从另另一个模一个模块调用,用,则所有在任所有在任务或函数内部用到的或函数内部用到的变量都必量都必须列在端口列表中。列在端口列表中。任任务 下下面面的的任任务中中有有输入入,输出出,时序序控控制制和和一一个个内内部部变量量,并并且且引引用用了了一个一个module变量。但没有双向端口,也没有量。但没有双向端口,也没有显示。示。任任务调用用时的参数按任的参数按任务定定义的的顺序列出。序列出。module mult(clk,a,b,out,en_mult);input clk,en_mult;input 3:0 a,b;output 7:0 out;reg 7:0 out;always(posedge clk)multme(a,b,out);/任任务调用用 task multme;/任任务定定义 input 3:0 xme,tome;output 7:0 result;wait(en_mult)result=xme*tome;endtaskendmodule函数(函数(function)函数中不能有函数中不能有时序控制,但序控制,但调用它的用它的过程可以有程可以有时序控制。序控制。函数名函数名f_or_and在函数中作在函数中作为register使用使用module orand(a,b,c,d,e,out);input 7:0 a,b,c,d,e;output 7:0 out;reg 7:0 out;always(a or b or c or d or e)out=f_or_and(a,b,c,d,e);/函函数数调用用 function 7:0 f_or_and;input 7:0 a,b,c,d,e;if (e=1)f_or_and=(a|b)&(c|d);else f_or_and=0;endfunctionendmodule函数函数主要特性:主要特性:函数定函数定义中不能包含任何中不能包含任何时序控制序控制语句。句。函数至少有一个函数至少有一个输入,不能包含任何入,不能包含任何输出或双向端口。出或双向端口。函数只返回一个数据,其缺省函数只返回一个数据,其缺省为reg类型。型。传送到函数的参数送到函数的参数顺序和函数序和函数输入参数的入参数的说明明顺序相同。序相同。函数在模函数在模块(module)内部定内部定义。函数不能函数不能调用任用任务,但任,但任务可以可以调用函数。用函数。函数在函数在Verilog中定中定义了一个新的范了一个新的范围(scope)。虽然然函函数数只只返返回回单个个值,但但返返回回的的值可可以以直直接接给信信号号连接接赋值。这在需要有多个在需要有多个输出出时非常有效。非常有效。o1,o2,o3,o4=f_ or_ and(a,b,c,d,e);函数函数 要要返返回回一一个个向向量量值(多多于于一一位位),在在函函数数定定义时在在函函数数名名前前说明明范范围。函数中需要多条。函数中需要多条语句句时用用begin和和end。不管在函数内不管在函数内对函数名函数名进行多少次行多少次赋值,值只返回一次。下例中,只返回一次。下例中,函数函数还在内部声明了一个整数。在内部声明了一个整数。module foo;input 7:0 loo;output 7:0 goo;/可以持可以持续赋值中中调用函数用函数 wire 7:0 goo=zero_count(loo);function 3:0 zero_count;input 7:0 in_ bus;integer I;begin zero_count=0;for(I=0;I 8;I=I+1)if(!in_bus I)zero_count=zero_count+1;end endfunctionendmodule函数函数函数返回函数返回值可以声明可以声明为其它其它register类型:型:integer,real,或或time。在任何表达式中都可在任何表达式中都可调用函数用函数module checksub(neg,a,b);output neg;reg neg;input a,b;function integer subtr;input 7:0 in_a,in_b;subtr=in_a-in_b;/结果可能果可能为负 endfunction always (a or b)if(subtr(a,b)0)neg=1;else neg=0;endmodule函数函数函数中可以函数中可以对返回返回值的个的个别位位进行行赋值。函数函数值的位数、函数端口甚至函数功能都可以参数化。的位数、函数端口甚至函数功能都可以参数化。.parameter MAX_BITS=8;reg MAX_BITS:1 D;function MAX_BITS:1 reverse_bits;input MAX_BITS-1:0 data;integer K;for(K=0;K MAX_BITS;K=K+1)reverse_ bits MAX_BITS-(K+1)=data K;endfunctionalways (posedge clk)D=reverse_bits(D);.命名命名块(named block)在关在关键词begin或或fork后加上后加上:对块进行命名行命名module named_ blk;.begin:seq_blk.end.fork:par_blk.join.endmodule 在命名在命名块中可以声明局部中可以声明局部变量量 可以使用关可以使用关键词disable禁止一个命名禁止一个命名块 命名命名块定定义了一个新的范了一个新的范围 命名命名块会降低仿真速度会降低仿真速度禁止命名禁止命名块和任和任务module do_arith(out,a,b,c,d,e,clk,en_mult);input clk,en_mult;input 7:0 a,b,c,d,e;output 15:0 out;reg 15:0 out;always(posedge clk)begin:arith_block/*命名命名块*reg 3:0 tmp1,tmp2;/*局部局部变量量*tmp1,tmp2=f_or_and(a,b,c,d,e);/函数函数调用用 if(en_mult)multme(tmp1,tmp2,out);/任任务调用用 end always(negedge en_mult)begin/中止运算中止运算 disable multme;/*禁止任禁止任务*disable arith_block;/*禁止命名禁止命名块*end/下面下面定定义任任务和函数和函数 endmodule禁止命名禁止命名块和任和任务disable语句终结一个命名块或任务的所有活动。也就是说,在一个语句终结一个命名块或任务的所有活动。也就是说,在一个命名块或任务中的所有语句执行完之前就返回。命名块或任务中的所有语句执行完之前就返回。语法:语法:disable 或或 disable 当当命命名名块块或或任任务务被被禁禁止止时时,所所有有因因他他们们调调度度的的事事件件将将从从事事件件队队列列中中清除清除disable是典型的不可综合语句。是典型的不可综合语句。在在前前面面的的例例子子中中,只只禁禁止止命命名名块块也也可可以以达达到到同同样样的的目目的的:所所有有由由命命名块、任务及其中的函数调度的事件都被取消。名块、任务及其中的函数调度的事件都被取消。有限状有限状态机机隐式状式状态机机FSM 不需要声明状不需要声明状态寄存器寄存器 仿真效率高仿真效率高 只适合于只适合于线性的状性的状态改改变 大多数大多数综合工具不能合工具不能处理理显式式FSM:利于利于结构化构化 易于易于处理缺省条件理缺省条件 能能处理复理复杂的状的状态改改变 所有所有综合工具都支持合工具都支持 有限状有限状态机机在在隐式式FSM中中,只只要要数数据据在在一一个个时钟沿沿写写入入并并在在另另一一个个周周期期读出出,则会生成寄存器。会生成寄存器。所所有有FSM必必须有有复复位位,且且状状态改改变必必须在在单一一时钟信信号号的的同同一一边沿。沿。通通常常,如如果果状状态改改变简单明明确确,且且综合合工工具具接接受受隐式式状状态机机,就就可以使用可以使用隐式式类型。如果状型。如果状态改改变很复很复杂,则显式式类型更加有效。型更加有效。隐式式状状态机机是是一一个个行行为级而而非非RTL代代码的的典典型型例例子子。这种种代代码依依赖循循环和和内内嵌嵌时序序控控制制,有有时也也有有命命名名事事件件、wait和和disable语句句。因此,因此,隐式状式状态机在机在综合合时通常不被支持。通常不被支持。线性性FSM是指从一个状是指从一个状态到下一个状到下一个状态的的转换不需要任何条件。不需要任何条件。显式有限状态机module exp(out,datain,clk,rst);input clk,rst,datain;output out;reg out;reg state;always(posedge clk or posedge rst)if(rst)state,out=2b00;else case(state)1b0:begin out=1b0;if(!datain)state=1b0;else state=1b1;end 1b1:begin out=datain;state=1b0;end default:state,out=2b00;endcaseendmodule显式有限状态机可以在可以在过程程块中用中用单一一时钟边沿和沿和case语句句显式地描述式地描述FSM。必必须声明定声明定义状状态机的状机的状态状状态变量。量。要改要改变当前状当前状态,必,必须在在时钟边沿改沿改变状状态变量的量的值。给通常不会通常不会发生的条件指定缺省生的条件指定缺省动作是一个很好的描述方式。作是一个很好的描述方式。隐式有限状态机module imp(out,datain,clk,rst);output out;reg out;input clk,datain,rst;always(rst)/Synergy reset method if(rst)assign out=1b0;else begin deassign out;disable seq_block;/返回初始状返回初始状态 end always(posedge clk)begin:seq_block out=1b0;if(!datain)/状状态1:output=0 disable seq_block;/状状态2:output=2nd bit (posedge clk)out=datain;endendmodule隐式有限状态机可可以以在在过程程块中中用用多多个个时钟边沿沿(每每个个状状态一一个个),条条件件语句句,循循环,和,和disable语句句隐式地描述一个式地描述一个FSM。通常不可。通常不可综合。合。不必声明状不必声明状态变量。量。在在下下一一个个时钟边沿沿改改变状状态,除除非非迫迫使使状状态重重复复。例例如如在在一一个个循循环中或用一个中或用一个disable语句。下一个状句。下一个状态可以由条件可以由条件语句决定。句决定。复习1.在在Verilog中什么中什么结构能构能产生一个新的生一个新的“范范围”?2.哪些哪些结构可以被禁止?构可以被禁止?3.什么什么时候一个函数比一个任候一个函数比一个任务更合适?反更合适?反过来呢?来呢?解答解答1.模模块,任任务,函函数数,和和命命名名块。Verilog中中模模块作作为主主要要层次次分分割割方法。函数和任方法。函数和任务提供附加的代提供附加的代码分割和封装方法。分割和封装方法。2.命名命名块和任和任务可以被禁止。可以被禁止。3.函函数数更更适适用用于于组合合逻辑描描述述,并并且且使使用用灵灵活活(例例如如在在一一个个持持续赋值的的右右边或或在在一一个个端端口口列列表表里里)。如如果果需需要要时序序控控制制,则任任务更更适合。任适合。任务还可以被禁止。可以被禁止。
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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