




已阅读5页,还剩25页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五讲行为建模 内容 行为建模过程块语句过程赋值过程中的块语句过程的时序控制阻塞与非阻塞过程赋值时序仿真原理 竞争概念 行为建模 描述 行为建模 描述 行为级描述是对系统的高抽象级描述 在这个抽象级 注重的是整个系统的功能而不是实现 Verilog有高级编程语言结构用于行为描述 包括 initial always wait for while ifelse case和forever等 Verilog的行为建模是用一系列以高级编程语言编写的并行的 动态的过程块来描述系统的工作 在每一个时钟上升沿 若Clr不是低电平 置Q为D值 置Qb为D值的反 D触发器行为 无论何时Clr变低置Q为0 置Qb为1 过程块 procedural 过程块是行为模型的基础 一个模块中可以有多个过程块 过程块有两种 initial块 只能执行一次always块 循环执行过程块中有下列部件过程赋值语句 描述过程块中的数据流时序控制 控制块的执行及块中的语句时序高级结构 循环 条件语句等 描述块的功能 过程块initial和always 都从0时刻开始执行 initial无触发条件 只执行一次 Always按触发条件执行 或无触发条件时一直执行 一个module的行为描述中可以有多个initial和always语句 即有多个过程块存在 且相互独立 并行运行 modulename input 端口说明output reg 信号说明wire 功能描述assign 并行赋值语句initial 过程块语句always 过程块语句initial assign always endmodule 过程赋值 proceduralassignment 在过程块中的赋值称为过程赋值 在过程赋值语句中表达式左边的信号必须是寄存器类型 如reg类型 在过程赋值语句等式右边可以是任何有效的表达式 数据类型也没有限制 如果一个信号没有声明则缺省为wire类型 使用过程赋值语句给wire赋值会产生错误 moduleadder out a b cin inputa b cin output 1 0 out wirea b cin reghalf sum reg 1 0 out always aorborcin beginhalf sum a b cin OKhalf carry aendendmodule half carry没有说明 时序控制 顺序块语句 过程中的块语句 块语句用来将多个语句组织在一起 使得他们在语法上如同一个语句 块语句分为两类 顺序块 语句置于关键字begin和end之间 块中的语句以顺序方式执行 并行块 关键字fork和join之间的是并行块语句 块中的语句并行执行 Fork和join语句常用于testbench描述 这是因为可以一起给出矢量及其绝对时间 而不必描述所有先前事件的时间 有名块 格式 begin 块名 end或fork 块名 join 有名块的块名作用 便于实现对块语句的有效控制用disable语句终止或提前结束有名块的执行过程允许在块内引入局部变量只在块内起作用的变量变量名可以和块外的其他变量名相同一定是寄存器类例 begin SEQ BLKreg 3 0 satsat maskend 过程的时序控制 在过程块中可以说明过程时序 过程时序控制有三类 延时执行 delay 延迟指定时间步后执行语句边沿敏感事件的时序控制 在信号发生翻转后执行语句 可以说明信号有效沿是上升沿 posedge 还是下降沿 negedge 可以用关键字or指定多个参数 电平敏感事件的时序控制 wait 直至expr值为真时 非零 才执行语句 若expr已经为真则立即执行语句 延时执行 语法 执行过程 定时控制 求表达式 赋值举例 10reg a reg b 延时10个单位后 执行赋值 2q a 延时2个单位后 求表达式 赋 值 与assign语句延时相似 为惯性延时 延时执行 在testbench中使用延时执行 延时 施加激励 或在行为模型中模拟实际延时 modulemuxtwo out a b sl inputa b sl outputout regout always sloraorb if sl 10out a 从a到out延时10个时间单位else 12out b 从b到out延时12个时间单位endmodule 在延时执行中可以使用模块参数parameter moduleclock gen clk outputclk regclk parametercycle 20 initialclk 0 always cycle 2 clk clk endmodule 延时执行例 moduleclk gen demo clock1 clock2 outputclock1 clock2 regclock1 clock2 initialbeginclock1 0 clock2 1 endalwaysbegin 50clock1 clock1 endalwaysbegin 100clock2 clock2 endendmodule 若赋值延时为0 结果将如何 alwaysbegin 0clock1 clock1 end 块语句中的延时执行 在顺序块中 语句一条接一条地计算执行 在并行块中 所有语句在各自的延迟之后立即计算执行 begin 5a 3 5a 5 5a 4 end fork 5a 3 15a 4 10a 5 join 上面的两个例子在功能上是等价的 Fork join例子里的赋值故意打乱顺序是为了强调顺序是没有关系的 注意fork join块是典型的不可综合语句 并且在一些仿真器中效率较差 边沿敏感事件的时序控制 事件控制 事件控制敏感表 等待直到事件发生后执行 信号名 信号名有变化就触发事件 例 clock a b posedge信号名 信号名有上升沿就触发事件 例 posedgeclock a b negedge信号名 信号名有下降沿就触发事件例 negedgeclock a b 敏感事件1or敏感事件2or 敏感事件之一触发事件例 posedgeresetorposedgeclear reg out 0 aorb c a 边沿敏感事件的时序控制例 modulereg adder out a b clk inputclk input 2 0 a b output 3 0 out reg 3 0 out reg 3 0 sum always aorb 若a或b发生任何变化 执行 5sum a b always negedgeclk 在clk下降沿执行out sum endmodule 模块reg adder描述了什么电路 电平敏感事件的时序控制 事件控制 wait 变量或表达式事件 等待直到事件为真 1 执行后续语句 例 modulelatch adder out a b enable inputenable input 2 0 a b output 3 0 out reg 3 0 out always aorb beginwait enable 当enable为低电平时执行加法out a b endendmodule 综合工具还不支持wait语句 过程的时序控制例 modulewait test regclk waito edgeo initialbeginclk 0 edgeo 0 waito 0 end 信号赋初值0always 50clk clk 描述clkalways clk 10edgeo clk 描述edgeoalwayswait clk 10waito waito 描述waitoendmodule 仿真中行为描述例 在本例中发生下面顺序的事件 等待set 1 忽略时刻10的clk的posedge 等待下一个clk的posedge 它将在时刻30发生 等待3个时间单位 在时刻33 30 3 置q 1 等待10个时间单位 在时刻43 33 10 置q 0 等待在时刻48发生的set 0 等待在时刻70发生且与clk的上升沿同时发生的set 1 等待下一个上升沿 时刻70的边沿被忽略 因为到达该语句时时间已经过去了 如例子所示 clk 1 注 在实际硬件设计中 事件6应该被视为一个竞争 racecondition 在仿真过程中 值的确定倚赖于clk set产生顺序 所以是不可预测的 这是不推荐的建模类型 alwayswait set begin posedgeclk 3q 1 10q 0 wait set end 竞争 设计中行为描述例 RTL级设计中只使用边沿敏感事件的时序控制 moduledff q qb d clk outputq qb inputd clk regq qb always posedgeclk beginq d qb d endendmodule 简单D触发器 延迟赋值语句 只用于过程语句内 语法 执行过程 求表达式 定时控制 赋值举例 reg a 10reg b 延时10个单位后 执行赋值 q 2 a 求表达式子 延时2个单位后赋值 与assign语句延时不同 为传输延时 在延迟赋值语句中表达式的值都有一个隐含的临时存储 可以用来简单精确地模拟寄存器交换和移位 延迟赋值语句 在下面的每个例子中 a和b的值什么时候被采样 什么时候给a和b赋值 在左边的例子中 b的值被立即采样 时刻0 这个值在时刻5赋给a a的值在时刻5被采样 这个值在时刻10赋给b 注意 另一个过程块可能在时刻0到时刻5之间改变b的值 或在时刻5到时刻10之间改变a的值 在右边的例子中 b和a的值被立即采样 时刻0 保存的值在时刻5被赋值给他们各自的目标 这是一个安全传输 注意 另一个过程块可以在时刻0到时刻5之间改变a和b的值 命名事件 namedevent 在仿真行为代码中定义一个命名事件可以触发一个活动 命名事件不可综合 moduleadd mult out a b input 2 0 a b output 3 0 out reg 3 0 out defineevents eventadd mult always aorb if a b add triggerevent else mult triggerevent respondtoaneventtrigger always add out a b respondtoaneventtrigger always mult out a b endmodule 在例子中 事件add和mult不是端口 但定义为事件 它们没有对应的硬件实现 是一种数据类型 能在过程块中触发一个使能 在引用前必须声明 没有持续时间 也不具有任何值 只能在过程块中触发一个事件 操作符用来触发命名事件 a大于b 事件add被触发 控制传递到等待add的always块 如果a小于或等于b 事件mult被触发 控制被传送到等待mult的always块 顺序块中的非阻塞过程赋值 阻塞过程赋值执行完成后再执行在顺序块内下一条语句 非阻塞赋值不阻塞过程流 不受前面语句执行的影响 直接由块起始时刻开始执行 同一块中不能混用 和 若过程块中的所有赋值都是非阻塞的 赋值按两步进行 仿真器计算所有右端表达式的值 保存结果 在经过时序控制延迟后 仿真器将保存的值赋给左端变量 非阻塞过程赋值 modulenon block1 rega b c d e f initialbegin blockingassignmentsa 101 time10b 20 time12c 41 time16endinitialbegin non blockingassignmentsd 101 time10e 20 time2f 41 time4endinitialbegin monitor time a bb bc bd be bf b a b c d e f 100 finish endendmodule 输出结果 0a xb xc xd xe xf x2a xb xc xd xe 0f x4a xb xc xd xe 0f 110a 1b xc xd 1e 0f 112a 1b 0c xd 1e 0f 116a 1b 0c 1d 1e 0f 1 例1 阻塞与非阻塞赋值语句行为差别 非阻塞过程赋值 例2 阻塞与非阻塞赋值语句行为差别 modulepipeMult product mPlier mCand go clock inputgo clock input 7 0 mPlier mCand output 15 0 product reg 15 0 product always posedgego product repeat 4 posedgeclock mPlier mCand endmodule modulepipeMult product mPlier mCand go clock inputgo clock input 7 0 mPlier mCand output 15 0 product reg 15 0 product always posedgego product re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025企业合作合同正本
- 护理科研选题试题及答案
- 流域治水方案模板范本
- 2025年二级建造师考试模拟题及答案详解含矿业工程内容
- 2025年养老护理员初级营养膳食技能培训试题及答案解析
- 2025年中国大唐柬埔寨公司招聘笔试备考指南及模拟题答案
- 疫情经费补助方案范本
- 2025灯具购销合同样本
- 2025年:固定与无固定合同模式的探讨与应用
- 2025年大规模开源软件开发工程师认证考试题解
- 2023柔性棚洞防护结构技术规程
- 浙江工业大学学生综合测评分细则
- 英语初高中衔接音标
- 第十四章滚动轴承相关设计
- 第1章 数据与统计学-统计学
- GB/T 2059-2000铜及铜合金带材
- GB/T 14456.1-2017绿茶第1部分:基本要求
- 远离电子烟主题班会课件
- 设备维护保养手册
- ZYHZYHC系列自控远红外电焊条烘干炉使用说明书
- 外科学课件:泌尿、男生殖系统外科检查
评论
0/150
提交评论