verilog 中一个always语句块中对一个变量赋值1,标记为数据有效,另外一个always中根据该变量值为1输出数据,并需要告诉第一个always已经输出了,间隔64cycle再次判断
时间: 2024-02-16 07:01:02 浏览: 73
verilog几种赋值语句
4星 · 用户满意度95%
可以使用Verilog中的event和wait语句实现这个功能。第一个always语句块中可以使用event语句来标记数据有效,同时使用wait语句来等待第二个always语句块输出完毕。第二个always语句块中可以使用一个标志变量来记录是否已经输出数据,并在输出数据后将其置为1。同时使用一个计数器变量来记录已经过去的cycle数,并在计数器达到64时将标志变量清零,等待下一次数据有效标记的到来。
具体实现如下:
```
reg data_valid;
reg data_ready;
reg [5:0] cycle_counter;
always @(posedge clk) begin
if (data_valid) begin
data_ready <= 1;
-> data_valid_event; // 发送事件,通知第二个always
wait (data_ack); // 等待第二个always输出完毕
data_ready <= 0;
cycle_counter <= 0;
end
end
always @(posedge clk) begin
if (data_ready && !data_ack) begin
// 输出数据
data_ack <= 1;
ack_sent <= 1;
end
if (cycle_counter == 64) begin
cycle_counter <= 0;
data_ack <= 0;
end
else begin
cycle_counter <= cycle_counter + 1;
end
end
```
其中,data_valid_event是一个event类型的信号,表示数据有效标记的到来。wait语句会等待data_ack信号的置位,表示第二个always已经输出完毕。data_ack信号表示第二个always已经输出数据,并且已经通知第一个always。ack_sent信号表示数据已经被接收方接收。
阅读全文