Verilog硬件描述语言二三目运算符

上传人:公**** 文档编号:592175646 上传时间:2024-09-19 格式:PPT 页数:64 大小:1.16MB
返回 下载 相关 举报
Verilog硬件描述语言二三目运算符_第1页
第1页 / 共64页
Verilog硬件描述语言二三目运算符_第2页
第2页 / 共64页
Verilog硬件描述语言二三目运算符_第3页
第3页 / 共64页
Verilog硬件描述语言二三目运算符_第4页
第4页 / 共64页
Verilog硬件描述语言二三目运算符_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《Verilog硬件描述语言二三目运算符》由会员分享,可在线阅读,更多相关《Verilog硬件描述语言二三目运算符(64页珍藏版)》请在金锄头文库上搜索。

1、Verilog硬件描述语言硬件描述语言(二)(二)2 2 2 2课程内容课程内容一、一、Verilog HDL 运算符运算符二、二、Verilog HDL 语句语句三、三、可综合设计可综合设计l 按功能分:按功能分:算术运算符、逻辑运算符、关系运算符、缩算术运算符、逻辑运算符、关系运算符、缩减运算符、条件运算符、位运算符、移位运减运算符、条件运算符、位运算符、移位运算符、拼接运算符等类。算符、拼接运算符等类。l 按操作数的个数分:按操作数的个数分: 单目运算符、双目运算符、三目运算符。单目运算符、双目运算符、三目运算符。算术运算符算术运算符 (Arithmetic operator) + +

2、加加 - - 减减 * * 乘乘 / / 除除 % % 求模求模逻辑运算符逻辑运算符(Logical operator) & 逻辑与逻辑与 | 逻辑或逻辑或 ! 逻辑非逻辑非 A B A&BA|B!A !B1 1110 010010 10 1011 00 0001 1位运算符位运算符(Bitwise operator) 按位取反按位取反 & 按位与按位与 | 按位或按位或 按位异或按位异或 , 按位同或按位同或 &0 1 x00 0 010 1 xx0 x x按位与真值表按位与真值表|0 1 x00 1 x11 1 1xx 1 x按位或真值表按位或真值表0 1 x00 1 x11 0 xxx

3、x x按位异或真值表按位异或真值表关系运算符关系运算符 (Relational operator) 小于小于 = 大于大于 = = 大于或等于大于或等于注意:注意: “=nAn或或An;A 右移右移 左移左移条件运算符条件运算符 (Conditional operator)这是一个三目运算符,对这是一个三目运算符,对3 3个操作数进行运算。个操作数进行运算。用法:用法: signal=condition?true_expression:flase_expression; 即:信号即:信号= =条件?表达式条件?表达式1 1:表达式:表达式2 2; 条件成立时,信号取表达式条件成立时,信号取表达

4、式1 1的值,反之取的值,反之取2 2。 ?举例:举例:0 01 1selsel in0in0in1 in1 out out 位接运算符位接运算符 用法:用法: 信号信号1 1的某几位的某几位, ,信号信号2 2的某几位的某几位, , ,信号信号n n的某几位的某几位 举例:举例:assign cout,sum=a+b+cin;运算符运算符优先级优先级! 高优先级高优先级低优先级低优先级* / %+ - = != = !=& & | &|? :分类分类类类 别别语语 句句可综合性可综合性过程语句过程语句always initial块语句块语句串行块串行块begin-end并行块并行块fork-

