verilog学习 (二)

晚上无聊,接着写第二篇吧.

第一个实用的代码就用D出发器吧.很简单

module d_flip(d,clk,q);
input d,clk;
output q;

wire d,clk;
reg q;

always @ (posedge clk)
begin
q <= d;
end
endmodule


解释如下,always想当于一直在运行,当 clk上升(posedge)时运行下面的语句`q<=d;`

( 对应的VHDL语句是process(clk) begin if (clk'event and clk = '1')q<=d end )

总体看来还是差不多,但是到数据类型时感觉verilog明显好多了.

变量定义部分发现与旧式c语言的样子差不多 o(∩_∩)o.变量类型很重要,因为verilog是硬件语言,脑子里还是得有一些模型的,需要寄存器的变量是reg类型的,如果是从外部引线传过来的话是使用wire类型.

写完模块后需要写测试部分.测试部分也是标准的verilog代码.关于测试代码http://www.asic-world.com/verilog/art_testbench_writing.html这里有专门的一段的`

如下:

module D_te();

reg clk,d;
wire q;

initial
begin
$dumpfile("d_out.vcd");
$dumpvars(0,D_te);

$display("D flip test");
$monitor("time = %g clk= %d d = %d p = %d",
$time,clk,d,q);
clk = 0;
d = 0;
#2 d = 1;
#3 d = 0;
#4 d = 1;
#1 $finish;
end
always
#1 clk = ~clk;

d_flip D0(d,clk,q);
endmodule


编译,运行 结果如下:

gtkwake结果如下:

好了,睡觉 zzzZZZz.

 

 

 

 

posted @ 2012-03-31 23:01  zhuangzhuang1988  阅读(636)  评论(0编辑  收藏  举报