1072|2

160

帖子

0

资源

一粒金砂(中级)

国产FPGA高云GW1N-4系列开发板测评之——软件篇2 [复制链接]

对于简单的设计,物理约束我们可能只需要绑定一下管脚、电平,时序约束我们只需要约束一下主时钟即可满足设计和时序的要求,但是对于复杂些的设计,物理约束不仅仅关注管脚电平还需要关注管脚的具体配置,而时序约束也不仅仅是主时钟约束这么简单,往往还有时序例外,输入输出延时等等,一般来说最终的设计往往会充分的消耗FPGA的资源,这样会造成布线时序都会很紧张的情况,可以说一个设计大部分时间都会花在调整时序的路上,所以物理时序约束是FPGA设计中非常重要的一点,今天我们来着重学习一下高云软件物理约束和时序约束相关知识

 

首先是物理约束部分:

我们新建示例工程counter,这里有一点建议就是新建工程不能默认打开定位到之前的目录下要从新手动定位很不方便。

1-1.png

module counter1(out, cout, data, load, cin, clk, ce, clko);

output [7:0] out;

output cout;

output clko;

input ce;

input [7:0] data;

input load, cin, clk;

reg [7:0] out;

always @(posedge clk)

begin

if (load)

out = data;

else

out = out + cin;

end

assign cout = &out & cin;

wire clkout;