5、join赋值语句赋值语句持续赋值持续赋值assign过程赋值过程赋值=、=条件语句条件语句if-elsecase循环语句循环语句forrepeatwhileforever编译向导编译向导defineincludeifdef,else,endif过程语句:过程语句:alwaysalways ()begin/过程赋值过程赋值/if-else,case选择语句选择语句end敏感信号类型:敏感信号类型:(a)(a or b)(posedge clock)(negedge clock)(posedge clk or negedge reset)举例:举例:DFFmodule DFF (d , clk,

6、reset, q, qb ); output q, qb; input clk, reset,d; reg q, qb; always (posedge clk) begin if (!reset) begin q =0; qb=1; end else begin q =d; qb=d; end endendmodule特点:特点:l 只有两种状态:执行状态和等待状态只有两种状态:执行状态和等待状态l 一般由敏感信号的变化来启动一般由敏感信号的变化来启动l 各个各个always间通过信号线进行通信间通过信号线进行通信l 一个一个always中只允许描述对应于一个时中只允许描述对应于一个时钟信号

7、的同步时序逻辑钟信号的同步时序逻辑l always之间是并发执行的之间是并发执行的块语句:块语句:begin end l 总是在总是在always内部内部l 按顺序执行按顺序执行举例:举例:reg qa,qb,qc;always (posedge clk) begin qa =d; qb =qa; qc =qb; end赋值语句:赋值语句:l持续赋值语句持续赋值语句l过程赋值语句过程赋值语句持续赋值语句:持续赋值语句:assign c=a&b;过程赋值语句:过程赋值语句:l 非阻塞赋值非阻塞赋值 “ = ”l 阻塞赋值阻塞赋值 “ = ” l 分为两步骤:右式计算、左式更新分为两步骤:右式计算

8、、左式更新非阻塞赋值非阻塞赋值:l当前语句的执行不会阻塞下一语句的执行当前语句的执行不会阻塞下一语句的执行l语句之间并发执行语句之间并发执行l左式更新在块结束后才进行左式更新在块结束后才进行阻塞赋值阻塞赋值:l当前语句的执行会阻塞下一语句的执行当前语句的执行会阻塞下一语句的执行l语句之间顺序执行语句之间顺序执行l右式计算和左式更新同时进行右式计算和左式更新同时进行举例举例:module nonblocking(clk,reset,a,b);input clk,reset; input 3:0a;output 3:0b; reg 3:0b;reg 3:0y;always (posedge clk

9、 or negedge reset) begin if(!reset)begin y=0; b=0;end elsebegin y=a; b=y; end endendmodule结果结果:举例举例:module nonblocking(clk,reset,a,b);input clk,reset; input 3:0a;output 3:0b; reg 3:0b;reg 3:0y;always (posedge clk or negedge reset) begin if(!reset)begin y=0; b=0;end elsebegin b=y; y=a; end endendmodu

10、le结果结果:举例举例:module blocking(clk,reset,a,b);input clk,reset; input 3:0a;output 3:0b; reg 3:0b;reg 3:0y;always (posedge clk or negedge reset) begin if(!reset)begin y=0; b=0;end elsebegin y=a; b=y; end endendmodule结果结果:举例举例:module blocking(clk,reset,a,b);input clk,reset; input 3:0a;output 3:0b; reg 3:0

11、b;reg 3:0y;always (posedge clk or negedge reset) begin if(!reset)begin y=0; b=0;end elsebegin b=y; y=a; end endendmodule结果结果:举例举例:module nonblocking(clk,reset,a,b);input clk,reset; input 3:0a;output 3:0b; reg 3:0b;reg 3:0y;always (posedge clk or negedge reset) begin if(!reset)begin y=0; b=0;end else

12、begin y=a; b=y; end endendmodule结果结果:举例举例:module nonblocking(clk,reset,a,b);input clk,reset; input 3:0a;output 3:0b; reg 3:0b;reg 3:0y;always (posedge clk or negedge reset) begin if(!reset)begin y=0; b=0;end elsebegin y=a; b=y; end endendmodule结果结果:阻塞非阻塞使用原则:阻塞非阻塞使用原则:l有有clock的的always进程要使用进程要使用non-b

