赞
踩
阻塞式赋值语句(目标变量名=驱动表达式) 的执行过程分为三步:
计算出“驱动表达式”的值;
向目标变量进行赋值操作;
完成赋值。
这三步是并成一步完成的,即一旦执行,目标 变量被立即更新,而在此过程中其他同类赋值 语句必须停止工作!
非阻塞式赋值的三个步骤不是一步完成的
非阻塞式赋值在赋值的第一个阶段(计 算“驱动表达式”的值)理论上是可以 立即完成的,但第二个阶段(向目标变 量进行赋值操作),需要由一个δ延时段。 也就是δ延时后,赋值才被更新。在这个 延迟时间段,允许其他同类赋值语句的 执行或者说赋值操作。
左边例子表示,当第一条语句执行完之后需要延时6个时间单位在执行第二条语句;右边例子表示,当第一条语句执行完后,立刻执行等式右边表达式的值,等待6个时间单位后再赋值给左边
非阻塞赋值允许对同一目标多次赋值或驱动,并且最终获得赋值(更新)的目标 变量是最后一个,即最接近过程结束的那一语句的目标变量。
左:程序是不被允许的,由于连续赋值语句的并行性,使得综合器无法确定Q1获得什么值,除非这三条语句被执行后,Q1能获得高阻态z的赋值。
中:阻塞式赋值,Q1经历了2b'11和2b'01的赋值
对于非阻塞赋值,Q1从来未经历过2’b11和2‘b01数据的更新。
赋值号左侧的[延时]是指对整条语句执行的延时,即相隔与上一条 语句的延时量。
赋值号右侧的[延时]是指在赋值语句的右侧表达式得出运算结果后, 延时一段指定的时间再将运算结果赋值给赋值号左边的变量
(1)和软件语言不同,过程语句always的执行依赖于敏感信号的变化。
(2)在一个模块中可以包含任意个过程语句结构,所有的过程语句结构本身都属于并行运行语句, 而由任一过程引导的各类语句结构都属于顺序语句。
(3)与引导行为语句(顺序执行的语句)的always语句相对应,assign引导的语句属于并行语句。 always语句本身也属于并行语句,所以在许多情况下这两类语句是可以互相转换表达的。
(1)不完整的条件语句的描述,是Verilog描述时序电路的途径之一(通常用于描述电平触发类锁存 器电路)。
(2)在利用条件语句进行纯组合电路设计时,如果没有充分考虑电路中所有可能出现的问题(条 件),即没有列全所有的条件及其对应的处理方法,将导致不完整的条件语句的出现,从而综合出了 设计者不希望的组合与时序电路的混合体。
完整的条件语句构成组合电路,不完整的条件语句构成时序电路
第(3)种if语句是一种多重if语句嵌套式条件句,其重要特点为,其任一分支 顺序语句的执行条件是以上各分支所确定条件的相与,即相关条件同时成立。 即语句中顺序语句的执行条件具有向上相与的功能,而有的逻辑设计恰好需要 这种功能,如优先编码器。
设计一个11分频的分频器,要 求输出占空比为50%
- module div11x(input clk,input reset_n,output q);
- reg [3:0] cnt;
- reg x_p,x_n;
- always @(posedge clk,negedge reset_n)
- if(!reset_n)
- cnt <= 0;
- else if(cnt < 11-1)
- cnt <= cnt + 1'b1;
- else
- cnt <= 0
- always @(posedge clk,negedge reset_n)
- if(!reset_n)
- x_p <= 0;
- else if(cnt < 11/2)
- x_p <= 1;
- else
- x_p <= 0;
- always @(negedge clk,negedge reset_n)
- if(!reset_n)
- x_n <= 0;
- else
- x_n <= x_p;
- assign q = x_p | x_n;
- endmodule
(1)当使能控制信号ENA为1时,4位数据输出;为0时输出呈高阻态。
(2)Z和普通数值不同,它只能在端口赋值,不能在电路模块中被信号所传递;而且由于Z在 综合中是一个不确定的值,有的情况下不同的综合器可能会给出不同的结果,因而对于 Verilog综合前的行为仿真与综合后的功能仿真结果也可能是不同的。
由于双向端口在完成输入功能时,必须使 原来呈输出模式的端口呈高阻态,否则待 输入的外部数据势必会与端口处原有电平 发生“线与”,导致无法将外部数据正确 地读入,也就无法实现双向功能
要设计出能产生独立控制的多通道的三态总线电路结构,必须使用并行语句
例题:根据RTL图写程序、
由于双向端口在完成输入功能时,必须使原来呈输出 模式的端口呈高阻态,否则待输入的外部数据势必会 与端口处原有电平发生“线与”,导致无法将外部数 据正确地读入,也就无法实现双向功能。
右边例子的情况就不同了,其中在else之前的块语句中仅增加了语句 Q<=4’HZ就解决了两个重要的问题: (1)使Q在if语句中有了完整的条件描述,从而克服了时序元件的引入。 (2)在Q履行输入功能时,将其设定为高阻态输出,使Q成为真正的双向 端口
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。