EGo1下板_LED循环点亮


项目源码:
链接:https://pan.baidu.com/s/10s2ncSJfKUnL13BAPKWDNg
提取码:1234


20230605
补充下:
链接:https://pan.baidu.com/s/1kd_GDUkYB73toXYTutYzzw
提取码:4321

底下这个代码就是top_led_dynamic模块,和这篇博客的data_display连接一下就是全部代码
https://blog.csdn.net/Bunny9__/article/details/115048130


题目介绍:
LED循环电路
使用开发板的4个数码管,通过将数据不断旋转和移动来显示更多的信息。例如,设计输入的信息是10位数(如“0123456789”),可以将其显示为“0123”、“1234”、“2345”、 … 、“7890”、“8901”。

  1. 电路的输入信号en进行启用或暂停旋转,输入信号dir指定方向(向左或向右);
  2. 用案件控制循环,按一下显示一组数据。

1. 模块调用关系

在这里插入图片描述

2. 数据确定模块data_display

module data_display(
    output  reg     [3:0]   data3,
    output  reg     [3:0]   data2,
    output  reg     [3:0]   data1,
    output  reg     [3:0]   data0,
    
    input   wire            en,     // start or pause
    input   wire            dir,    // cycle direction
    input   wire            play,   // cycle once
    input   wire            rst    // reset
    );
    
    always @ (negedge rst or posedge play)  begin
        if (rst == 1'b0) begin
            data3   <=  4'h1;
            data2   <=  4'h2;
            data1   <=  4'h3;
            data0   <=  4'h4;
        end else begin
            if (en == 1'b1) begin
                if (dir == 1'b1) begin
                    data3   <=  (data3 + 1) % 10;
                    data2   <=  (data2 + 1) % 10;
                    data1   <=  (data1 + 1) % 10;
                    data0   <=  (data0 + 1) % 10;
                end else begin
                    data3   <=  (data3 + 9) % 10;
                    data2   <=  (data2 + 9) % 10;
                    data1   <=  (data1 + 9) % 10;
                    data0   <=  (data0 + 9) % 10;
                end
            end else begin
                data3   <=  data3;
                data2   <=  data2;
                data1   <=  data1;
                data0   <=  data0;
            end
        end
    
    end
    
    
endmodule

3. 约束文件

set_property -dict {PACKAGE_PIN G2 IOSTANDARD LVCMOS33} [get_ports {an[3]}]
set_property -dict {PACKAGE_PIN C2 IOSTANDARD LVCMOS33} [get_ports {an[2]}]
set_property -dict {PACKAGE_PIN C1 IOSTANDARD LVCMOS33} [get_ports {an[1]}]
set_property -dict {PACKAGE_PIN H1 IOSTANDARD LVCMOS33} [get_ports {an[0]}]

set_property -dict {PACKAGE_PIN B4 IOSTANDARD LVCMOS33} [get_ports {seg[0]}]
set_property -dict {PACKAGE_PIN A4 IOSTANDARD LVCMOS33} [get_ports {seg[1]}]
set_property -dict {PACKAGE_PIN A3 IOSTANDARD LVCMOS33} [get_ports {seg[2]}]
set_property -dict {PACKAGE_PIN B1 IOSTANDARD LVCMOS33} [get_ports {seg[3]}]
set_property -dict {PACKAGE_PIN A1 IOSTANDARD LVCMOS33} [get_ports {seg[4]}]
set_property -dict {PACKAGE_PIN B3 IOSTANDARD LVCMOS33} [get_ports {seg[5]}]
set_property -dict {PACKAGE_PIN B2 IOSTANDARD LVCMOS33} [get_ports {seg[6]}]
set_property -dict {PACKAGE_PIN D5 IOSTANDARD LVCMOS33} [get_ports {seg[7]}]

set_property -dict {PACKAGE_PIN P17 IOSTANDARD LVCMOS33} [get_ports clk_sys ]

set_property -dict {PACKAGE_PIN R2 IOSTANDARD LVCMOS33} [get_ports {en}]
set_property -dict {PACKAGE_PIN M4 IOSTANDARD LVCMOS33} [get_ports {dir}]
set_property -dict {PACKAGE_PIN N4 IOSTANDARD LVCMOS33} [get_ports {rst}]
set_property -dict {PACKAGE_PIN R1 IOSTANDARD LVCMOS33} [get_ports {play}]

4. 错误分析及解决

报错信息:

[Place 30-574] Poor placement for routing between an IO pin and BUFG. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets play_IBUF] >
play_IBUF_inst (IBUF.O) is locked to IOB_X1Y16
and play_IBUF_BUFG_inst (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y0

[Place 30-99] Placer failed with error: ‘IO Clock Placer failed’
Please review all ERROR, CRITICAL WARNING, and WARNING messages during placement to understand the cause for failure.

[Common 17-69] Command failed: Placer could not place all instances

综合可以通过,实现报错
原因:在data_display模块中always的敏感信号用了除时钟以外的外部信号rst和play(这里用了板子的开关SW),因为Vivado在处理外部时钟信号的时候会自动添加BUFG模块来去除时钟的抖动,但是其他的信号就不会这样做,这样的话在always语句的敏感信号列表中使用没有去抖动的外部信号就有可能导致系统不稳定,所以会出现这个错误。
解决方法:在约束文件下多添加,这两句可以都加或者只加一条,不明白,暂缓

 //set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets reset_IBUF] 
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets play] 
set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets rst] 
  • 3
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值