求教verilog 代码解释和@ 的用法
begin
@(negedge clk);
readp = 1;
@(posedge clk) #5;
readp = 0;
end
endtask
请问上面这段verilog代码是什么意思,“@”没有和always在一起用, 却单独使用,头一次见到,@有什么用法,请教各位,多谢多谢!
就是等待后面的条件才能触发往下走
这个我也还真没见过,同求解
正解。
看书不比你在这里问强嘛?这是最基本的语法,跟电路无关的东西,只有在tb里才用的到。
二楼的朋友说得对,这个是用在测试代码中的,有点像wait(...),但是@(posedge ...)是边沿触发的~,只有等到这个时间触发了,仿真才回往下进行~
正解,就是在等到这个事件触发条件的满足,满足了才往下走。
书上说得很清楚呢,任务的使用。
这种代码只用在仿真,在实际的综合代码中很少这么用的
这样理解:
initial块只执行一次,always块会一直被执行。所以可以这样写时钟:initial clk = 0; always #10 clk = ~clk;对吧?
那么再说@,那是个触发条件的标识符,后面跟的是条件表达式,比如posedge clk或者*。如果是电平信号,用wait。
总之,把always和@分开理解,一个是块标识,一个是触发条件标识。
个人觉得加不加always都可以吧,理解用途就成了
这一般是仿真用的行为模型,就是等到条件满足后才会执行后面的语句。
这是 tb 里面任务用的,建议看一下verilog 语言里面的任务
是等待满足后面的条件,然后进行下一步。
testbench里经常会用到的基本语法,看书去
晕 每个人都说看书去 为什么我就没有看到书上有啊。那一本书啊
《高级verilog设计》有#5,应该是属于testbeach,但是在该书中,这种@的形式,是可以综合成状态机的。我综合过!
学习了~
always和@分开理解,一个是块标识,一个是触发条件标识 同意
应该是在testbench里面用到的
给一个触发的边沿!
