预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第六章例题 [例1]:用initial块对存储器变量赋初始值 initial begin areg=0; //初始化寄存器areg for(index=0;index<size;index=index+1) memory[index]=0; //初始化一个memory end [例2]:用initial语句来生成激励波形 initial begin inputs='b000000; //初始时刻为0 #10inputs='b011001; (’是英文输入法中的标号) #10inputs='b011011; #10inputs='b011000; #10inputs='b001000; end //always语句由于其不断活动的特性,只有和一定的时序控制结合在一起才有用。 //如果一个always语句没有时序控制,则这个always语句将会使仿真器产生死锁。 //见下例: [例3]:alwaysareg=~areg; //但如果加上时序控制,则这个always语句将变为一条非常有用的描述语句。见下例: [例4]:always#half_periodareg=~areg; //这个例子生成了一个周期为:period(=2*half_period)的无限延续的信号波形, //常用这种方法来描述时钟信号,作为激励信号来测试所设计的电路。 [例5]:reg[7:0]counter; regtick; always@(posedgeareg) begin tick=~tick; counter=counter+1; end [例6] OR事件控制(敏感列表) //有异步复位的电平敏感锁存器 always@(resetorclockord) //等待复位信号reset或时钟信号clock或输入信号d的改变 begin if(reset)//若reset信号为高,把q置零 q=1'b0; elseif(clock)//若clock信号为高,锁存输入信号d q=d; end /*Verilog1364-2001版本的语法中,对于原来的规定作了补充:关键词“or”也可以使用“,”来代替。例7给出了使用逗号的例子。使用“,”来代替关键词“or”也适用于跳变沿敏感的触发器。*/ [例7]使用逗号的敏感列表 //有异步复位的电平敏感锁存器 always@(reset,clock,d) //等待复位信号reset或时钟信号clock或输入信号d的改变 begin if(reset)//若reset信号为高,把q置零 q=1'b0; elseif(clock)//若clock信号为高,锁存输入信号d q=d; end //用reset异步下降沿复位,clk正跳变沿触发的D寄存器 always@(posedgeclk,negedgereset)//注意:使用逗号来代替关键字or if(!reset) q<=0; else q<=d; [例8] @*操作符的使用 //用or操作符的组合逻辑块 //编写敏感列表很繁琐并且容易漏掉一个输入 always@(aorborcordoreorforgorhorporm) begin out1=a?b+c:d+e; out2=f?g+h:p+m; end //不用上述方法,用符号@(*)来代替,可以把所有输入变量都自动包括进敏感列表。 always@(*) begin out1=a?b+c:d+e; out2=f?g+h:p+m; end always wait(count_enable) #20count=count+1; switch_bytes(old_word,new_word); new_word=switch_bytes(old_word); taskmy_task; inputa,b; inoutc; outputd,e; … <语句> //执行任务工作相应的语句 … c=foo1; //赋初始值 d=foo2; //对任务的输出变量赋值 e=foo3; endtask 任务调用: my_task(v,w,x,y,z); [例9]描述红绿黄交通灯行为的Verilog模块,其中使用了任务。 moduletraffic_lights; regclock,red,amber,green; parameteron=1,off=0,red_tics=350, amber_tics=30,green_tics=200; //交通灯初始化 initial red=off; initial amber=off; initial green=off; //交通灯控制时序 always begin red=on; //开红