基于FPGA的数字系统设计_第五章_第1页
基于FPGA的数字系统设计_第五章_第2页
基于FPGA的数字系统设计_第五章_第3页
基于FPGA的数字系统设计_第五章_第4页
基于FPGA的数字系统设计_第五章_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

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

文档简介

1、1第第5章章 用组合与时序逻辑的行用组合与时序逻辑的行 为级模型进行逻辑设计为级模型进行逻辑设计 基于布尔方程的基于布尔方程的Verilog模型;模型; 用于组合与时序逻辑的更一般、更抽象的建模方式;用于组合与时序逻辑的更一般、更抽象的建模方式; 用算法状态机(用算法状态机(ASM)图及算法状态机和数据通道)图及算法状态机和数据通道(ASMD)图设计由数据通道和控制单元构成的更一)图设计由数据通道和控制单元构成的更一 般的时序机;般的时序机; 亚稳态的处理。亚稳态的处理。主要内容主要内容:25.1 行为建模行为建模行为建模的特点:行为建模的特点:(1)行为建模是工业界主流的描述方式,是大型芯)

2、行为建模是工业界主流的描述方式,是大型芯 片设计的必要描述手段。片设计的必要描述手段。(2)描述设计的功能特性,忽略其硬件实现细节。)描述设计的功能特性,忽略其硬件实现细节。(3)设计者的注意力集中在电路的功能特性上,而)设计者的注意力集中在电路的功能特性上,而 不是硬件的实现细节,为实际电路结构的选择不是硬件的实现细节,为实际电路结构的选择 提供了较大的自由度。提供了较大的自由度。(4)传播延时不包含在电路的行为级模型中。)传播延时不包含在电路的行为级模型中。3行为建模鼓励设计者:行为建模鼓励设计者:(1)快速创建一个设计的行为级原型;)快速创建一个设计的行为级原型;(2)验证该原型的功能特