13、lockingalways(posedge clk or negedge reset_n) begin if (!reset_n) counter = 8b00; else counter = counter + 1;endalways(sel or a or b) begin case (sel) 2b00 : c = a; 2b01 : c = b; endcaseendl 无无clock的的always进程使用进程使用blockingl continuous assignment使用使用blockingl 一个一个always进程中不要同时使用进程中不要同时使用blocking与与non

14、-blockingassign y = a&b;l 书书P286页图页图8-10错误错误l参考参考MIT课件课件说明:说明:条件语句:条件语句:l if elsel case endcaseif else:l if (表达式表达式) 语句语句1;l if (表达式表达式) 语句语句1; else 语句语句2;l if (表达式表达式1) 语句语句1; else if (表达式表达式2) 语句语句2; else if (表达式表达式3) 语句语句3; else if (表达式表达式n) 语句语句n; else 语句语句n+1;特点特点:l 不不完整的完整的if else容易导致产生容易导致产生l

15、atchl 总是在总是在always内部按顺序执行内部按顺序执行Latch与与DFF比较比较:l latch由电平触发,由电平触发,DFF由时钟沿触发由时钟沿触发l latch容易产生毛刺(容易产生毛刺(glitch),DFF则不则不易产生毛刺易产生毛刺l latch消耗的门资源比消耗的门资源比DFF要少,但耗费要少,但耗费的的LE资源要多资源要多l latch将静态时序分析变得极为复杂将静态时序分析变得极为复杂case endcase:case (敏感表达式敏感表达式) 值值1: 语句语句1; 值值2: 语句语句2; 值值n: 语句语句n; default: 语句语句n+1;endcase特

16、点特点:l 不不完整的完整的case endcase容易导致产生容易导致产生latchl 总是在总是在always内部根据敏感量执行内部根据敏感量执行比较比较:l if else带有优先级带有优先级l case endcase延时小延时小举例举例:四位选择器:四位选择器always(sel) beginif (sel=2b00) out=in0;else if (sel=2b01) out=in1;else if (sel=2b10) out=in2;else out=in3; endalways(sel) begin case (sel)2b00: out=in0;2b01: out=in1

17、;2b10 : out=in2;default: out=in3; end举例举例:七段数码管显示译码器七段数码管显示译码器module decode4_7(decodeout,indec);output6:0 decodeout;input3:0 indec;reg6:0 decodeout;always (indec) begin case(indec) 4d0: decodeout=7b1111110; 4d1: decodeout=7b0110000; 4d2: decodeout=7b1101101; 4d3: decodeout=7b1111001; 4d4: decodeout=

18、7b0110011; 4d5: decodeout=7b1011011; 4d6: decodeout=7b1011111; 4d7: decodeout=7b1110000; 4d8: decodeout=7b1111111; 4d9: decodeout=7b1111011; default: decodeout=7b1111111; endcase endendmodule要点要点:l 不使用初始化语句,不使用任务和函数不使用初始化语句,不使用任务和函数l 不使用带有延时的描述不使用带有延时的描述l 不使用不使用for循环循环l 在在always里面慎用乘法和除法里面慎用乘法和除法举例举

19、例:module test_13(clk,rst_n,data,num);input clk,rst_n; input 12:0data;output 3:0num;reg 3:0i; reg 3:0num;always(posedge clk)begin if(!rst_n) num=0; else beginfor(i=0;i13;i=i+1) if(datai) num=num+1; endendendmodule结果结果:举例举例:module multip(clk,rst_n,a,b,num);input clk,rst_n;input 7:0a;input 7:0b;output 15:0num;reg 15:0num;always(posedge clk) begin if(!rst_n) num=0; else num=a*b; endendmodule结果结果:举例举例:module div(clk,rst_n,a,b,num);input clk,rst_n;input 7:0a;input 7:0b;output 7:0num;reg 7:0num;always(posedge clk) begin if(!rst_n) num=0; else num=a/b; endendmodule结果结果:竞竞赛赛实实验验板板说说明明:结构示意图结构示意图:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号