硬件描算语言chapter4_第1页
硬件描算语言chapter4_第2页
硬件描算语言chapter4_第3页
硬件描算语言chapter4_第4页
硬件描算语言chapter4_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第第4章章 Verilog HDL行为级描述行为级描述 7/28/20211 Microelectronics School Xidian University 行为级描述行为级描述是HDL语言特有的一种对于电路的描述方式,通过对于电路行为的计算机程序 语言设计,综合工具可以生成相应的由基本单元构成的数字电路。 行为级描述更像是固定模板的代码对应某个特性电路的形式,设计者通过改变模板的参数 和内容从而实现电路的行为级描述,对于综合工具而言,生成的电路准确性也较高。 (1)Verilog HDL行为级建模设计1bits D触发器 module flipflop_d (data, clk, q);

2、 input data; input clk; output q; reg q; always(posedge clk) q=data; endmodule (2)Verilog HDL行为级建模设计8bits D触发器 module flipflop_d (data, clk, q); input 7:0data; input clk; output 7:0q; reg q; always(posedge clk) q=data; endmodule 7/28/20213 Microelectronics School Xidian University 例4-2:带同步清零置位的模为10的

3、加法计数器 module counter_10 (clk, clear, load, d, q7); input clk, clear, load; input 3:0 d; output 3:0 q7; reg 3:0 q7; always(posedge clk) begin if(! clear) q7 = 0; else if(! load) q7 = d; else if(q7 = 9); q7 = 0; else q7 = q7+1; end endmodule 7/28/20214 Microelectronics School Xidian University 7/28/20

4、215 Microelectronics School Xidian University 类别类别语句语句可综合性可综合性 过程语句过程语句initial always 语句块语句块串行语句块begin-end 并行语句块fork-join 赋值语句赋值语句连续赋值语句assign 过程赋值语句=、= 条件语句条件语句if-else case, casez, casex 循环语句循环语句 forever repeat while for 编译向导语句编译向导语句 define include ifdef,else,endif 4.1 过程语句过程语句 7/28/20216 Microelec

5、tronics School Xidian University 4.1.1 initial过程语句过程语句 initial begin 语句1; 语句2; 语句n; end 例4.1-1:Verilog HDL用initial语句给D触发器赋初值 module d_ff(in,clk,q); input in; input clk; output q; reg q; initial q = 0; always(posedge clk) q=in; endmodule 例4.1-2:Verilog HDL行为级描述异步清0、异步置1的D触发器 module DFF1( d, clk, set,

6、 rst, q); input d, clk, set, rst; output q; reg q; always (posedge clk or negedge set or negedge rst) begin if (!rst) q = 0; /异步清0,低电平有效 else if (!set) q = 1; /异步置1,低电平有效 else q = d; end endmodule 4.1.2 always过程语句和敏感事件表过程语句和敏感事件表 7/28/20217 Microelectronics School Xidian University always() 语句块; 敏感信

7、号可以分为两种类型:一种是电平敏感型,一种是边沿敏感型 (1)(a) (2)(posedge a) (3)(negedge a) 7/28/20218 Microelectronics School Xidian University 例4.1-3:利用敏感事件列表来对组合逻辑建模 module sel_adder_and_multiplier(y, a, b, sel); input a, b, sel; output y; wire 3:0 a,b; reg 7:0 y; always (a or b or sel) begin if (sel = 0) y = a+b; else y =

8、 a*b; end endmodule 7/28/20219 Microelectronics School Xidian University 例例4.1-4:3线线-8线译码器。线译码器。 module decoder(din, dout); input 2:0 din; input 7:0 dout; reg7:0 dout; always (din) begin case (din) 3b000:dout = 8b00000001; 3b001:dout = 8b00000010; 3b010:dout = 8b00000100; 3b011:dout = 8b00001000; 3b

