这段Verilog串口通信代码,不太明白valid和ready为什么要这样设置
fpga吧
全部回复
仅看楼主
level 1
always@(posedge clk or negedge rst_n)
begin
if(rst_n == 1'b0)
begin
tx_data_ready <= 1'b0;
end
else if(state == S_IDLE)
if(tx_data_valid == 1'b1)
tx_data_ready <= 1'b0;
else
tx_data_ready <= 1'b1;
else if(state == S_STOP && cycle_cnt == CYCLE - 1)
tx_data_ready <= 1'b1;
end
这是串口通信发送模块中的一段代码,不太明白这里的valid和ready为什么要这样设置,valid和ready要同时有效才能发送数据,感觉这样不是一直是相反的吗?
2019年12月16日 00点12分 1
吧务
level 15
欢迎加入qq交流群173560979
2019年12月16日 02点12分 2
level 1
你这应该是在start状态都置1,然后在发送阶段的时候,只需要一个时钟,这里并不会立即对握手信号赋值。也就是说这是起码两段式状态机控制的。
2019年12月16日 05点12分 3
吧务
level 9
vdlid信号是外部发送数据的有效信号,外部给一个有效信号就要发送出去一个数据。但是外部给进来的信号是并行的,而发送模块是慢慢的串行发送,所以模块需要告诉外部自己是否可以接收新的数据,而ready就是这个信号。
2019年12月16日 05点12分 4
1