- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Verilog设计内外延时
Verilog语言设计增加延时的正确方法 仿真在设计仿真激励文件是,为了满足和外部芯片接口的时序要求,经常会用到延时赋值语句,由于不同的延时赋值语句在仿真过程中行为不同,会产生不同的激励输出,如果不认真区分不同表达式引起的差异,就可能产生错误的激励,无法保证仿真结果的正确,本文就是区分各种延时赋值语句的差异,并给出比较结果。1:阻塞式延时赋值语句举例说明如下module adder_t1 (co, sum, a, b, ci);output co;output [3:0] sum;input [3:0] a, b;input ci;reg co;reg [3:0] sum;always @(a or b or ci)#12 {co, sum} = a + b + ci;endmodule分析:上面例子是希望在输入信号变化后12ns再更新输出结果,假设在15ns时a发生变化,在27ns时,结果将被更新,但是如果在15ns到2ns这一段时间,a,b,ci又发生了变化,在27ns时,结果将按照最新的a,b,ci进行计算并被更新,图示如下:如果将程序做如下修改,module adder_t7b (co, sum, a, b, ci);output co;output [3:0] sum;input [3:0] a, b;input ci;reg co;reg [3:0] sum;reg [4:0] tmp;always @(a or b or ci)begintmp = a + b + ci;#12 {co, sum} = tmp;endendmodule仿真的结果如下所示:从15ns到27ns之间的变化被忽视。2:阻塞式延时赋值语句看下面的例子:module adder_t6 (co, sum, a, b, ci);output co;output [3:0] sum;input [3:0] a, b;input ci;reg co;reg [3:0] sum;always @(a or b or ci){co, sum} = #12 a + b + ci;endmodule它的仿真结果adder_t7b,在延时12个ns的时间里,不作任何处理。
3:非阻塞式延时赋值语句看例子:module adder_t2 (co, sum, a, b, ci);output co;output [3:0] sum;input [3:0] a, b;input ci;reg co;reg [3:0] sum;always @(a or b or ci)#12 {co, sum} = a + b + ci;endmodule它的仿真结果同adder_t1假设在15ns时a发生变化,在27ns时,结果将被更新,但是如果在15ns到2ns这一段时间,a,b,ci又发生了变化,在27ns时,结果将按照最新的a,b,ci进行计算并被更新4:非阻塞式延时赋值语句看例子module adder_t3 (co, sum, a, b, ci);output co;output [3:0] sum;input [3:0] a, b;input ci;reg co;reg [3:0] sum;always @(a or b or ci){co, sum} = #12 a + b + ci;endmodule该例子的输出结果能随时跟踪输入信号的变化结论:使用非阻塞式延时赋值语句可以,输出结果能够跟随输入的变化,建议使用5:非阻塞式延时多重赋值语句看例子module adder_t9c (co, sum, a, b, ci);output co;output [3:0] sum;input [3:0] a, b;input ci;reg co;reg [3:0] sum;reg [4:0] tmp;always @(a or b or ci or tmp)begintmp = #12 a + b + ci;{co, sum} = tmp;endendmodule该例子的输出结果和adder_t3相同,但是一定要注意将tmp也要列入敏感变量列表中去。或者使用如下程序,也能得到和adder_t3相同的结果。module adder_t9d (co, sum, a, b, ci);output co;output [3:0] sum;input [3:0] a, b;input ci;reg co;reg [3:0] sum;reg [4:0] tmp;alway
文档评论(0)