9、100:dout = 8b00010000; 3b101:dout = 8b00100000; 3b110:dout = 8b01000000; 3b111:dout = 8b10000000; default:dout = 8b00000000; endcase end endmodule 4.1.3 过程语句使用中信号类型的定义过程语句使用中信号类型的定义 7/28/202110 Microelectronics School Xidian University 在信号的定义形式方面,无论是对时序逻辑电路还是对组合逻辑电路进行描述,Verilog HDL要求在过程语句(要求在过程语句(in

10、itial和和always)中,被赋值信号必须定义为)中,被赋值信号必须定义为“reg”类型。类型。 例例4.1-7:Verilog HDL用用always描述两输入异或门。描述两输入异或门。 module xor2(a, b, out); input a, b; output out; wire a, b; reg out; always ( a or b) out = ab; endmodule 4.1.4 awlays过程语句中敏感事件的形式过程语句中敏感事件的形式 7/28/202111 Microelectronics School Xidian University (1)采用过程

11、语句对组合电路进行描述时,需要把全部的输入信号列入敏感信号 列表,且敏感信号列表不允许存在边沿信号。 例4.1-8:Verilog HDL用always语句描述4选1数据选择器 module mux4_1(out,in0,in1,in2,in3,sel); input in0,in1,in2,in3; output out; input1:0sel; reg out; /被赋值信号定义为“reg”类型 always(in0 or in1 or in2 or in3 or sel) /敏感信号列表 case(sel) 2b00: out=in0; 2b01: out=in1; 2b10: out

12、=in2; 2b11: out=in3; default: out=2bxx; endcase endmodule 7/28/202112 Microelectronics School Xidian University 例4-2:带同步清零置位的模为10的加法计数器 module counter_10 (clk, clear, load, d, q7); input clk, clear, load; input 3:0 d; output 3:0 q7; reg 3:0 q7; always(posedge clk) begin if(! clear) q7 = 0; else if(!

13、 load) q7 = d; else if(q7 = 9); q7 = 0; else q7 = q7+1; end endmodule (2)采用过程语句对时序电路进行描述时,需要把时间信号和部分输入信号列入敏感信号 列表。 异步清零和同步置位的模为10的加法计数器 module counter_10 (clk, clear, load, d, q7); input clk, clear, load; input 3:0 d; output 3:0 q7; reg 3:0 q7; always(posedge clk or negedge clear ) begin if(! clear)

14、 q7 = 0; else if(! load) q7 = d; else if(q7 = 9); q7 = 0; else q7 = q7+1; end endmodule 4.2 语句块语句块 7/28/202113 Microelectronics School Xidian University 4.2.1 串行语句块串行语句块 begin:块名 块内声明语句; 语句1; 语句2; . . . 语句n; end 4.2.2 并行语句块并行语句块 fork:块名 块内声明语句; 语句1; 语句2; 语句n; join 4.3 过程赋值语句过程赋值语句 7/28/202114 Microe

15、lectronics School Xidian University 4.3.1 阻塞赋值语句阻塞赋值语句 变量 = 表达式; 阻塞赋值语句的特点: (1)在串行语句块中,各条阻塞赋值语句将按照 排列顺序依次执行;在并行语句块中的各条阻塞 赋值语句则同时执行,没有先后之分。 (2)执行阻塞赋值语句的顺序是,先计算等号右 端表达式的值,然后立刻将计算的值赋给左边的 变量,与仿真时间无关。 4.3.2 非阻塞赋值语句非阻塞赋值语句 变量 = 表达式; 非阻塞赋值语句的特点: (1)在串行语句块中,各条非阻塞语句的执行没 有先后之分,排在前面的语句不会影响到后面语 句的执行,各条语句并行执行。 (

16、2)执行非阻塞赋值语句的顺序是,先计算右端 表达式的值,然后等待延迟时间的结束,再将计 算的值赋给左边的变量。 7/28/202115 Microelectronics School Xidian University 例例4.3-1:阻塞赋值语句例:阻塞赋值语句例 程序(1) module DFF_C1(clk,q,in_1); inputclk,in_1; outputq; reg q; reg temp; always(posedge clk) begin temp=in_1; q=temp; end endmodule 程序(2) module DFF_C2(clk,q,in_1);

