HDL编程基础.课件.ppt

上传人(卖家):三亚风情 文档编号:2891122 上传时间:2022-06-08 格式:PPT 页数:51 大小:608.50KB
下载 相关 举报
HDL编程基础.课件.ppt_第1页
第1页 / 共51页
HDL编程基础.课件.ppt_第2页
第2页 / 共51页
HDL编程基础.课件.ppt_第3页
第3页 / 共51页
HDL编程基础.课件.ppt_第4页
第4页 / 共51页
HDL编程基础.课件.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、 20011廖义奎 20082 20083n10.7 always过程n10.8 赋值 n10.9 行为描述 20084 Verilog HDL中并没有进程的概念,但却有与进程相同功能的三种过程,分别是 assign、always和模块实例,这三种在执行的方式上与进程一样,在过程之间是并行执行的。 模块实例已在前面介绍过,assign将在赋值一节中介绍。这一节将介绍always过程。 20085 always过程相当于一个进程,即always块与always块之间是并行工作的,而块内就顺利执行的。 always块的执行,由敏感信号列表中的信号触发,就像是由一个中断信号触发一个中断处理程序一样。

2、 20086always (敏感信号列表) begin 赋值语句 分支语句 循环语句 任务、函数调用 end 20087(1)重复多次执行的语句,是编写触发器、同步设计中最常用的语句,也是仿真中产生时钟常用的语句。(2)可以认为always块是响应事件的处理程序。(3)always块内的程序是顺利执行的。always块内的顺序执行与阻塞式赋值语句在功能上基本相同,但在用法上有点差别。 20088 (1)always语句通常对数字电路中的一组反复执行的活动进行建模,它类似于软件语言中的一个无限循环,从硬件的角度而言,它真实地反映了电路在加电后的连续反复运行的状态。 (2)“begin-end”之

3、间的语句称为块语句,其中的语句是按照串行方式顺序执行的。 20089 (3) (敏感信号列表)是可选的,敏感信号列表列出了触发条件,只有当触发条件满足的时候,后面的“begin-end”语句块才会执行,当有多个触发条件的时候,触发条件之间用“or”或者逗号“,”分开,具体的格式如下: (触发条件1,触发条件2,触发条件N) 200810 Verilog触发方式分为电平触发、边沿触发两种:(1)电平触发如图10.7所示。 在Verilog中,电平触发方式比较少用。(2)边沿触发如图10.8所示。 200811 上升沿与下降沿都触发,从功能上看,与电平触发效果一样,所以也有人把这种方式叫做电平触发

4、,但如果从严格意义上看,还是不太一样。 always (CLK) a=b 以上语句指当CLK的值改变时就把b指定(Assign)给a,即(CLK)将在CLK的上升沿或下降沿时,都触发。 200812(1)上升沿触发如图10.9所示,用关键字posedge描述;例如: always (posedge CLK) cntr=cntr+1以上语句指当CLK的上升沿时,将cntr的值加1。 200813(2)下降沿触发如图10.10所示,用negedge描述。 always (negedge CLK) cntrtransfer; always (transfer) dout =data_from_fui

5、fo 200818Verilog HDL的赋值分为两类:n 一是持续赋值,n 二是过程赋值。 200819 持续赋值是给wire类型的变量赋值。 可以用持续赋值语句描述组合逻辑,代替用门电路的描述方式。持续赋值在过程块外部使用。 持续赋值只能在等式左边有一个简单延时说明。 持续赋值一般多用于组合逻辑电路的设计。 200820 #delay strength = wire out; assign out =in_data_ain_data_b; /也可以不经assign而用wire直接指定,这种方式较为简捷 wire out =in_data_ain_data_b; 200821 过程赋值是给寄

6、存器类型的变量赋值。寄存器类型包括reg、integer、real、time等。 这些值在被赋值之后将保持不变,直到被其它的过程语句赋予新值为止,而assign语句的赋值对象只能是线网类型(wire),而且它的值连续不断地变化。 200822 过程赋值多用于时序逻辑电路的设计。 过程赋值分为阻塞式赋值与非阻塞式赋值。非阻塞式语句主要用于时序器件,阻塞式语句主要用于组合逻辑。 200823 在顺序模块内,某条语句未执行完之前,不会执行下一条语句。阻塞式赋值语句符号是“=”。 下面通过两个例子来加深对阻塞式赋值的理解。 200824module verilog_1(input in1,in2,cl

7、k, output reg out);reg temp;always(posedge clk)begin temp=in1|in2; out=temp;endendmodule 200825module verilog_1(input in1,in2,clk, output reg out);reg temp;always(posedge clk)begin out=in1|in2;endendmodule 示例10.8综合结果和示例1的综合结果完全一样。 200826 在顺序模块内,某条语句的执行并不阻塞下一条语句的执行,即在这条语句执行时,下一条语句也同时执行。阻塞式赋值语句符号是“=”。

8、 下面是采用非阻塞式语句的示例,该示例代码形式与前面刚介绍的两个例子相似,但综合出来的结果却不相同。 200827module verilog_1(input in1,in2,clk, output reg out);reg temp;always(posedge clk)begin temp=in1|in2; out=temp;endendmodule 200828module verilog_1(input in1,in2,clk, output reg out);reg temp;always(posedge clk) begin temp=in1|in2; out=temp; end

