当且仅当在该循环上调用接口方法/任务时,是否可以合成在循环中断言的使能信号?需要类似以下的东西:
interface RAM (logic clk);
logic enable;
// ...
always_ff @(posedge clk) enable = 0;
task Read(input address_t address);
enable = 1;
// ...
endtask
//...
modport server(input clk, input enable, ...);
modport client(input clk, export Read, ...);
endinterface
显然,上述情况属于非法行为。我唯一的想法就是保存以前的状态,比较always_ff中当前和之前的赋值是否相同,并在任务调用中否定。这似乎并不实用 - 它非常具体,因此在P& R期间不太可能被优化掉。我真正需要的是一个具有语义的逻辑元素,当分配给它时,它会获取指定的值,否则它将变为默认值。
答案 0 :(得分:2)
您只能写入来自单个进程的信号。但是你可以从同一个进程多次写入同一个变量,最后写入获胜。所以你可以做到
always_ff @(posedge clk)
begin
enable <= 0;
case(opcode)
READ_OP: Read(...);
WRITE_OP: Write(...);
endcase
请注意,您必须始终使用NBA <=
在任务中分配enable
(如果读/写不消耗时间,则使用void函数而不是任务。