3、性;)验证该原型的功能特性;(3)用综合工具将设计优化并映射到所选)用综合工具将设计优化并映射到所选 择的物理工艺,使其满足定时和择的物理工艺,使其满足定时和/或面或面 积的约束条件。积的约束条件。45.2 行为级建模的数据类型行为级建模的数据类型两大类数据类型:两大类数据类型: 线网型(线网型(nets):起到电路中导线的起到电路中导线的作用,即物理连接。如作用,即物理连接。如wire 寄存器型(寄存器型(registers/variables):在程序运行过程中存储信息,代表抽象的在程序运行过程中存储信息,代表抽象的存储元件。如存储元件。如reg、integer5线网型(线网型(Nets)

4、Nets需要被持续的驱动,驱动它的可以是门和模块。需要被持续的驱动,驱动它的可以是门和模块。 当当Nets驱动器的值发生变化时,驱动器的值发生变化时, Verilog自动自动的将新值传送到的将新值传送到Nets上。上。6n 有多种有多种net类型用于设计类型用于设计(design-specific)建模建模 和工艺和工艺(technology-specific)建模建模n没有声明的没有声明的net的缺省类型为的缺省类型为 1 位位(标量标量)wire类型。类型。net类型类型功功 能能wire, trisupply1, supply0wor, triorwand, triandtriregtr

5、i1, tri0标准内部连接线标准内部连接线(缺省缺省)电源和地电源和地多驱动源线或多驱动源线或多驱动源线与多驱动源线与能保存电荷的能保存电荷的net无驱动时上拉无驱动时上拉/下拉下拉综合编译综合编译器不支持器不支持的的net类型类型线网型(线网型(Nets)7Nets类在发生逻辑冲突时的决断类在发生逻辑冲突时的决断n Verilog有预定义的决断函数有预定义的决断函数n支持与工艺无关的逻辑冲突决断支持与工艺无关的逻辑冲突决断nwire-and用于集电极开路电路用于集电极开路电路nwire-or用于射极耦合电路用于射极耦合电路8寄存器型(寄存器型(Registers)n寄存器类型在赋新值以前保

6、持原值寄存器类型在赋新值以前保持原值n寄存器类型大量应用于行为模型描述及激励描述。在寄存器类型大量应用于行为模型描述及激励描述。在下面的例子中,下面的例子中,reg_a、reg_b、reg_sel用于施加激用于施加激励给励给2:1多路器。多路器。n用行为描述结构给寄存器类型赋值。给用行为描述结构给寄存器类型赋值。给reg类型赋值是类型赋值是在过程块中。在过程块中。9寄存器类有四种数据类型寄存器类有四种数据类型寄存器类型寄存器类型 功能功能 reg 可定义的可定义的无符号整数无符号整数变量,可以是标量变量,可以是标量(1位位) 或或 矢量,是最常用的寄存器类型矢量,是最常用的寄存器类型 inte

7、ger 32位有符号整数变量,算术操作产生二进制补码位有符号整数变量,算术操作产生二进制补码 形式的结果。通常用作不会由硬件实现的的数据形式的结果。通常用作不会由硬件实现的的数据 处理。处理。real 双精度的带符号浮点变量,用法与双精度的带符号浮点变量,用法与integer相同。相同。time 64位无符号整数变量,仿真时间的保存与处理。位无符号整数变量,仿真时间的保存与处理。realtime 与与real内容一致,但可以用作实数仿真时间的保内容一致,但可以用作实数仿真时间的保 存与处理。存与处理。不要混淆寄存器数据类型与存储元件(如不要混淆寄存器数据类型与存储元件(如DFF)10Nets和

8、和Registers声明语法声明语法nnet声明声明 range delay , net_name;net_type: net类型类型range: 矢量范围,矢量范围,MSB:LSB格式格式delay: 定义与定义与net相关的延时相关的延时net_name: net名称,一次可定义多个名称,一次可定义多个net, 用逗号分开。用逗号分开。n寄存器声明寄存器声明 range , reg_name;reg_type:寄存器类型:寄存器类型range: 矢量范围,矢量范围,MSB:LSB格式,只对格式,只对reg类型有效类型有效reg_name :寄存器名称,一次可定义多个寄存器,用逗号分开:寄存

9、器名称,一次可定义多个寄存器,用逗号分开11n举例:举例:reg a; /一个标量寄存器一个标量寄存器wand w; / 一个标量一个标量wand类型类型netreg 3: 0 v; / 从从MSB到到LSB的的4位寄存器向位寄存器向量量reg 7: 0 m, n; / 两个两个8位寄存器位寄存器tri 15: 0 busa; / 16位三态总线位三态总线wire 0: 31 w1, w2; / 两个两个32位位wire, MSB为为wire0Nets和和Registers声明语法声明语法12 信号可以分为端口信号和内部信号。出现在端口列表信号可以分为端口信号和内部信号。出现在端口列表中的信号

10、是端口信号,其它的信号为内部信号。中的信号是端口信号,其它的信号为内部信号。 对于端口信号,输入端口只能是对于端口信号,输入端口只能是net类型。输出端口可类型。输出端口可以是以是net类型,也可以是类型,也可以是register类型。若输出端口在过类型。若输出端口在过程块中赋值则为程块中赋值则为register类型;若在过程块外赋值类型;若在过程块外赋值(包括包括实例化语句),则为实例化语句),则为net类型。类型。 内部信号类型与输出端口相同,可以是内部信号类型与输出端口相同,可以是net或或register类类型。判断方法也与输出端口相同。若在过程块中赋值,型。判断方法也与输出端口相同。

11、若在过程块中赋值,则为则为register类型;若在过程块外赋值,则为类型;若在过程块外赋值,则为net类型。类型。信号类型的确定信号类型的确定13参数(参数(parameters)n用参数声明一个可变常量,常用于定义延时及宽度变量。用参数声明一个可变常量,常用于定义延时及宽度变量。n参数定义的语法:参数定义的语法:parameter ;n可一次定义多个参数,用逗号隔开。可一次定义多个参数,用逗号隔开。n在使用文字在使用文字(literal)的地方都可以使用参数。的地方都可以使用参数。n参数的定义是局部的,只在当前模块中有效。参数的定义是局部的,只在当前模块中有效。n参数定义可使用以前定义的整

12、数和实数参数。参数定义可使用以前定义的整数和实数参数。module mod1( out, in1, in2); . . .parameter cycle = 20, prop_ del = 3, setup = cycle/2 - prop_del, p1 = 8, x_ word = 16bx, file = / usr1/ jdough/ design/ mem_ file. dat; . . . wire p1: 0 w1; / A wire declaration using parameter . . .endmodule145.3 基于布尔方程的组合逻辑基于布尔方程的组合逻辑 行为

13、级建模行为级建模 布尔方程通过变量操作的表达式来描述组布尔方程通过变量操作的表达式来描述组合逻辑电路,其合逻辑电路,其Verilog中的对应形式是连续中的对应形式是连续赋值语句。赋值语句。 连续赋值语句描述隐含的组合逻辑。连续赋值语句描述隐含的组合逻辑。 连续赋值语句比原理图和原语网表更紧凑、连续赋值语句比原理图和原语网表更紧凑、更容易理解。更容易理解。15两种赋值类型:两种赋值类型:连续赋值连续赋值:对线网类(:对线网类(nets)赋值。)赋值。过程赋值过程赋值:对寄存器类(:对寄存器类(registers)赋值。)赋值。格式:格式: =简化为:简化为:LHS=RHS16连续赋值连续赋值 连

14、续赋值语句右边任何信号的变化,均会连续赋值语句右边任何信号的变化,均会引起表达式的计算,并更新左边的目标值。引起表达式的计算,并更新左边的目标值。 连续赋值的右边包括:连续赋值的右边包括: 表达式:表达式: assign and_out=a & b; 值:值: assign c=1; 其它线网信号:其它线网信号: assign d=e;17连续赋值分为显式赋值和隐式赋值:连续赋值分为显式赋值和隐式赋值: 例例5.2 三态输出的三态输出的5输入与或非门电路输入与或非门电路 module AOI_5_CA1( input x_in1, x_in2, x_in3, x_in4, x_in5, ena

15、ble, output y_out ); assign y_out = enable ? !(x_in1 & x_in2) | (x_in3 & x_in4 & x_in5) : 1bz; endmodule18连续赋值分为显式赋值和隐式赋值:连续赋值分为显式赋值和隐式赋值: 例例5.3 三态输出的三态输出的5输入与或非门电路输入与或非门电路 module AOI_5_CA2( input x_in1, x_in2, x_in3, x_in4, x_in5, enable, output y_out ); wire y_out = enable ? !(x_in1 & x_in2) | (x_

16、in3 & x_in4 & x_in5) : 1bz; endmodule195.4 传播延时与连续赋值传播延时与连续赋值 连续赋值可包含传播(惯性)延时。连续赋值可包含传播(惯性)延时。例例5.5 含单位延时的与或非门电路含单位延时的与或非门电路 module AOI_5_CA3( output y_out, input x_in1, x_in2, x_in3, x_in4); wire #1 y1 = x_in1 & x_in2; wire #1 y2 = x_in3 & x_in4; wire #1 y_out = !(y1 | y2); endmodule20三种组合电路描述的对应关系

17、三种组合电路描述的对应关系电平敏感行为描述:输入变化立即更新输出电平敏感行为描述:输入变化立即更新输出215.5 Verilog中的锁存器和中的锁存器和 电平敏感电路电平敏感电路锁存器的产生:锁存器的产生: 如果如果RHS表达式中的变量也是赋值的目标表达式中的变量也是赋值的目标量,则连续赋值语句产生隐含的反馈。量,则连续赋值语句产生隐含的反馈。 典型如交叉耦合与非门对:典型如交叉耦合与非门对: assign q = (set & qbar); assign qbar = (rst & q); 综合工具不支持此种结构。综合工具不支持此种结构。22 综合工具支持右边使用条件操作符的隐含反综合工具支

18、持右边使用条件操作符的隐含反馈的连续赋值语句。馈的连续赋值语句。例例5.7 透明锁存器透明锁存器 module Latch_CA( output q_out, input data_in, enable ); assign q_out=enable ? data_in : q_out; endmodule23Latch_CA仿真结果:仿真结果:24例例5.8 嵌套条件操作符描述含复位端的嵌套条件操作符描述含复位端的 透明锁存器透明锁存器 module Latch_Rbar_CA( output q_out; input data_in, enable, reset ); assign q_ou

19、t=!reset ? 0 : enable ? data_in : q_out; endmodule25Latch_Rbar_CA仿真结果:仿真结果:26连续赋值的特点:连续赋值的特点:(1)对于简单的布尔表达式、三态行为、透)对于简单的布尔表达式、三态行为、透 明锁存器的建模很方便。明锁存器的建模很方便。(2)对于大的复杂的布尔表达式建模容易产)对于大的复杂的布尔表达式建模容易产 生错误。生错误。(3)复杂的布尔表达式不能清楚地显示逻辑)复杂的布尔表达式不能清楚地显示逻辑 功能。功能。(4)应采用更简单的,更易理解的方式对电)应采用更简单的,更易理解的方式对电 平敏感和边缘敏感行为建模。平敏

20、感和边缘敏感行为建模。275.6 触发器和锁存器的触发器和锁存器的 周期性行为建模周期性行为建模 很多数字系统由时钟边沿周期性地触发。很多数字系统由时钟边沿周期性地触发。但不能由连续赋值语句描述。但不能由连续赋值语句描述。 Verilog使用过程语句为周期行为建模。使用过程语句为周期行为建模。 周期行为可用于模拟(和综合)电平敏感周期行为可用于模拟(和综合)电平敏感和边沿敏感(同步)行为。和边沿敏感(同步)行为。 过程语句包括两种:过程语句包括两种:28 仿真开始(时间仿真开始(时间0)时运行,当控制条件达到时运行,当控制条件达到end时停止。时停止。适合产生激励信号。适合产生激励信号。 仿真

21、开始(时间仿真开始(时间0)时运行,当控制条件达到时运行,当控制条件达到end时重新启动。时重新启动。适合建模和描述硬件。适合建模和描述硬件。 initial与与always过程语句过程语句29过程语句是行为模型的基础。过程语句是行为模型的基础。过程语句中有下列部件过程语句中有下列部件n过程赋值语句过程赋值语句 描述过程块中的数据流描述过程块中的数据流n高级结构(循环,条件语句)高级结构(循环,条件语句) 描述块的功能描述块的功能n时序控制时序控制 控制块的执行及块中的语句。控制块的执行及块中的语句。 initial与与always过程语句过程语句30过程赋值过程赋值n过程赋值过程赋值:在过程

22、块中的赋值。:在过程块中的赋值。n在过程赋值语句中表达式在过程赋值语句中表达式左边左边的信号必须是的信号必须是寄存器类型寄存器类型。n在过程赋值语句等式在过程赋值语句等式右边右边可以是任何有效的表达式,可以是任何有效的表达式,数据数据类型没有限制类型没有限制。module adder ( input a, b, cin; output 1:0 out); wire a, b, cin; reg half_sum; reg 1: 0 out; always ( a or b or cin) begin half_sum = a b cin ; / OK half_carry = a & b |

23、a & !b & cin | !a & b & cin ; / ERROR! out = half_carry, half_ sum ; endendmodulehalf_carryhalf_carry没有声明没有声明31过程时序控制过程时序控制过程时序控制有三类:过程时序控制有三类:n简单延时简单延时(#delay):延迟指定时间步后执行:延迟指定时间步后执行n边沿敏感边沿敏感的时序控制:的时序控制:()n在信号发生翻转后执行。在信号发生翻转后执行。n可以说明信号有效沿是上升沿可以说明信号有效沿是上升沿(posedge)还是下还是下降沿降沿(negedge)。n可以用关键字可以用关键字or

24、指定多个参数。指定多个参数。n电平敏感电平敏感的时序控制:的时序控制:wait()n直至直至expr值为真时(非零)才执行。值为真时(非零)才执行。n若若expr已经为真则立即执行。已经为真则立即执行。32module wait_test; reg clk, waito, edgeo; initial begin clk = 0;edgeo=0;waito=0;end always #50 clk = clk; always (clk) #10 edgeo = edgeo; always wait(clk) #10 waito = waito;endmodule33简单触发器与锁存器比较简单触

25、发器与锁存器比较: module df_behav (output reg q, input data, clk); always (posedge clk) q=data; endmodule module tr_latch (output reg q, input data, enable); always (enable, data); if(enable=1b1) q=data; endmodule345.7 周期性行为和边沿检测周期性行为和边沿检测 周期性行为在仿真一开始便被激活,并且周期性行为在仿真一开始便被激活,并且在延迟控制(在延迟控制(#延时控制操作符)和事件控制延时控制操作

26、符)和事件控制表达式(表达式(事件控制操作符)所决定的定时控事件控制操作符)所决定的定时控制条件下执行相关的过程语句。制条件下执行相关的过程语句。35例例5.9 同步置位同步置位/复位的复位的D触发器触发器 module df_behav ( output reg q, output q_bar, input data, set, reset, clk ); assign q_bar = q; always (posedge clk) /同步同步 begin if (reset=0) q=0; else if (set=0) q=1; else q=data; end endmodule36例

27、例5.10 异步置位异步置位/复位的复位的D触发器触发器 module df_behav ( input data, set, reset, clk, output reg q, output q_bar ); assign q_bar = q; always (negedge set or negedge reset or posedge clk) /异步异步 begin if (reset=0) q=0; else if (set=0) q=1; else q=data; end endmodule37 同步信号的识别:同步信号的识别: 控制表达式使用注意事项:控制表达式使用注意事项:(1

28、)Verilog语言允许在事件控制表达式中混合使用电语言允许在事件控制表达式中混合使用电 平敏感和边沿敏感变量(仿真)。平敏感和边沿敏感变量(仿真)。(2)综合工具不支持电平敏感和边沿敏感的混合使用。)综合工具不支持电平敏感和边沿敏感的混合使用。(3)可综合描述中,事件控制表达式必须是全电平敏)可综合描述中,事件控制表达式必须是全电平敏 感或是全边沿敏感的。感或是全边沿敏感的。385.8 行为建模风格比较行为建模风格比较三类建模风格:三类建模风格: 连续赋值建模;连续赋值建模; 数据流数据流/RTL级建模;级建模; 基于算法的建模基于算法的建模395.8.1 连续赋值建模连续赋值建模 基于连续

29、赋值的建模方式描述电平敏感行为。连基于连续赋值的建模方式描述电平敏感行为。连续赋值在语句之间、基本门之间以及描述中的所有行续赋值在语句之间、基本门之间以及描述中的所有行为模块之间都是并行执行的。为模块之间都是并行执行的。例例5.12 2-bit 比较器比较器 module compare_2_CA1( output A_lt_B, A_gt_B, A_eq_B, input A1, A0, B1, B0 ); assign A_lt_B = (A1,A0B1,B0); assign A_eq_B = (A1,A0=B1,B0); endmodule 405.8.2 数据流数据流/RTL级建模级

30、建模 用于同步时序机中的数据流模型称为用于同步时序机中的数据流模型称为RTL(寄存器传输级)模型,描述了寄存器在同(寄存器传输级)模型,描述了寄存器在同步机中的动作。属于可综合的行为描述。步机中的动作。属于可综合的行为描述。 特点:特点: (1)硬件结构被隐含地指定。)硬件结构被隐含地指定。 (2)可综合实现。)可综合实现。41 RTL模型可描述成特定的结构形式,即模型可描述成特定的结构形式,即寄存器操作与数据通道操作。寄存器操作与数据通道操作。42例例5.16 4-bit 串行移位寄存器串行移位寄存器阻塞赋值语句阻塞赋值语句434-bit 串行移位寄存器结构图串行移位寄存器结构图44颠倒过程

31、赋值语句的顺序:颠倒过程赋值语句的顺序:阻塞赋值语句阻塞赋值语句45阻塞赋值与非阻塞赋值阻塞赋值与非阻塞赋值过程赋值中包含两类:过程赋值中包含两类: 阻塞赋值阻塞赋值: “=” /顺序执行顺序执行 非阻塞赋值非阻塞赋值: “=” /并发执行并发执行46 阻塞赋值与非阻塞赋值的特点:阻塞赋值与非阻塞赋值的特点: 阻塞过程赋值执行完成后再执行在顺序块内下一阻塞过程赋值执行完成后再执行在顺序块内下一条语句。条语句。 非阻塞赋值不阻塞过程流,仿真器读入一条赋值非阻塞赋值不阻塞过程流,仿真器读入一条赋值语句并对它进行调度之后,就可以处理下一条赋值语语句并对它进行调度之后,就可以处理下一条赋值语句。句。

32、若过程块中的所有赋值都是非阻塞的,赋值按两若过程块中的所有赋值都是非阻塞的,赋值按两步进行:步进行:1. 仿真器计算所有仿真器计算所有RHS表达式的值,保存结果,并表达式的值,保存结果,并 进行调度准备在时序控制指定的时间进行赋值。进行调度准备在时序控制指定的时间进行赋值。2. 在经过相应的延迟后,仿真器通过将保存的值赋给在经过相应的延迟后,仿真器通过将保存的值赋给 LHS表达式完成赋值。表达式完成赋值。47module trans_vals; reg a, b, clk; initial begin a = 0; b = 1; clk = 0; end always #5 clk = clk

33、; always ( posedge clk) begin a = b; / 阻塞过程赋值阻塞过程赋值 b = a; / a等于等于b值值 endendmodule48module swap_vals; reg a, b, clk; initial begin a = 0; b = 1; clk = 0; end always #5 clk = clk; always ( posedge clk) begin a = b; / 非阻塞过程赋非阻塞过程赋值值 b = a; / 交换交换a和和b值值 endendmodule49例例5.17 用非阻塞赋值描述用非阻塞赋值描述 4-bit串行移位寄存

34、器串行移位寄存器50module pipeMult ( output reg 15:0 product, input go, clock, input 7:0 mPlier, mCand);always (posedge go) product = repeat (4) (posedge clock) mPlier * mCand;endmodulemodule pipeMult (output reg 15:0 product, input go, clock, input 7:0 mPlier, mCand);always (posedge go) product = repeat (4)

35、 (posedge clock) mPlier * mCand;endmodule51仿真结果:仿真结果:52仿真与综合结果的差异仿真与综合结果的差异module pipeb ( output q, input d, clk); reg q, q1, q2, q3; always(posedge clk) q1=d; always(posedge clk) q2=q1; always(posedge clk) q3=q2; always(posedge clk) q=q3;endmodulemodule pipeb ( output q, input d, clk); reg q, q1, q

36、2, q3; always(posedge clk) q1=d; always(posedge clk) q2=q1; always(posedge clk) q3=q2; always(posedge clk) q=q3;endmodule53 阻塞赋值与非阻塞赋值编程风格阻塞赋值与非阻塞赋值编程风格(1)时序电路建模时,用非阻塞赋值。)时序电路建模时,用非阻塞赋值。(2)锁存器电路建模时,用非阻塞赋值。)锁存器电路建模时,用非阻塞赋值。(3)用)用always块建立组合逻辑模型时,用阻块建立组合逻辑模型时,用阻 塞赋值。塞赋值。(4)在同一个)在同一个always块中建立时序和组合逻块中建