9、endmodulemodule verilog_2(input in1,in2,clk, output reg out);reg temp;always(posedge clk) begin temp=in1|in2; out=temp; end endmodulemodule verilog_3(input in1,in2,clk, output reg out);reg temp;always(posedge clk) begin out=temp; temp=in1|in2; end endmodulemodule verilog_4(input in1,in2,clk, output

10、reg out);reg temp;always(posedge clk) begin out=temp; temp=in1|in2; end endmodulemodule verilog_5(input in1,in2,clk, output reg out);reg temp;always( clk) begin temp=in1|in2; out=temp; end endmodulemodule verilog_6(input in1,in2,clk, output reg out);reg temp;always( in1, in2) begin temp=in1|in2; out

11、=temp; end endmodule 200829 200830 200831 条件语句由“if else”实现,它具有如下特点:(1)if语句只能在initial或always区块内使用;(2)可以嵌套使用;(3)在多个平行条件时,例如38译码器、七段译码器等程序中,用case比if好; 200832(4)一般情况下应写完if语句,即写成if else的形式,以避免综合出锁存器;(5)if放在不同的层次上,将综合出不同层次的电路;(6)如果在连续的if语句中没有begin end,else句子将与离它最近的if句子匹配。 200833 实现多径选择。另外还有两种增强的case语句case

12、x、casez,支持1、0、x和z四种信号类型。 在casez语句中,出现在条件表达式和任意分支项表达式中的值z被认为是无关值,出现z的那个位在比较时被忽略。 在casex语句中,值x和z都被认为是无关位。实际使用中,字符“?”可用来代替字符“z”。 casez和casex都用endcase结束。 200834 时序上,如果是多重if语句,一般情况下一个if语句会综合出一个逻辑比较电路,层次多了,延迟时间就长。 电路大小上,对于较少选择项情况,用的if和case语句差别不是很大,有时是if语句电路大一些,有时是case大一些。但是,在选择项非常多时,用case综合出的电路要小一些。 20083

13、5 循环语句分为while、for、repeat、forever四种,必须在initial和always块中才能使用。 大多情况下,循环将由并行的硬件电路来实现,因此要注意循环的范围。 200836module verilog_1(input7:0 a, output reg7:0 y );integer i;always (a)begin for(i=0;i7;i=i+1) begin yi=ai&ai+1; endendendmodule 200837module verilog_1(input7:0 a, output reg7:0 y );integer i;always (a)beg

14、ini=0; while(i7) begin yi=ai&ai+1; i=i+1; endendendmodule 200838module verilog_1(input7:0 a, output reg7:0 y );integer i;always (a)begin i=0; repeat(8) begin yi=yi&ai; i=i+1; endendendmodule 200839 无限循环语句,一般在仿真中用。如果要在电路综合中实现一个无限循环的功能,该如何做? 那当然是用事件触发方式,不用无限循环。 无限循环可综合出无限多个电路模块,无限多的电路模块如何做出来? 200840mo

15、dule verilog_1(input7:0 a, output reg7:0 y );initialbegin forever y1=a2&a4;endEndmodule上述程序在quartus中综合没有报错,但没有电路输出。 200841 200842 Verilog HDL中的函数与C语言等其它高级语言的功能与用法相似。函数要返回一个向量值,在函数定义时在函数名前说明范围。函数中需要多条语句时用begin和end。 函数只能返回一个值,函数一经调用就必须立即执行,其内部不能包含任何时序控制,函数可以调用函数,但不能调用任务,函数至少有一个输入。 语句:function fname; /

16、其它语句 Endfunction 200843(1)函数定义中不能包含任何时序控制语句。(2)函数至少有一个输入,不能包含任何输出或双向端口。(3)函数只返回一个数据,其缺省为reg类型。(4)传送到函数的参数顺序和函数输入参数的说明顺序相同。 200844(5)函数在模块(module)内部定义。(6)函数不能调用任务,但任务可以调用函数。(7)函数在Verilog中定义了一个新的范围(scope)。(8)虽然函数只返回单个值,但返回的值可以直接给信号连接赋值。这在需要有多个输出时非常有效。 200845 任务是一个与函数功能相似的子程序,一般在能用函数的地方,都可用任务代替。但是,任务的功

17、能比函数强,用法更加灵活。语句:task tname; /其它语句 endtask 200846(1)任务与函数只能用于模块内,可以在块内定义和调用;(2)任务可以定义input和output;(3)任务内可直接用if、for等语句,但不能用always语句;(4)任务一般需要在always块内调用;(5)任务可在调用前定义,也可在调用后定义;(6)每个任务调用的综合一般都由一个电路实现,所以多个任务调用就需要多个电路块。 200847module verilog_1(input din,clk,nrst,output dout); wire dff_0,dff_1,dff_2,dff_3;

18、always (posedge clk or negedge nrst) begin aaa(din,clk,nrst,dff_0); end 200848task aaa;input d1,clk1,nrs1t;output reg q1; begin if(nrs1t) q1=0; else q1=d1; endendtaskendmodule 200849module verilog_1(input din,clk,nrst,output reg dout);always (posedge clk or negedge nrst)begin aaa;end task aaa;begin if(nrst) dout=0; else dout=din;endendtaskendmodule 200850(1)函数与任务间的共同点很多,但也存在一些差别,例如:(2)函数只能返回一个值,而任务可以有多个返回值;(3)函数一经调用就必须立即执行,其内部不能包含任何时序控制,而任务内部可以有时序控制;(4)函数可以调用函数,但不能调用任务,而任务即可调用函数,又可以调用任务;(5)函数至少有一个输入,而任务可以没有输入端。 200851

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(HDL编程基础.课件.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|