OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4593|回复: 9

[XILINX] 如何解决[Common 17-55] 'set_property' expects at least one object.

[复制链接]

4

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2022-8-9
在线时间
7 小时
发表于 2022-8-9 15:18:43 | 显示全部楼层 |阅读模式
1金钱
ZYNQ7020开发板嵌入式SDK开发
OV5640_LCD工程和OV5640_HDMI工程
按照例程设计完成Block Design并添加XDC约束文件后生成比特流时就存在critical warning如图所示
[Common 17-55] 'set_property' expects at least one object. ["D:/English/FPGA_ZYNQ_PROJ/34/OV5640_HDMI.srcs/constrs_1/new/ov5640_hdmi.xdc":4]  
如果直接运行源码OV5640_LCD工程和OV5640_HDMI工程的话不报这个警告,直接在原工程复制Block Design在运行也会报这个critical warning
请问该如何解决?万分感谢!

XDC约束文件

XDC约束文件

block design

block design

critical warning

critical warning
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

101

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2021-8-3
在线时间
151 小时
发表于 2022-8-10 10:36:35 | 显示全部楼层
直接在原工程复制Block Design是啥意思
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2022-8-9
在线时间
7 小时
 楼主| 发表于 2022-8-11 11:14:28 | 显示全部楼层
helloqds 发表于 2022-8-10 10:36
直接在原工程复制Block Design是啥意思

就是在例程的工程里create Block Design后,将例程的Block Design复制到新建的Block Design,然后删除例程里原来的Block Design,之后再运行也会报这个问题,但直接用例程就不会报问题
回复

使用道具 举报

2

主题

101

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2021-8-3
在线时间
151 小时
发表于 2022-8-11 11:40:04 | 显示全部楼层
shadow1989 发表于 2022-8-11 11:14
就是在例程的工程里create Block Design后,将例程的Block Design复制到新建的Block Design,然后删除例 ...

没有这样用过,为啥这样复制。你直接新建block design,然后不要复制,按教程的步骤,自己手动添加需要用到的ip,然后添加引脚约束,最后编译生成bit文件,还会报错吗
回复

使用道具 举报

2

主题

101

帖子

0

精华

高级会员

Rank: 4

积分
640
金钱
640
注册时间
2021-8-3
在线时间
151 小时
发表于 2022-8-11 12:34:41 | 显示全部楼层
你自己建的工程,block design中ov5640_capture_data ip核截图看看
回复

使用道具 举报

13

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
527
金钱
527
注册时间
2012-10-27
在线时间
65 小时
发表于 2022-8-11 14:37:12 | 显示全部楼层
首先我没看过这个例程,仅能根据常识提供一些信息,希望能有所帮助。

现在有两个名字,cam_pclk、cam_pclk_IBUF;以及和 Block Design 的 Top_Wrapper.v 里面信号的名字,三者能否对上。

第四行的Warning:'set_property' expects at least one object,是否可以理解为设计中并没有找到以这个名称命名的信号引脚?

供参考
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2022-8-9
在线时间
7 小时
 楼主| 发表于 2022-8-12 15:18:41 | 显示全部楼层
helloqds 发表于 2022-8-11 11:40
没有这样用过,为啥这样复制。你直接新建block design,然后不要复制,按教程的步骤,自己手动添加需要用 ...

感谢回复!会报错,我就是因为这样照着例程新建工程后generate bitstream后就一直存在这个问题,然后我直接运行原工程不报错,复制修改原工程也报错,很奇怪
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2022-8-9
在线时间
7 小时
 楼主| 发表于 2022-8-12 15:20:35 | 显示全部楼层
