版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VerilogHDL第三讲1第四章Verilog设计建模结构化方式:使用门和模块实例语句建模数据流方式:使用连续赋值语句建模行为描述方式:使用过程化语句建模2结构化方式建模被实例化对象可以是内置基本门、用户定义原语(UDP)、模块等。同一类型的多个实例可以在一个结构形式中被定义。格式:实例类型实例名(端口名列表)3多输入门实例44-1多路选择电路5数据流方式建模连续赋值语句assign用于数据流方式建模用于对连线类变量赋值,不能对寄存器变量赋值赋值过程始终保持,右边表达式的变化随时反映到左边变量是并发语句格式:
assign[delay]target=expression6举例采用数据流方式描述1位全加器7行为描述方式建模行为描述方式的构成框架块语句赋值语句高级程序语句8一、行为描述方式的构成框架Module的组成:模块定义端口类型说明 过程语句 过程赋值语句数据类型说明 过程块1 块语句 高级程序语句描述体 过程块2结束行 ……9过程块VerilogHDL的行为描述以过程块为基本组成单位,一个模块的行为描述由一个或多个并行运行的过程块组成。过程块的定义:过程语句@(事件控制敏感表)(斜体部分可缺省)块语句开始表示符:块名块内局部变量说明过程赋值语句或高级程序语句块语句结束标识符10过程块过程语句:initial和always事件控制敏感表只在always语句后出现,以激活过程语句的执行块语句标识符:串行块标识符:begin-end并行块标识符:fork-join过程块在块名、局部变量缺省,且只有一条过程描述语句时,块语句标识符也可缺省11过程语句initial和always都从0时刻开始执行initial无触发条件,只执行一次;always以触发条件执行,或无触发条件时一直执行一个module的行为描述中可以有多个initial和always语句,即有多个过程块存在,且相互独立,并行运行12举例:产生2个时钟的行为描述moduleclk_gen_demo(clock1,clock2); output clock1,clock2;
reg clock1,clock2; initial begin clock1=0; clock2=1; end always begin #50 clock1=~clock1; end always begin #100 clock2=~clock2; endendmodule13二、块语句由块标识符“begin-end”和“fork-join”界定的一组行为描述语句是行为描述的打包处理,形式上与一条语句相一致只能出现在行为描述中,但不局限于过程语句之后,在高级程序语句中也需要用到块语句141.串行块begin-end按语句排列顺序串行执行可以有额外的时间延时(前一条执行结束下一条开始前的延时),但只是用于仿真(替代器件延时信息),不用于综合用带延时的行为描述进行功能仿真,便于观察功能模块执行的内部细节;而在逻辑综合时,综合工具将忽略描述中的延时信息15仿真与综合用带延时的行为描述进行功能仿真综合后用工艺库的逻辑块延时参数和线负载模型延时参数替代了描述中的延时信息综合后产生的电路连接网表(Netlist)中附加了上述延时参数,从而网表的模拟过程中大致能观察到实际的延时和执行过程16举例①带延时的串行块描述
begin #10 reg_a=reg_b; #10 reg_c=reg_a; end②不带延时的串行块描述
begin
reg_a=reg_b;
reg_c=reg_a; end
综合后结果相同。172.并行块fork-join块中的每条语句都同时开始执行,与先后顺序无关,延时都相对于块的起始执行时刻并行块起始执行时刻就是流程控制转入并行块的时刻,块结束时刻则是执行时间最长的语句结束的时刻并行块的行为描述可以理解为电路上电后各模块同时开始工作的过程18举例19三、赋值语句过程块中的赋值语句均称过程赋值语句过程赋值语句只能对寄存器类变量赋值20过程赋值举例reg=8’b1011_1100;reg_a[3]=1’b0;reg_a[7:4]=4’b1010;mem_a[3]=8’h5d;{carry,sum}=reg_a+reg_b;//用连接符整体赋值212.过程赋值语句的两种时序控制形式1.延时控制:#延时量 #10 reg_a=reg_b;2.事件控制:@(事件控制敏感表) @(clock) reg_a=reg_b;22事件控制分类@(信号名)信号名有变化就触发事件例:@(clock) a=b;@(posedge
信号名)信号名有上升沿就触发事件例:@(posedgeclock) a=b;@(negedge
信号名)信号名有下降沿就触发事件例:@(negedgeclock) a=b;@(敏感事件1or敏感事件2or…)敏感事件之一触发事件例:@(posedgeresetorposedgeclear) reg_out=0;233.阻塞过程和非阻塞过程过程赋值语句中,赋值算符“=”称为阻塞型赋值。在串行块中,前一语句的赋值结束前,后一语句不能被执行,故称之为阻塞执行过程非阻塞赋值算符“<=”不受前面语句执行的影响,直接由块起始时刻开始执行同一块中不能混用=和<=非阻塞赋值提供了在串行块中的一种并行执行的表达方法24举例:阻塞赋值moduledemo_seri_block(reg_a,reg_b,data,clock); input data,clock; output reg_a,reg_b;
always@(posedgeclock) begin
reg_a=data;
reg_b=reg_a; endendmoduleclockdatareg_breg_aDCLKQ25举例:并行赋值moduledemo_seri_block(reg_a,reg_b,data,clock); input data,clock; output reg_a,reg_b; always@(posedgeclock) fork
reg_a=data;
reg_b=reg_a; joinendmoduleclockdatareg_breg_aDCLKQDCLKQ26举例:非阻塞赋值moduledemo_seri_block(reg_a,reg_b,data,clock); input data,clock; output reg_a,reg_b; always@(posedgeclock) begin
reg_a<=data;
reg_b<=reg_a; endendmoduleclockdatareg_breg_aDCLKQDCLKQ27四、高级程序语句借用C语言中的编程语句,描述过程的行为特征更加明显只能出现在对模块进行行为描述的过程块中分类条件语句if-else散列语句case循环语句forever、repeat、while、for281.条件语句if-else
1)if(条件表达式)块语句 条件表达式为逻辑真和逻辑1时条件成立,其它如0、x、z均为条件不成立 一条没有else语句的if语句映射到硬件上,形成的是一个锁存器。如:
always@(enableordada) if(enbale) out=data;292)if(条件表达式)块语句
else 块语句always@(enableordada_aordata_b) if(enbale) out=data_a; else out=data_b;综合结果将产生一个二选一的MUX,比锁存器简单得多30举例:同步清零D触发器moduledff_sync(q,d,clear,clk); output q; input d,clear,clk;
reg q;
always
@(posedge
clk) if
(!clear) q=0; else q=d;endmodule31举例:异步清零D触发器moduledff_async(q,d,clear,clk); output q; input d,clear,clk;
reg q;
always
@(clearorposedge
clk) if(!clear) q=0; else q=d;endmodule323)if(条件表达式1)块语句1
elseif(条件表达式2)
块语句2
…
elseif(条件表达式n) 块语句n
else 块语句n+1常用于多路选择控制条件判断的先后顺序隐含条件的优先级关系可以嵌套使用如无块标识符,else语句与最近的if配对33举例342.case语句常用于译码和有限状态机的描述分类:casecasezcasex351)case格式case(敏感表达式) 值1:块语句1
值2:块语句2 …
值n:块语句n default:块语句n+1endcase敏感表达式与各项值的比较是按位作全等比较36举例moduledemo_case(sig);input sig;always@(sig)case(sig) 1’b1: $display(“signalvalueis1”); 1’b0: $display(“signalvalueis0”); 1’bx: $display(“signalisunknown”); 1’bz: $display(“signalishighimpedence”);endcaseendmodule372)casez和casexcasez:忽略比较表达式两边的z部分casex:忽略比较表达式两边的x/z部分举例:casez(r[3:0]) 4’b011z:表达式1;
4’b01xz:表达式2;382.循环语句VerilogHDL有四类循环语句,用来控制执行语句的执行次数。forever:连续的执行语句。repeat:连续执行一条语句n次。while:执行一条语句直到某个条件不满足。如果一开始条件即不满足,则语句一次也不能执行。for:通过一个循环控制变量来控制语句的循环次数。391)forever常用格式forever语句;或foreverbegin块语句end用途
forever循环语句常用于产生周期性的波形,作为仿真测试信号。它与always语句不同之处在于它不能独立写在程序中,而必然写在initial语句中。40举例412)repeat常用格式repeat(表达式)语句;或repeat(表达式)begin块语句end用途
repeat循环语句执行指定循环次数的过程语句。如果循环次数表达式的值不确定,即为x或z时,那么循环次数按0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026大厂电商运营面试题及答案
- 商洽调整跨境海运保价金额事函(6篇)范文
- 2026儿歌视唱面试题及答案解析
- 小学主题班会课件:多元文化与国际视野
- 2026赴美签证面试题及答案
- 2026广发资金运营面试题目及答案
- 2026海外招聘面试题目及答案
- 2025-2026学年南阳市高考冲刺押题(最后一卷)生物试卷含解析
- 警惕饮食安全护航学生健康成长二年级主题班会课件
- 湖北剩州市2026届高三数学上学期9月起点考试含解析
- 贵州省黔东南州2025-2026学年三下数学期末检测试题(含答案解析)
- 2026福建晋江农商银行社会招聘5人考试备考试题及答案详解
- 广东深圳市鲲鹏股权投资管理有限公司招聘笔试题库2026
- 2025洛阳职业技术学院辅导员考试题库
- 配电箱巡查记录表
- 2024秋期国家开放大学《法律文书》一平台在线形考(第一至五次考核形考任务)试题及答案
- GB/T 24067-2024温室气体产品碳足迹量化要求和指南
- DL∕T 5759-2017 配电系统电气装置安装工程施工及验收规范
- 医疗器械临床试验伦理要点
- 国开电大本科《管理英语3》机考总题库
- 护理查房支气管扩张伴咯血护理查房
评论
0/150
提交评论