- 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二部分 设计和验证部分
IEEE Verilog标准定义了有些语句有确定的执行时间,有些语句没有确定的执行时间。若有两条或两条以上语句准备在同一时刻执行,但由于语句的排列顺序不同(而这种排列顺序的不同是IEEE Verilog标准所允许的),却产生了不同的输出结果。这就是造成Verilog模块冒险和竞争现象的原因。为了避免产生竞争,理解阻塞和非阻塞赋值在执行时间上的差别是至关重要的。 6.1.1 阻塞赋值 阻塞赋值操作符用等号(即=)表示。这种赋值先计算等号右手方向(RHS)部分的值,这时赋值语句不允许任何别的Verilog语句的干扰,直到现行的赋值完成时刻,即把RHS赋值给LHS的时刻,它才允许别的赋值语句的执行。一般可综合的阻塞赋值操作在RHS不能设定有延迟(即使是零延迟也不允许)。从理论上讲,它与后面的赋值语句只有概念上的先后,而无实质上的延迟。若在RHS上加延迟,则在延迟期间会阻止赋值浯句的执行,延迟后才执行赋值,这种赋值语句是不可综合的,在需要综合的模块设计中不可使用这种风格的代码。 阻塞赋值的执行可以认为是只有一个步骤的操作,即计算RHS并更新LHS,且不能允许有来自任何其他Verilog语句的干扰。所谓阻塞的概念是指在同一个always块中,其后面的赋值语句从概念上(即使不设定延时)是在前一句赋值语句结束后再开始赋值的。 如果在一个过程块中阻塞赋值的RHS变量正好是另一个过程块中阻塞赋值的LHS变量,这两个过程块又用同一个时钟沿触发,这时阻塞赋值操作会出现问题,即如果阻塞赋值的顺序安排不好,就会出现竞争。若这两个阻塞赋值操作用同一个时钟沿触发,则执行的顺序是无法确定的。下面的例子可以说明这个问题。 [例6.1] 采用阻塞赋值的反馈振荡器。 module fbosc1(y1,y2,clk,rst) output y1,y2; input clk,rst; reg y1,y2; always @(posedge clk or posedge rst) if(rst) y1=0; //reset else y1=y2; always @(posedge clk or posedge rst) if(rst) y2=1; //preset else y2=y1; endmodule 按照IEEE Verilog HDL的标准,上例中两个always块是并行执行的,与前后顺序无关。如果前一个always块的复位信号先到0时刻,则y1和y2都会取1,而如果后一个always块的复位信号先到0时刻,则y1和y2都会取0。这清楚地说明这个Verilog模块是不稳定的,必定会产生冒险和竞争的情况。 6.1.2 非阻塞赋值 非阻塞赋值操作符用小于等于号(即=)表示。非阻塞赋值在赋值操作时刻开始时计算非阻塞赋值符的RHS表达式,赋值操作时刻结束时更新LHS。在计算非阻塞赋值的RHS表达式和更新LHS期间,其他的Verilog语句,包括其他的Verilog非阻塞赋值语句都能同时计算RHS表达式和更新LHS。非阻塞赋值允许其他的Verilog语句同时进行操作。非阻塞赋值的操作可以看作为两个步骤的过程: (1)在赋值时刻开始时,计算非阻塞赋值RHS表达式; (2)在赋值时刻结束时,更新非阻塞赋值LHS表达式。 非阻塞赋值操作只能用于对寄存器类型变量进行赋值,因此只能用在“initial”块和always”块等过程块中,而非阻塞赋值不允许用于连续赋值。下面的例子可以说明这个问题: [例6.2] 采用非阻塞赋值的反馈振荡器。 module fbosc2(y1,y2,clk,rst); output y1,y2; input clk,rst; reg y1,y2; always @(posedge clk or posedge rst) if(rst) y1=0; //reset else y1=y2; always @(posedge clk or posedge rst) if(rst) y2=1; //preset else y2=y1; endmodule 同样,按照IEEE Verilog的标准,上例中两个always块是并行执行的,与前后顺序无关。 无论哪一个always块的复位信号先到
文档评论(0)