helloqds 发表于 2022-8-11 12:34
你自己建的工程,block design中ov5640_capture_data ip核截图看看
  1. module  ov5640_capture_data(
  2.     input                 rst_n           ,  //复位信号

  3.         //摄像头接口
  4.     input                 cam_pclk        ,  //cam 数据像素时钟
  5.     input                 cam_vsync       ,  //cam 场同步信号
  6.     input                 cam_href        ,  //cam 行同步信号
  7.     input        [7:0]    cam_data        ,  //cam 数据
  8.     output                cam_rst_n       ,  //cmos 复位信号,低电平有效
  9.     output                cam_pwdn        ,  //电源休眠模式选择

  10.         //RGB888接口
  11.     output                cmos_frame_clk,    //时钟信号
  12.     output                cmos_frame_ce,     //时钟使能信号

  13.         output                cmos_frame_vsync,  //帧有效信号
  14.     output                cmos_active_video ,//数据有效
  15.     output       [23:0]   cmos_frame_data    //有效数据
  16. );

  17. //parameter define

  18. //寄存器全部配置完成后,先等待10帧数据
  19. //待寄存器配置生效后再开始采集图像
  20. localparam  WAIT_FRAME = 4'd10  ;            //寄存器数据稳定等待的帧个数

  21. //reg define
  22. reg          rst_n_d0 =1;
  23. reg          rst_n_syn =1;
  24. reg          cam_vsync_d0 ;
  25. reg          cam_vsync_d1 ;
  26. reg          cam_href_d0 ;
  27. reg          cam_href_d1 ;
  28. reg   [3:0]  cmos_ps_cnt ;                  //等待帧数稳定计数器
  29. reg          wait_done ;
  30. reg          byte_flag ;
  31. reg   [7:0]  cam_data_d0 ;
  32. reg  [15:0]  cmos_data_16b ;                //用于8位转16位的临时寄存器
  33. reg          byte_flag_d0 ;

  34. //wire define
  35. wire  pos_vsync ;

  36. //*****************************************************
  37. //**                    main code
  38. //*****************************************************

  39. //采输入场同步信号的上升沿
  40. assign  pos_vsync  = (~cam_vsync_d1) & cam_vsync_d0 ;

  41. //不对摄像头硬件复位,固定高电平
  42. assign  cam_rst_n = 1'b1;

  43. //电源休眠模式选择 0:正常模式 1:电源休眠模式
  44. assign  cam_pwdn  = 1'b0;

  45. assign  cmos_frame_clk   = cam_pclk;
  46. //由于摄像头输入接口的两个时钟周期对应于RGB888输出接口的一个有效时钟周期
  47. //所以要给出数据有效标志即RGB888输出接口的时钟使能信号
  48. assign  cmos_frame_ce     = wait_done  ?  (byte_flag_d0 & cmos_active_video) || (!cmos_active_video) : 1'b0;
  49. assign  cmos_frame_vsync  = wait_done  ?  cam_vsync_d1  :  1'b0; //输出帧有效信号
  50. assign  cmos_active_video = wait_done  ?  cam_href_d1   :  1'b0; //输出行有效信号
  51. assign  cmos_frame_data   = wait_done  ?
  52.         { cmos_data_16b[15:11],3'd0 , cmos_data_16b[10:5],2'd0 , cmos_data_16b[4:0],3'd0 }
  53.         :  24'd0; //输出数据

  54. //复位信号的异步复位、同步释放处理
  55. always @(posedge cam_pclk or negedge rst_n) begin
  56.     if(!rst_n) begin
  57.         rst_n_d0 <= 1'b0;
  58.         rst_n_d0 <= 1'b0;
  59.     end
  60.     else begin
  61.         rst_n_d0  <= 1'b1;
  62.         rst_n_syn <= rst_n_d0;
  63.     end
  64. end

  65. //对行、场同步信号的延迟打拍
  66. always @(posedge cam_pclk or negedge rst_n_syn) begin
  67.     if(!rst_n_syn) begin
  68.         cam_vsync_d0 <= 1'b0;
  69.         cam_vsync_d1 <= 1'b0;

  70.         cam_href_d0 <= 1'b0;
  71.         cam_href_d1 <= 1'b0;
  72.     end
  73.     else begin
  74.         cam_vsync_d0 <= cam_vsync;
  75.         cam_vsync_d1 <= cam_vsync_d0;

  76.         cam_href_d0 <= cam_href;
  77.         cam_href_d1 <= cam_href_d0;
  78.     end
  79. end

  80. //寄存器全部配置完成后,先等待10帧数据
  81. //待寄存器配置生效后再开始采集图像
  82. always @(posedge cam_pclk or negedge rst_n_syn) begin
  83.     if(!rst_n_syn)
  84.         cmos_ps_cnt <= 4'd0;
  85.     else if(pos_vsync && (cmos_ps_cnt < WAIT_FRAME))
  86.         cmos_ps_cnt <= cmos_ps_cnt + 4'd1;  //对帧数进行计数
  87. end

  88. //等待完成后 给出 等待完成信号
  89. always @(posedge cam_pclk or negedge rst_n_syn) begin
  90.     if(!rst_n_syn)
  91.         wait_done <= 1'b0;
  92.     else if((cmos_ps_cnt == WAIT_FRAME) && pos_vsync)
  93.         wait_done <= 1'b1;
  94. end


  95. //8位数据转16位RGB565数据
  96. always @(posedge cam_pclk or negedge rst_n_syn) begin
  97.     if(!rst_n_syn) begin
  98.         cmos_data_16b <= 16'd0;
  99.         cam_data_d0 <= 8'd0;
  100.         byte_flag <= 1'b0;
  101.     end
  102.     else if( cam_href ) begin  //cam 行同步信号
  103.         byte_flag   <= ~byte_flag;
  104.         cam_data_d0 <= cam_data;
  105.         if(byte_flag)
  106.             cmos_data_16b <= {cam_data_d0,cam_data};
  107.     end
  108.     else begin
  109.         byte_flag <= 1'b0;
  110.         cam_data_d0 <= 8'b0;
  111.     end
  112. end

  113. always @(posedge cam_pclk or negedge rst_n_syn) begin
  114.     if(!rst_n_syn)
  115.         byte_flag_d0 <= 1'b0;
  116.     else
  117.         byte_flag_d0 <= byte_flag;
  118. end

  119. endmodule
复制代码


ov5640_capture_data

ov5640_capture_data
回复

使用道具 举报

4

主题

9

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2022-8-9
在线时间
7 小时
 楼主| 发表于 2022-8-12 15:35:38 | 显示全部楼层
arm51avr 发表于 2022-8-11 14:37
首先我没看过这个例程,仅能根据常识提供一些信息,希望能有所帮助。

现在有两个名字,cam_pclk、cam_pc ...

感谢回复!cam_pclk信号在自定义IP核上,cam_pclk_IBUF信号在Top_Wrapper.v 里面并不存在,这也是我很疑惑的地方。如图教程中说增加 “ set_property CLOCK_DEDICATED_ROUTE FALSE”语句来取消软件对时钟专用引脚的检查。这是由于 Vivado 软件检测到像素时钟(cam_pclk)是一个时钟端口,而分配到芯片上的引脚并不是一个时钟专用引脚,因此增加这一语句可取消软件对 cam_pclk 时钟专用引脚的检查,否则软件会在综合时会报错。
不太理解这里为什么设定成cam_pclk_IBUF信号
在例程给的源码中,直接运行不报错,自己按照例程新建的工程就会报错





3.png
2.png
1.png
回复

使用道具 举报

13

主题

202

帖子

0

精华

高级会员

Rank: 4

积分
527
金钱
527
注册时间
2012-10-27
在线时间
65 小时
发表于 2022-8-13 08:06:00 | 显示全部楼层
我把例程下载下来看了下,cam_pclk_IBUF 是这么来的。

cam_pclk_IBUF.jpg

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-10-4 02:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表