【问题标题】:Lattice iCE40-HX8K Board - UART莱迪思 iCE40-HX8K 板 - UART
【发布时间】:2015-09-04 20:58:43
【问题描述】:

我的 Lattice iCE40-HX8K 板有以下 verilog 代码:

uart.v:

module uart(input clk, output TXD);

reg [3:0] count;
reg [9:0] data;
reg z;

initial begin

data[9:0] = 10'b1000000000; // Startbit = 1, Stopbit = 0

z = 0;

end

always@(posedge clk)
begin

  if(count == 1250) //9600x per Second (1250) = Baudrate
    begin

      count <= 0;

      TXD = data[z];

      z = z + 1;
 if(z == 10)
        begin
        z = 0;
        end
      else
        begin
        end

    end
  else
    begin
      count <= count + 1;
    end


end

endmodule

为了接收 UART 数据,我在 Ubuntu 14.04 下使用 gtkterm。 我已将 gtkterm 中的波特率设置为 9600。 如果我现在用每次编程时收到的代码对我的 FPGA 进行编程 十六进制“00”(与 8 个使用位无关)。

谁能告诉我哪里出了问题?

感谢您的支持。

【问题讨论】:

    标签: verilog fpga uart


    【解决方案1】:

    你的设计至少有两个明显的问题:

    1. 您的count 只有 4 位宽,因此无法计数到 1250。它必须至少有 11 位宽才能计数到 1250。

    2. 另外,您的z 只有 1 位宽,因此它只能保存值 0 和 1。它必须至少有 4 位宽才能数到 10。

      李>

    您还应该阅读blocking vs. non-blocking assignments。在顺序逻辑中使用阻塞赋值的方式可能会导致 Verilog 仿真模型中的竞争条件。

    您应该始终为您的 HDL 代码编写测试平台并在尝试在硬件中运行它之前对其进行仿真。用于您的设计的测试平台很简单:

    module uart_testbench;
            reg clk = 1;
            always #5 clk = ~clk;
    
            uart uut (
                    .clk(clk)
            );
    
            initial begin
                    $dumpfile("uart.vcd");
                    $dumpvars(0, uut);
                    repeat (1000000) @(posedge clk);
                    $finish;
            end
    endmodule
    

    【讨论】:

    • 首先,感谢您的快速回复。我已经解决了你提到的问题,现在我收到了无穷无尽的“J”链(图片:[链接]embdev.net/attachment/267072/…)。但是如果我看一下“数据”中的数据位(我已将其更改为 data[9:0] = 10'b0010100101; // Startbit = 0, Stopbit = 1):01010010 我应该收到一个 ASCII“ R”。我现在的问题是为什么我得到的是“J”而不是“R”?非常感谢:)
    • @user5228734 至少偶尔应该在停止位和开始位之间添加一个暂停(比符号长),以便接收器有机会同步到符号边界。否则,它会将您的一些数据位解释为开始/停止位,并将您的开始/停止位解释为有效负载的一部分。尤其是如果一遍又一遍地重复相同的 10 位模式:接收方如何知道字节边界在哪里,而两个符号之间没有停顿以进行同步?
    猜你喜欢
    • 2018-09-25
    • 2010-10-06
    • 2012-04-30
    • 2018-06-18
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 2020-02-18
    • 2019-10-17
    相关资源
    最近更新 更多