zoukankan      html  css  js  c++  java
  • vc709时钟信号报单端信号错误的记录

    话说,为什么我又要跑去搞fpga玩了,不是应该招个有经验的开发人员么?大概是练度不够吧……

    Xilinx这个板子阿,真鸡儿贵,我这还没啥基础,慢慢试吧:

    看了乱七八糟各种文档先不提,我还是决定先控制LED玩玩,应该挺简单吧

    首先写了段verilog:

    module test(clk_p,
    rst,
    data);
    input clk_p;
    input[4:0] rst;
    output reg[7:0] data;
    
    always @(posedge clk_p) begin
      ……
    end
    endmodule

    然后指定引脚,把clk_p指定成user_clock_p,执行synthesis和implemention都没啥问题,但是一生成bitstream就报错,说是IOstandard不能为default。。。但是讲道理啊,我查了文档user_clock_p是LVDS,选项里没这个啊。

    好吧,直接手动改一下DXC约束文件:

    set_property PACKAGE_PIN AK34 [get_ports clk_p]
    set_property IOSTANDARD LVDS [get_ports clk_p]

    这回试试,结果又说什么clk_p是is Single-Ended but has an IOStandard of LVDS which can only support Differential,这怎么可楞,别人都这么写的啊?查了半天发现现在时钟信号要加缓冲器,不然会被vivado自动优化成单端信号进行处理报错,MDZZ

    最后变成这样终于对了:

    module test(clk_p,
    clk_n,
    rst,
    data);
    input clk_p;
    input clk_n;
    input[4:0] rst;
    output reg[7:0] data;
    
    IBUFDS #(.IOSTANDARD("LVDS")) IBUFDS_inst (.O (cl1),
    .I (clk_p), 
    .IB (clk_n));
    
    always @(posedge cl1) begin
      if (rst[0]) begin
        data = 0;
      end
      if (rst[1]) begin
        data = data << 1;
      end
      if (rst[2]) begin
        data = data - 1;
      end
      if (rst[3]) begin
        data = data >> 1;
      end
      if (rst[4]) begin
        data = data + 1;
      end
    end
    endmodule

    不过这个写法有毒,我手点一下按钮过了好多个时钟上升沿,导致和我想的不太一样,不过不管怎样至少是能用了。。先这样吧

  • 相关阅读:
    CG_Lession
    linux学习网站大全[转]
    C++ books
    Linux 建议学习路径[转]
    talking C++ STL
    Factory
    计算机图像图形学相关好书推荐
    ASP.NET控件缩写大全
    web开发面试题一
    ASP.Net面试题之二
  • 原文地址:https://www.cnblogs.com/gaoze/p/6483308.html
Copyright © 2011-2022 走看看