2 Verilog语言快速入门强烈推荐.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(6) 缩减运算符 缩减与 ~ 缩减与非 | 缩减或 ~| 缩减或非 ^ 缩减异或 ~^ ^~ 缩减同或 例: Y= 4’b1001 ; Y= ~ 4’b1001; 结果为0 结果为1 说明 缩减运算的操作数是1位或多位二进制数; 缩减运算的操作数只有一个,将该数的各位自左至右进行逻辑运算,结果只有一位。 ︵。︵ * (7) 移位运算符 右移 左移 算术右移 算术左移 例: Y= 4’b1001 1; Y= 4’sb1001 1; 结果为0100 结果为1100 说明 移位运算的操作数是1位或多位二进制数; 向左或向右移n位; 只有对有符号数的算术右移自动补符号位; 其他移位均自动补0。 操作数 移位符 n; 格式 ︵。︵ * (8) 拼接复制运算符 {} 拼接 {{}} 复制拼接 例: Y= {4’b1001, 2’b11}; Y= {4{2’b01}}; Y= {{4{2’b01}}, 2’b11}; 结果为100111 结果说明 将多个操作数拼接起来; 将操作数复制n遍并拼接起来; 可以组合使用。 {操作数1, 操作数2, …} 格式 {n{操作数1, 操作数2, …}} 格式 ︵。︵ * (9) 条件运算符 ? : 用于条件赋值 例: Y= a ? b : c; Y= s1 ? (s0 ? d3 : d2) : (s0? d1 : d0); 如果a=1,则y=b; 如果a=0,则y=c。 如果a=x,则y=x。 说明 根据表达式1的值,决定运算结果; 如果表达式1值为1,则结果等于表达式2; 如果表达式1值为0,则结果等于表达式3; 如果表达式1值为x,则结果为x; 可以嵌套。 表达式1 ? 表达式2 : 表达式3 格式一 ︵。︵ * * 3. always语句块 内部信号 声明 assign语句 底层模块或门原语调用 always 语句块 module 模块名 ([端口列表]); [端口信号声明;] endmodule always语句块又称过程块 基本格式: always @(敏感信号条件表) 各类顺序语句; 特点: always语句本身不是单一的有意义的一条语句,而是和下面的语句一起构成一个语句块,称之为过程块;过程块中的赋值语句称过程赋值语句; 该语句块不是总处于激活状态,当满足激活条件时才能被执行,否则被挂起,挂起时即使操作数有变化,也不执行赋值,赋值目标值保持不变; 赋值目标必须是reg型的。 例: always @ (posedge CLK) Q=D; ︵。︵ 3. always语句块 激活条件由敏感信号条件表决定,当敏感条件满足时,过程块被激活。 敏感条件有两种,一种是边沿敏感,一种是电平敏感。 ︵。︵ * 电平敏感: (posedge 信号名) 边沿敏感: (negedge 信号名) (信号名列表) 信号上升沿到来 信号下降沿到来 例: (posedge clk) 例: (negedge clk) 信号列表中的任一个信号有变化 例: (a,b,c) 当a,b,c中有一个发生变化 说明: 逗号可以换成or 例: (a or b or c) 3. always语句块 ︵。︵ * 例: always @ (posedge CLK) Q=D; 当CLK上升沿到来时,激活该语句块,将D的值赋给Q; 否则,该语句块挂起,即使D有变化,Q的值也保持不变,直到下一次赋值。 例: always @ (D) Q=D; 当D有变化时(不管是由1变0还是由0变1),激活该语句块,将D的值赋给Q; 否则,该语句块挂起,Q的值保持不变,直到下一次赋值。 D Q D CLK Q D Q 3. always语句块 ︵。︵ * 说明: 过程块中的赋值目标必须是reg型的。 由于always语句可以描述边沿变化,在设计时序电路中得到广泛应用。 always语句中还可以使用if、case、for循环等语句,其功能更加强大。 例: always @ (posedge CLK) Q=D; 例: always @ (D) Q=D; 必须是reg型的 3. always语句块 ︵。︵ * * 3. always语句块 assign语句和always语句的主要区别: 连续赋值语句总是处于激活状态,只要操作数有变化马上进行计算和赋值; 过程赋值语句只有当激活该过程时,才会进行计算和赋值,如果该过程不被激活,即使操作数发生变化也不会计算和赋值。 verilog规定assign中的赋值目标必须是wire型的,而always语句中的赋值目标必须是reg型的。 assign Q=D always @ (posedge clk)

您可能关注的文档

文档评论(0)

liuxiaoyu98 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档