37、立时序和组合逻 辑电路时,用非阻塞赋值。辑电路时,用非阻塞赋值。(5)在同一个)在同一个always块中不要既用非阻塞赋块中不要既用非阻塞赋 值,又用阻塞赋值。值,又用阻塞赋值。54例:组合逻辑的描述风格例:组合逻辑的描述风格 module ao4 ( output reg y, input a, b, c, d ); reg tmp1, tmp2; always (a or b or c or d) begin tmp1=a & b; tmp2=c & d; y=tmp1 | tmp2; end endmodule55例:组合逻辑的描述风格例:组合逻辑的描述风格 module ao4 ( o

38、utput reg y, input a, b, c, d ); reg tmp1, tmp2; always (a or b or c or d or tmp1 or tmp2) begin tmp1=a & b; tmp2=c & d; yB) A_gt_B = 1; else A_lt_B = 1; end endmodule605.9 多路复用器、编码器、多路复用器、编码器、 译码器的行为模型译码器的行为模型例例5.19 4通道,通道,32-bit多路器多路器61 case语句描述:语句描述: module Mux_4_32_case ( output 31:0 mux_out, in

39、put 31:0 data_3, data_2,data_1,data_0, input 1:0 select, input enable ); reg 31:0 mux_int; assign mux_out = enable ? Mux_int : 32bz; always (data_3, data_2, data_1, data_0, select) case(select) 0 : mux_int = data_0; 1 : mux_int = data_1; 2 : mux_int = data_2; 3 : mux_int = data_3; default : mux_int

