在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2903|回复: 5

[求助] 求助:XILINX的时序约束问题

[复制链接]
发表于 2015-12-15 17:49:17 | 显示全部楼层 |阅读模式
50资产
主工程模块的程序如下所示。其实就是一个简单的数据通路。前端以24M的时钟接收数据。然后将收到的数据写入到FIFO中,再以198M的时钟从FIFO中读出数据,然后再输出。
      由于时序约束这方面一直都没有弄明白。那位大神帮忙,写一个完整的时序约束。我以后也好照猫画虎的去做。
module      Test(
                    iClk,
                    
                    iDval,
                    iData_2,
                    
                    oDval,
                    oData_2
);
input               iClk;
input               iDval;
input       [1:0]   iData_2;
output  reg         oDval;
output  reg [1:0]   oData_2;

wire        Clk198M;
//该模块内部就是简单的调用了PLL_BASE原语
PLL_Cfg pll0(
                        .iClk(iClk),        //24M
                        
                        .oClk1(Clk198M),    //198M
                        .oClk2(),
                        .oClk3(),
                        .oClk4(),
                        .oClk5(),
                        .oClk6(),
                        .oPllLocked()
);
reg                 Dval0;
reg         [1:0]   Data0;
always @ (posedge iClk)
begin
    Dval0 <= iDval;
    Data0 <= iData_2;
end
wire                prog_empty;
reg                 RdFifoEn;
wire        [1:0]   FifoOut;
//XILINX FIFO的IP核
TsetFifo    fof0(
  .rst          (1'b0),
  
  .wr_clk       (iClk),         //24M的频率下,将输入端口的数据写入到FIFO中
  .wr_en        (iDval),
  .din          (iData_2),
  
  .rd_clk       (Clk198M),      //以198M的频率,从FIFO中读出数据
  .rd_en        (RdFifoEn),
  .dout         (FifoOut),
  
  .full         (),
  .empty        (),
  .prog_empty   (prog_empty)
);
always @ (posedge Clk198M)
begin
    if(!prog_empty)
        RdFifoEn <= 1'b1;
    else
        RdFifoEn <= 1'b0;
end
//将从FIFO中读出的数据输出
always @ (posedge Clk198M)
begin
    oData_2 <= FifoOut;
    oDval   <= RdFifoEn;
end

endmodule
我自己参考一些资料,写了几句相应的约束:
//时钟约束
NET "iClk" TNM_NET = iClk;
TIMESPEC TS_iClk = PERIOD "iClk" 41.667 ns HIGH 50%;
//输入信号约束
INST "iData_2<0>" TNM = group_in;
INST "iData_2<1>" TNM = group_in;
INST "iDval" TNM = group_in;
TIMEGRP "group_in" OFFSET = IN 10 ns VALID 5 ns BEFORE "iClk" RISING;
也不知道是否正确,若有不对的地方,请指正。另外,输出端口的约束,我则完全不知道从哪下手了。请大神一定指教啊。

最佳答案

查看完整内容

楼主好,我也在学习中,时序分时钟、输入输出、虚拟路径。 其中时钟24m约束了,198m时钟也需要约束,但是是经过pll不知道是否默认也约束的。 其次,group_in里数据怎么会是10ns更新一次呢?那用iclk采样会漏掉很多,而且应该是IN 5 ns valid 10ns 的语法。
发表于 2015-12-15 17:49:18 | 显示全部楼层
楼主好,我也在学习中,时序分时钟、输入输出、虚拟路径。
其中时钟24m约束了,198m时钟也需要约束,但是是经过pll不知道是否默认也约束的。
其次,group_in里数据怎么会是10ns更新一次呢?那用iclk采样会漏掉很多,而且应该是IN 5 ns valid 10ns 的语法。
 楼主| 发表于 2015-12-16 09:57:09 | 显示全部楼层
回复 2# houjiajun8

谢谢回复。
      我看很多资料上都说ISE的PLL会自动约束。所以没有约束198M的时钟。使用ISE中的Create Timing Constraints进行约束时,只能看到iClk是要求约束的。约束完后,会发现PLL的输出自动添加上了,如下图所示:
PLL约束.jpg
     另外,最后的Group_in,其实那两个参数我也没有弄明白,随便填了个数。确实弄错了,谢谢指正。  还有我主要还是想看一下,输出端口的offset_out怎样设置。在Create Timing Constraints,对输出端约束时,也只能看到iClk的时钟,实际上应该用198M进行约束的,应该怎么做呢?
 楼主| 发表于 2015-12-16 10:04:00 | 显示全部楼层
回复 3# ydh00002

group_Out.jpg
这个图就是我将输出的为为oData oDval设置成一个group_out组。然后再对这个组进行offset_out约束的ISE界面。但时钟选项中,只有iClk选项,所以下一步就不知道怎么处理了
发表于 2015-12-16 12:43:36 | 显示全部楼层
24M还约束啥
 楼主| 发表于 2015-12-16 12:48:14 | 显示全部楼层
回复 5# 菜鸟要飞


    多谢关注。这只是一个示例程序。目的在于学习约束的方法而已。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条


小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-11-22 15:55 , Processed in 0.021249 second(s), 8 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表