第四章 Verilog HDL行为语句
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
芜湖职业技术学院 举例:3个分别用for、repeat、while语句实现的同一个循环
芜湖职业技术学院 应用举例:采用for循环语句设计一个“七人表决 器”,通过一个for循环语句统计赞成人数,若超过4人 赞成则通过。
芜湖职业技术学院
用vote[6:0]表示7个人的投票情况,“1”代表赞成, 即vote[i]为第“1”代表第i个赞成,pass=“1”表示表决 通过
(3)if(条件表达式1) 语句1; else if (条件表达式2) 语句2; else if (条件表达式3) 语句3; …… else 语句n;
芜湖职业技术学院 例如 if(Sum < 60) begin Grade = C; Total_C = Total _c + 1; end else if(Sum < 75) begin Grade = B; Total_B = Total_B + 1; end else begin Grade = A; Total_A = Total_A + 1; end
芜湖职业技术学院 例如: @(a) @(a or b) @(posedge clock) @(negedge clock) //当信号a值发生改变时 //当信号a或信号b的值发生改变时 //当clock的上升沿到来时 //当clock的下降沿到来时
case (敏感表达式) (敏感表达式 敏感表达式) 值1: 语句 ; : 语句1; 值2: 语句 ; : 语句2; …… 值n: 语句 : 语句n; default:语句n+1; :语句 endcase
当敏感表达式的值为值 1时,执行语句 ;为n时执 时 执行语句1; 时执 行语句n; 行语句 如果敏感表达式 的值与列出的值都不相同 的话, 则执行default后面 的话 , 则执行 后面 的语句。 的语句。 建议:case的默认项必须写, 的默认项必须写, 建议 的默认项必须写 防止产生锁存器。 防止产生锁存器。
芜湖职业技术学院
第4章 Verilog HDL行为语句 章 行为语句
赋值语句(assign、=、<=) 、 、 赋值语句 条件语句(if-else、case) 条件语句 、 循环语句(for、forever、repeat、while) 、 循环语句 、 、 过程语句(initial、always) 、 过程语句 块语句(begin-end、fork-join) 、 块语句 编译向导
芜湖职业技术学院
3. 条件语句使用要点
在使用条件语句时,应注意列出所有条件分支,否则, 在使用条件语句时,应注意列出所有条件分支,否则,编译器认为条 件不满足时,会引起一个触发器保持原值。这一点可用于设计时序电路, 件不满足时 , 会引起一个触发器保持原值 。 这一点可用于设计时序电路, 例如在计数器设计中,条件满足则加1,否则保持不变; 例如在计数器设计中,条件满足则加 ,否则保持不变;而在组合电路设计 应避免这种隐含触发器的存在。当然,一般不可能列出所有分支, 中 , 应避免这种隐含触发器的存在 。 当然 , 一般不可能列出所有分支 ,因 为每一变量至少有4种取值 种取值0、 、 、 。为包含所有分支,可在if语句最后 为每一变量至少有 种取值 、1、z、x。为包含所有分支,可在 语句最后 加上else;在case语句的最后加上 语句的最后加上default语句。 语句。 加上 ; 语句的最后加上 语句
2. 过程赋值语句
过程赋值语句多用于对reg型变量进行赋值。过程赋 值有阻塞赋值和非阻塞赋值两种方式。阻塞语句是顺序 执行的,在该语句结束时就立即完成赋值,那么在前面 的语句没有完成之前,后面的就不能被执行,仿佛被阻 塞了一样,常用于组合逻辑电路设计中;而非阻塞语句 是同时执行的,在整个过程块结束时才完成赋值操作, 即被赋值的变量的值不是立刻就改变的,常用于时序逻 辑电路设计中。
“表达式”一般为逻辑表 达式或关系表达式,也 可能是一位的变量。条 条 件表达式必须总是被括 起来的。 起来的 。 对表达式的值 进行判断,若为0, x或z, 按“假”处理;若为1, 按“真”处理,执行指 定语句。
芜湖职业技术学院
2. case语句 语句
相对于if语句只有两个分支而言,case语句是一种多 分支语句,故case语句可用于多条件译码电路,如:描述 译码器、数据选择器、状态机及微处理器的指令译码等。 case语句的使用格式: 语句的使用格式: 语句的使用格式
芜湖职业技术学院 “always”过程语句通常是带有触发条件的,触发条件写 在敏感信号表达式中,只有当触发条件满足时,其后的 “begin-end”块语句才能被执行。下面讨论敏感信号表达 式“event-expression”的含义以及如何写敏感信号表达式。 敏感信号表达式 所谓敏感信号表达式,又称事件表达式或敏感信号列 表,即当该表达式中变量的值改变时,就会引发块内语句 的 执行。因此,敏感信号表达式中应列出影响块内取值 的所有信号。若有两个或两个以上信号,它们之间用“or” 连接。
芜湖职业技术学院 注意两个方面的问题: 注意两个方面的问题: (1)连续赋值语句的执行是:只要右边表达式任一个变量有 )连续赋值语句的执行是: 变化,表达式立即被计算,计算的结果立即赋给左边信号。 变化,表达式立即被计算,计算的结果立即赋给左边信号。 (2)连续赋值语句之间是并行语句,因此与位置顺序无关。 )连续赋值语句之间是并行语句,因此与位置顺序无关。
注:在同一个进程块中,最好不要同时用阻塞赋值和非阻 塞赋值语句。
芜湖职业技术学院
4.2 条件语句
条件语句有if-else语句和case语句两种,它们都是 顺序语句,应放在always块内。
1. if-else语句 语句
格式与C语言中的if-else语句类似,使用方法有三种:
(1)If(表达式) 语句1; (2)If(表达式) 语句1; else 语句2;
芜湖职业技术学院
例如
begin case (HEX) 4'b0001 : LED = 7'b1111001; // 1 4'b0010: LED = 7'b0100100; // 2 4'b0011: LED = 7'b0110000; // 3 4'b0100: LED = 7'b0011001; // 4 4'b0101: LED = 7'b0010010; // 5 4'b0110: LED = 7'b0000010; // 6 4'b0111: LED = 7'b1111000; // 7 4'b1000: LED = 7'b0000000; // 8 4'b1001: LED = 7'b0010000; // 9 4'b1010: LED = 7'b0001000; // A 4'b1011: LED = 7'b0000011; // B 4'b1100: LED = 7'b1000110; // C 4'b1101: LED = 7'b0100001; // D 4'b1110: LED = 7'b0000110; // E 4'b1111: LED = 7'b0001110; // F default :LED = 7'b1000000; // 0 Endcase
1. 连续赋值语句 数据流的描述是采用连续赋值语句 (assign )语句来实现的,语法如下: 语句来实现的, 语句来实现的 语法如下: assign net_type=表达式; 表达式; 表达式
连续赋值语句用于组合逻辑的建模。等式左边是 连续赋值语句用于组合逻辑的建模。等式左边是wire类 类 型的变量,等式右边可以是常量, 型的变量,等式右边可以是常量,或是由运算符如逻辑运 算符、算术运算符参与的表达。例如, 算符、算术运算符参与的表达。例如, wire [3:0] Z, Preset, Clear; //线网说明 线网说明 assign Z = Preset & Clear; //连续赋值语句 连续赋值语句
源自文库湖职业技术学院
4.4 过程语句
Verilog HDL中的多数过程模块都从属于以下2种过程语句: initial always 在一个模块中,使用always和initial语句的次数是不 受限制的。Initial语句常用于仿真中的初始化,initial过程 块中的语句仅执行一次;always块内的语句则是不断重复 执行的。Always过程语句是可综合的,在综合的电路设 计中广泛采用。
芜湖职业技术学院
1. for语句 语句
for语句使用格式: for(表达式1;表达式2;表达式3) 语句; 即: for(循环变量赋初值;循环结束条件;循环变量增 值) 执行语句;
2. repeat语句 语句
repeat语句的使用格式为: repeat(循环次数表达式) 语句; 或repeat(循环次数表达式) begin …… end
芜湖职业技术学院
3. while 和forever语句 语句
While语句 while语句的使用格式如下: while(循环执行条件表达式)语句; 或 while(循环执行条件表达式)begin …… end while语句在执行时,首先判断循环执行条件表达式是否 为真,若为真,执行后面的语句或语句块,然后再回头判断循 环执行条件表达式是否为真,为真的话,再执行一遍后面的语 句,如此不断,直到条件表达式不为真。因此,在执行语句中, 必须有一条改变循环执行条件表达式的值的语句。
芜湖职业技术学院 forever语句 forever语句的使用格式如下: forever 或 forever 语句; begin …… end forever循环语句连续不断地执行后面的语句或语句块,常 用来产生周期性的波形,作为仿真激励信号for语句一般用在 initial过程语句中,若要用它来进行模块描述,可用disable语 句进行中断。
芜湖职业技术学院 阻塞赋值
阻塞赋值语句,从字面上理解,该条语句阻塞了下 阻塞赋值语句,从字面上理解, 面语句的执行, 用于阻塞的赋值, 面语句的执行,“=”用于阻塞的赋值,凡是在组合 用于阻塞的赋值 逻辑(如在assign语句中)赋值的请用阻塞赋值。 语句中) 逻辑(如在 语句中 赋值的请用阻塞赋值。
非阻塞赋值
非阻塞赋值操作符用小于等于号( 非阻塞赋值操作符用小于等于号(即<=)表示,只 )表示, 能用于对寄存器类型变量进行赋值,因此只能 只能用在 能用于对寄存器类型变量进行赋值,因此只能用在 等过程块中, “initial ”和“always”等过程块中,不能用在 和 等过程块中 assign语句中。 语句中。 语句中
芜湖职业技术学院
1. always过程语句 过程语句
always过程语句使用模板如下: always @(<敏感信号表达式event-expression>) begin //过程赋值 //if-else,case选择语句 //while,repeat,for循环 //task,function调用 end
设计者原意是设计一个二输 入与门,但因if语句中无else 语句,在逻辑综合时会认为 else语句 为:“c=c”,即保持 不变,形成了一个隐含锁存 器。因此需要加一条语句: else c=0;
芜湖职业技术学院
4.3 循环语句
在Verilog HDL中存在4种类型的循环语句,可用来控 制语句执行次数。这4种语句分别为: (1)forever:连续地执行语句,多用在“initial”块中,以生 成 时钟等周期性波形。 (2)repeat:连续执行一条语句n次; (3)while:执行一条语句,直到某个条件不满足; (4)for:有条件的循环语句
芜湖职业技术学院
本章概述
本章介绍Verilog HDL的行为语句,要充分 理解硬件描述语言和硬件电路的关系,熟练掌 握常用的行为语句,基本的行为语句就可以完 成绝大多数电路与系统设计,要对常用语句用 心专研、深入理解,对完成硬件电路设计将是 非常有用的。
芜湖职业技术学院
4.1 赋值语句
Verilog HDL赋值语句包括连续赋值语句和过程赋值语 赋值语句包括连续赋值语句和过程赋值语 句两种。 句两种。