40、= 32bx; endcase endmodule62 case语句语句 case语句的特点:语句的特点:(1)与其它语言中的相似,如)与其它语言中的相似,如C语言中的语言中的 switch语句,语句,VHDL中的中的case语句。语句。(2)从上至下搜索匹配的条件。)从上至下搜索匹配的条件。(3)case语句执行第一个满足条件的语句。语句执行第一个满足条件的语句。(4)对余下满足条件的不予考虑。)对余下满足条件的不予考虑。(5)使用)使用default语句是一个很好的编程习惯。语句是一个很好的编程习惯。63 casez、casex语句:语句: casez和和casex为为case语句的变体,

41、允许考语句的变体,允许考虑无关虑无关(dont-care)值。)值。 case表达式或表达式或case项中的任何位为无关值项中的任何位为无关值 时,在比较过程中该位不予考虑。时,在比较过程中该位不予考虑。 在在casez语句中,语句中,? 和和 z 被当作无关值。被当作无关值。 在在casex语句中,语句中,?,z 和和 x 被当作无关值。被当作无关值。64 三选一多路器?三选一多路器? always (cond or a or b or c) begin casex(cond) 2b0? : dout=a; 2b1? : dout=b; 2b11 : dout=c; default : do

42、ut=0; endcase end决不会执行决不会执行65 例例5.20 嵌套嵌套 if 语句描述:语句描述: module Mux_4_32_if ( output 31:0 mux_out, input 31:0 data_3, data_2,data_1,data_0, input 1:0 select, input enable ); reg 31:0 mux_int; assign mux_out = enable ? Mux_int : 32bz; always (data_3 , data_2 , data_1 , data_0 , select) if (select=0) m

