Document ID: /fineweb-2-swissfilter-quality_10-filterrobots/filtered/06226.jsonl.gz/73

今天从张宇翔学长那拿到了 荔枝糖（Lichee Tang） 的 FPGA 板子，于是立即开始把前段时间学到的Verilog应用上来。不过想到现在我手上没有多少外设，然后又必须远程到 Windows 电脑上去操作，于是先实现了一下 UART 通信。
在网上找到了 ben-marshall/uart 一个简易的实现，很快做到了一直在串口上打印
A 字符。接着我开始尝试实现一个简单的串口回显。一开始，我直接把 UART 读到的数据直接输出，果然可以了，但是一旦传输速率跟不上了，就会丢失数据。于是我添加了 FIFO IP 核，然后把读入的数据存入 FIFO ，又从 FIFO 中读取数据写入到 UART 中去。不过发现了一个小 BUG：每次打印的是倒数第二次输入的字符，即丢失了第一个字符。在张宇翔学长的帮助下找到了问题：当 FIFO 的读使能信号为高时，其数据在下一个时钟周期才来，于是解决方案就是等到数据来的时候再向 UART 中写数据：
always @ (posedge clk_in) begin uart_tx_en <= uart_fifo_re; end
这样就解决了这个问题。完整代码在 jiegec/learn_licheetang 中。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。
This work is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.