verilog:语法练习实例

verilog:语法练习实例

ID:44271291

大小:754.50 KB

页数:45页

时间:2019-10-20

verilog:语法练习实例_第1页
verilog:语法练习实例_第2页
verilog:语法练习实例_第3页
verilog:语法练习实例_第4页
verilog:语法练习实例_第5页
资源描述:

《verilog:语法练习实例》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第八讲参见错误分析语法练习设计实例使用非Verilog表达方式例1integeri;for(i=0;i<8;i++)begin……end出现了非法的自增算符“i++”,这是熟悉C语言编程者最易犯的典型错误.类似的错误包括自减算符“--”将i++改写为i=i+1例2initialbegina=0,b=0,c=0;#10a=1,b=1;#10a=0,c=1;……endVerilogHDL以分号作为语句的结束符设计时会不经意中用逗号代替,从而产生错误将逗号改写为分号与类型说明相关的错误例3moduletest_for_mux;Muxst

2、rmux_beh(out,a,b,s);initialbegin$monitor($time,“a=%bb=%bs=%bout=%b”,a,b,s,out);a=0;b=1;s=0;#10a=1;#10s=1;#10b=0;#10$finish;endendmodulemodulemux_beh(out,a,b,sel);outputout;inputa,b,sel;assignout=(sel==0)?a:b;Endmodule例3错误分析1在对MUX的行为描述中,因为涉及到的都是一位的连线型量,因而类型说明可以被缺省。2在测试

3、模块中,激励信号在initial过程块中被过程语句所赋值,因而都必须是寄存器型的量,不能被缺省3修改方法:在测试模块中增加对激励信号a,b,s的寄存器类型说明语句rega,b,s;遗漏寄存器类量的类型说明在VerilogHDL模块描述内部,如果一个量被过程赋值语句所赋值,那么在模块的数据类型说明部分,必须能够找到它的寄存器类的类型说明语句如果一个量被assign连续赋值语句所赋值,则这个量必须是连线型的例4moduletest_adder;reg[7:0]a,b;adderadd(a,b,sum);initialbegin$mon

4、itor($time,“a=%bb=%bsum=%b”,a,b,sum);a=0;b=0;#100a=1;b=1;……#100$finish;endendmodulemoduleadder(sum,a,b);output[8:0]sum;input[7:0]a,b;assignsum=a+b;Endmodule例4错误分析在对测试模块进行编译时,a、b信号通过显式说明可以知道它们的类型与线宽,但sum找不到相应的类型说明与位宽说明,因而被看作是缺省的一位宽的连线,这与实际的9位线宽的连线发生矛盾。?修改方法:?在测试模块中增加对s

5、um的线宽说明?wire[8:0]sum;与always过程语句相关的错误例5modulemux(out,a,b,select);outputout;inputa,b,select;case(select)1’b0:out=a;1’b1:out=b;endcaseendmodule例6modulemux(out,a,b,select);outputout;inputa,b,select;alwayscase(select)1’b0:out=a;1’b1:out=b;endcaseendmodule例7modulemux(out,a

6、,b,select);outputout;inputa,b,select;always@(select)case(select)1’b0:out=a;1’b1:out=b;endcaseendmodule例8(正确)modulemux(out,a,b,select);outputout;inputa,b,select;regout;always@(aorborselect)case(select)1’b0:out=a;1’b1:out=b;endcaseendmodule由零延时引起的模拟错误例9modulecomparator(

7、out,in1,in2);output[1:0]out;input[7:0]in1,in2;reg[1:0]out;alwaysbeginif(in1==in2)out=2’b00;elseif(in1>in2)out=2’b01;elseout=2’b10;endinitial#10$finish;endmodule例9错误分析?该模块用于模拟时,出现类似死机的现象?always过程语句中没有事件控制敏感表,因而循环条件始终成立?条件语句内部的赋值语句中都不存在延时说明,因而整个循环体的执行始终停留在0时刻进行改错`timesc

8、ale1ns/10ns`include"adder4.v"moduleadder_tp;wire[3:0]a,b;regcin;reg[3:0]sum;regcout;integeri,j;adder4adder(sum,cout,a,b,cin)

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。