43、ux_int = data_0; else if (select=1) mux_int = data_1; else if (select=2) mux_int = data_2;else if (select=3) mux_int = data_3; else mux_int = 32bx; endmodule66例例5.21 嵌套条件赋值语句嵌套条件赋值语句(? :)描述:描述: module Mux_4_32_CA ( output 31:0 mux_out, input 31:0 data_3, data_2,data_1,data_0, input 1:0 select, input

44、 enable ); reg 31:0 mux_int; assign mux_out = enable ? Mux_int : 32bz; assign mux_int = (select=0) ? data_0 : (select=1) ? data_1 : (select=2) ? data_2 : (select=3) ? data_3 : 32bx; endmodule67例例5.22 8-3编码器编码器 module encoder ( output reg 2:0 Code, input 7:0 Data ); always (Data) begin if (Data =8b00

45、000001) Code = 0; else if (Data =8b00000010) Code = 1; else if (Data =8b00000100) Code = 2; else if (Data =8b00001000) Code = 3; else if (Data =8b00010000) Code = 4; else if (Data =8b00100000) Code = 5; else if (Data =8b01000000) Code = 6; else if (Data =8b10000000) Code = 7; else Code = 3bx; end en

46、dmodule 68用用case语句描述:语句描述: always (Data) case (Data) 8b00000001 : Code = 0; 8b00000010: Code = 1; 8b00000100 : Code = 2; 8b00001000 : Code = 3; 8b00010000 : Code = 4; 8b00100000 : Code = 5; 8b01000000 : Code = 6; 8b10000000 : Code = 7; default : Code = 3bx; endcase 6970例例5.23 8-3优先级编码器优先级编码器 module pri

温馨提示

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

评论

0/150

提交评论