We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
王轩博士您好: 首先非常感谢优质的开源项目,为初学者提高能力提供了可能。目前我有一个小疑问: 在nfca_tx_frame.sv中,remainb怎么计算的?我的理解是它应当与tx_tdatab和为8,但是代码中好像描述的并不是这个意思。 非常期待您的回答。
The text was updated successfully, but these errors were encountered:
你好,这里的 remainb 来自 lastb 信号,见 nfca_tx_frame.sv 的 104 行: remainb <= incomplete ? lastb[2:0] : '0; 而 lastb 的来自 tx_tdatab 信号,见 79 行: lastb <= tx_tdatab==4'd0 ? 4'd1 : tx_tdatab>4'd8 ? 4'd8 : tx_tdatab;
remainb
lastb
remainb <= incomplete ? lastb[2:0] : '0;
tx_tdatab
lastb <= tx_tdatab==4'd0 ? 4'd1 : tx_tdatab>4'd8 ? 4'd8 : tx_tdatab;
79 行和104行共同达到的效果是:
tx_tdatab=0
remainb=1
tx_tdatab=1~7
remainb=1~7
tx_tdatab=8
remainb=0
tx_tdatab 的合法取值范围是 1~8 ,代表 TX 包的最后一个字节有多少个有效 bit 。 而 remainb 代表的是即将到达的第一个 bit 应该放在 RX 包的字节的第几位,而不是你理解的即将到达的第一个可能残缺的字节应该有多少个bit。这里我的变量命名确实有点误导性,不应该取 remain 这个词。
例如,TX 的最后一个字节的 tx_tdatab=2 ,说明这个残缺字节的 [1:0] 位是TX的。得到 remainb=2 ,那么 RX 的第一个 bit 应该放在残缺字节的 [2] 位,RX 的第二个字节应该放在残缺字节的 [3] 位, ... 以此类推,直到残缺字节被填满为止。
tx_tdatab=2
remainb=2
你可以看一下 nfca_rx_tobytes.sv ,里面有个 cnt 计数器,它在初始时就是先取 remainb 的值 (见49行) : cnt <= {1'b0, remainb};
cnt
cnt <= {1'b0, remainb};
然后每RX一个 bit ,就把这个 bit 放在接收字节的第 cnt 位 (见 60 行) : byte_saved[cnt] <= rx_bit;
byte_saved[cnt] <= rx_bit;
并让 cnt 自增: cnt <= cnt + 4'd1;
cnt <= cnt + 4'd1;
希望我的回答能解决你的困惑。
Sorry, something went wrong.
感谢王博的回复。代码风格和思路令人受益匪浅。 目前遇到一个新的问题:在nfca_tx_modulate.sv 中,两个localparam 的值是怎么得到的呢? 期待王博的解答。
No branches or pull requests
王轩博士您好:
首先非常感谢优质的开源项目,为初学者提高能力提供了可能。目前我有一个小疑问:
在nfca_tx_frame.sv中,remainb怎么计算的?我的理解是它应当与tx_tdatab和为8,但是代码中好像描述的并不是这个意思。
非常期待您的回答。
The text was updated successfully, but these errors were encountered: