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

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

  • 相关阅读:
    微软外服 AlI In One
    js 循环多次和循环一次的时间的性能对比 All In One
    vue inject All In One
    Excel 表格数据倒置 All In One
    SVG tickets All In One
    OH MY ZSH All In One
    js array for loop performance compare All In One
    mac terminal show You have new mail All In one
    新闻视频 26 制作母版页
    转自牛腩 母版页和相对路径
  • 原文地址:https://www.cnblogs.com/gaoze/p/6483308.html
Copyright © 2011-2022 走看看