CLKDIV clkdiv_inst (

.CLKOUT(clkout),

.HCLKIN(clk),

.RESETN(1'b1),

.CALIB(1'b0)

);

defparam clkdiv_inst.DIV_MODE = "2";

defparam clkdiv_inst.GSREN = "false";

DQCE dqce_inst (

.CLKOUT(clko),

.CLKIN(clkout),

.CE(ce)

);

endmodule

 

 工程中包含一个8位计数器,一个时钟分频器原语例化,一个动态象限时钟使能原语例化(这两个原语例化后面时钟资源篇我们也会讲到)。

综合后打开FloorPlanner物理约束编辑器。

2-2.png

高云云源软件提供FloorPlanner物理约束编辑器,支持对I/O、原语、Group等属性及位置信息读取、编辑以及生成新的约束文件。打开后会在工程文件夹下生成一个物理约束文件.cst

 

高云云源软件不像vivado那样有很多自动布线策略,它没有可选择的余地,所以复杂设计中要让时序收敛必然会更多的通过调整时序和物理约束(手动布线)来达到时序收敛的目的,

接下来我们通过FloorPlanner的学习来了解怎样进行物理约束以及各种物理约束的意义

  1. I/O约束

单击IO Constraints 编辑窗口,(1)Location约束可以结合Chip Array窗口将选中的Port拖拽至Chip Array窗口对应的位置,位置可以是几个端口(软件最终选择端口编号大的那个,后面我们验证一下),(2)Location约束可以直接在IO Constraints 编辑窗口Port后面的Location栏双击直接填需要绑定的位置,多个位置用英文逗号隔开,属性约束可以直接在Port端口后面对应的属性栏修改。(3)Location约束和属性约束还可以直接在.cst文件中用语法的方式添加如下:

IO_LOC “obj_name” obj_location [exclusive];

IO_LOC “obj_name” obj_location [exclusive];

3-3.png 4-4.png 5-5.png

2、原语约束

单击Primitive Constraints 编辑窗口,(1)右键选择 Select Primitives,在下拉列表框中选择需要约束的原语即可对其进行位置位置约束,可以在Chip Array窗处于Constraints视图状态下直接拖拽到约束的位置,或直接在Locations输入位置,(2)原语位置约束还可以直接在.cst文件中用语法的方式添加如下:

INS_LOC “obj_name” obj_location [exclusive];

6-6.png 6-7.png 6-9.png 6-10.png

3、原语组约束

   单击Group Constraints 编辑窗口(1)右键New Primitive Group,输入组名添加组成员即可添加一条原语组约束,同样右键New Relative Group输入组名添加组成员即可添加一条相对组约束(2)原语组约束和相对位置约束还可以直接在.cst文件中用语法的方式添加如下:

GROUP group_name = { “obj_names ” } [exclusive];

GROUP group_name += { “obj_names ” } [exclusive];

GRP_LOC group_name group_location[exclusive];

 

REL_GROUP group_name = { “obj_names ” };

REL_GROUP group_name += { “obj_names ” };

INS_RLOC “obj_name” relative_location;

7-1.png 7-2.png 7-3.png 其中原语组约束好说就是将几个成员都约束到相同绝对位置,而相对位置组约束就是以位置最小的成员为相对位置原点及GRID角标最小的,其他成员约束到相对于这个原点的某个位置上(角标相减得相对位移,用起来很奇怪,感觉不大实用)如下图:

7-4.png 7-5.png

4、资源预留约束

   单击Resource Reservation 编辑窗(1)右键Resource Resources,在Chip  Array 窗处于Constraints视图状态下拖拽约束至需要预留的位置即可,或在Locations栏直接编辑位置(2)资源预留位置约束还可以直接在.cst文件中用语法的方式添加如下:

LOC_RESERVE location [ res_obj ];

8-1.png 8-2.png 保留一部分资源让布线布局不使用,这个约束还是很有用的

5、全局时钟分配约束

   单击Clock Assignment 编辑窗(1)右键Resource Resources,选择net选择type选择signal即可(2)全局时钟分配约束还可以直接在.cst文件中用语法的方式添加如下:

CLOCK_LOC “net_name” global_clocks = fanout ;

9-1.png 9-2.png 这个约束可以将某些重要路径路由到全局时钟资源上,对时序收敛是有很有效的。

6、时钟象限约束

   单击Quadrant Constraints编辑窗(1)右键Select Dcs/Dqce,选择DCS或DQCE,然后在Position 下方选择象限即可(2)时钟象限约束还可以直接在.cst文件中用语法的方式添加如下:

INS_LOC “obj_name” quadrant;

10-1.png 10-2.png 10-3.png 这个约束主要是对动态时钟控制器这个原语进行象限的约束。

7、高速时钟约束

   单击Hclk Constraints 编辑窗(1)右键Select Hclk,选择DCS,然后在Position 下方选择位置即可(2)高速时钟约束还可以直接在.cst文件中用语法的方式添加如下:

INS_LOC “obj_name” location;

11-1.png 11-2.png 11-3.png 这条约束主要针对CLKDIV、DLLDLY约束到相关位置

8、参考电压约束

   单击Vref Constraints编辑窗(1)右键Define Vref Driver,在Chip  Array 视图的Constraints视图状态下拖拽到参考的端口位置或直接在Locations栏编辑相应位置即可(2)参考电压约束还可以直接在.cst文件中用语法的方式添加如下:

USE_VREF_DRIVER vref_name [location];

12-1.png 12-2.png 这条约束的作用是为各个Bank选择外部参考电压,一般情况下不会用到,

 以上就是高云云源软件物理约束的内容,当然,这些约束在设计中不是必须全都有的还有配合时序约束收敛及功耗等情况适当添加,下一篇我们继续学习时序约束部分

 

下面演示当端口约束到几个IO时软件会最终会选择哪个IO:

13-1.png 13-2.png

a0450c3843c0fee45c7a31ff299bc5be.gif


回复

619

帖子

0

资源

纯净的硅(中级)

楼主花了不少时间呀,还是比较用心的,我不是做软件的,还是要支持下你!

点评

谢谢!没啥,学习记录了一下罢了  详情 回复 发表于 2021-12-27 09:50

回复

160

帖子

0

资源

一粒金砂(中级)

Fred_1977 发表于 2021-12-26 11:22 楼主花了不少时间呀,还是比较用心的,我不是做软件的,还是要支持下你!

谢谢!没啥,学习记录了一下罢了


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

查找数据手册?

EEWorld Datasheet 技术支持

最新文章 更多>>
    推荐帖子
    Nor Flash工作时电源纹波过大

    正在使用一款MX25L12805D 的Nor Flash芯片,程序固件烧录在里面,主芯片boot时候读取改芯片时候,发现电流纹波挺大, 加了470 ...

    再见2019,你好2020”+从技术高工到采购研发的转变

    在过去2019年的一年里: 1、从技术工程师到公司采购技术专业负责人的转变 2、学到了一些采购时的一些谈判技巧 3、从技术 ...

    CircuitPython 电子钟

    用ItsyBitsy M0 Express开发板和铜丝制作的电子钟,使用CircuitPython编程 https://hackaday.io/project/165822-circ ... ...

    嵌入式系统编程定义和应用

    简单来说,嵌入式技术是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗 ...

    C2000 ePWM模块

    以TMS320F28030为例,其它型号可能有差异,不过大同小异。 在TI C2000 DSP中,PWM模块是一个独立的模块,并没有算作通用定时 ...

    msp430的编程器和仿真器

    对于MSP430来说,无论仿真还是烧写程序一般可以通过:JTAG、SBW、BSL接口进行。JTAG、SBW接口可以用于仿真接口,BSL接口不能用 ...

    关闭
    站长推荐上一条 1/10 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表