【发布时间】:2015-04-10 04:19:49
【问题描述】:
我在 VCS(G-2012.09) 中编写了一个测试平台来验证一个 SPI 模块。
这是从 SPI 主机获取字节的任务:
task get_byte;
begin
repeat(8) @(posedge spck)
begin
if (spss == 1'b0)
tmp = {tmp[6:0], mosi};
end
$display ("[Time:%dns]---->Get a byte: 0x%h", $stime, tmp);
end
endtask
它有效。然后我想参数化这个任务并将代码替换为:
task get_byte;
input clk, oen, din;
output [7:0] byte;
begin
byte = 8'd0;
repeat(8) @(posedge clk)
begin
if (oen == 1'b0)
byte = {byte[6:0], din};
end
$display ("[Time:%dns]---->Get a byte: 0x%h", $stime, byte);
end
endtask
但是当我使用 get_byte(spck, spss, mosi, tmp) 调用任务并在 VCS 中运行测试平台时,它卡住了。 spck 似乎没有通过在此任务中作为 clk 工作。
那么有没有规定时钟信号不能用作任务中的输入参数,还是我做错了什么?
【问题讨论】:
标签: arguments task verilog clock