17、inputclk,in_1; outputq; reg q; always(posedge clk)q=in_1; endmodule 7/28/202116 Microelectronics School Xidian University 例4.3-2:非阻塞赋值语句例程 module DFF_C3(clk,q,in_1); input clk,in_1; output q; reg q; reg temp; always(posedge clk) begin temp=in_1; q=temp; end endmodule 7/28/2021 例4.3-3:阻塞赋值语句和非阻塞赋值语句对

18、比例程 (1)阻塞赋值语句 module block(a, b, c, clk, sel, out); input a, b, c, clk, sel; output out; reg out, temp; always (posedge clk) begin temp = a if (sel) out = temp|c; else out = c; end endmodule (2)非阻塞赋值语句 module non_block(a, b, c, clk, sel, out); input a, b, c, clk, sel; output out; reg out, temp; alwa

19、ys (posedge clk) begin temp = a if (sel) out = temp|c; else out = c; end endmodule 4.4 条件分支语句条件分支语句 7/28/2021 4.4.1 if条件分支语句条件分支语句 形式1:if(条件表达式)语句块; 形式2: if(条件表达式) 语句块1; else 语句块2; 形式3: if(条件表达式1) 语句块1; else if 语句块2; . . . else if(条件表达式i) 语句块i; else 语句块n; 7/28/202119 Microelectronics School Xidian U

20、niversity 例4.4-1:if-else使用例程(1) module mux2_1(a,b,sel,out); input a,b,sel; output out; reg out; always(a,b,sel) begin if(sel) out=a; else out=b; end endmodule 4.4.2 case条件分支语句条件分支语句 7/28/202120 Microelectronics School Xidian University case(控制表达式) 值1: 语句块1; 值2: 语句块2; . . . 值n: 语句块n; default: 语句块n+1;

21、 endcase 表表4.4-1 case分支语句的真值表分支语句的真值表 case01xz 01000 10100 x0010 z0001 module non_latch_case(a,b,sel,out); input a,b; input 1:0sel; output out; reg out; always(a,b,sel) case(sel) 2b00:out=a; 2b01:out=a; 2b10:out=b; 2b11:out=b; default:out=0; endcase endmodule module non_latch_case(a,b,sel,out); inpu

22、t a,b; input 1:0sel; output out; reg out; always(a,b,sel) case(sel) 2b00: 2b01:out=a; 2b10: 2b11:out=b; default:out=0; endcase endmodule 7/28/202121 Microelectronics School Xidian University 例例4.4-5:用:用case语句描述语句描述BCD数码管译码数码管译码 module BCD_decoder(in, out); input 3:0 in; output 6:0 out; reg 6:0 out;

23、always (in) begin case(in) 4d0: out = 7b1111110; 4d1: out = 7b0110000; 4d2: out = 7b1101101; 4d3: out = 7b1111001; 4d4: out = 7b0110011; 4d5: out = 7b1011011; 4d6: out = 7b1011111; 4d7: out = 7b1110000; 4d8: out = 7b1111111; 4d9: out = 7b1111011; default: out = 7bxxxxxxx; endcase end endmodule 7/28/

24、202122 Microelectronics School Xidian University 例4.4-9:case语句语句中default (1)会产生锁存器的case语句 module latch_case(a,b,sel,out); input a,b; input 1:0sel; output out; reg out; always(a,b,sel) case(sel) 2b00:out=a; 2b11:out=b; endcase endmodule (2)不会产生锁存器的case语句 module non_latch_case1(a,b,sel,out); input a,b; input 1:0sel; output out; reg out; always(a,b,sel) case(sel) 2b00:out=a; 2b11:out=b; default:out=0; endcase endmodule casex和casez 7/28/202123 Microelectronics School Xidian University 表4.4-2(a) case

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论