搜索
bottom↓
回复: 10

是不是 每个fpga工程都要加时序约束,无论工程大小?

[复制链接]

出0入0汤圆

发表于 2013-1-30 10:27:34 | 显示全部楼层 |阅读模式
是不是 每个fpga工程都要加时序约束,无论工程大小?
我做了个很简单的fpga程序,没有加时序约束 ,
接收uart数据,并解析,然后使用fpga的四个端口输出spi信号,即:data output, data input,data enble,data clk,
并不是很复杂,原来在一个板子上调试非常正常,没有出过问题,
现在换了一个板子,就不能正常发出spi信号了,
是不是没有加时序约束的原因?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2013-1-30 10:30:09 | 显示全部楼层
流水灯的程序从没加过

出0入0汤圆

发表于 2013-1-30 11:06:05 | 显示全部楼层
基本可以判断不是,
时序约束不好的话可能出现的情况是:
低速跑没问题,时钟速度高了就出错

出0入0汤圆

 楼主| 发表于 2013-1-30 11:30:56 | 显示全部楼层
本帖最后由 german010 于 2013-1-30 11:34 编辑
y595906642 发表于 2013-1-30 11:06
基本可以判断不是,
时序约束不好的话可能出现的情况是:
低速跑没问题,时钟速度高了就出错 ...


那应该就是verilog代码写的有问题了
能否帮忙看下 哪里有问题?
1) top模块
uart_rx uart_rx(
                                .clk(clk_25m),
                               
                                .key3_rst_n(rst_n),
                                .rs232_rx(rs232_rx),
                                .clk_bps(clk_bps_r),
                                .bps_start(bps_start_r),
                                //=========
                                .state0(state0),
                                 .state1(state1),
                                .state_trg(state_trg),
                               
                                .test_flg3(test_flg3),   
                                //--------
                                .setup_en(spi_en_pulse),
                                .spi_data(spi_data)       // 此处为通过 串口接收的 spi需要发送的数据,
                               
                                );


spi_ctrl spi_ctrl_inst(
         
                         .clk(clk_1m_2),
                         //.clkp(clkp),
                        // .rst_n(rst_n),
                         .key4_in(spi_en_pulse),                         
                         .spi_data(spi_data),
                         //---------------------
                         .sclk(sclk),
                         .csb(csb),
                         .mosi(mosi)
                         );

2) spi 程序 ,其中key4_in已经 改为一个uart接收的命令,使用case语句置为1时 来使能
`timescale 1ns / 1ps
module spi_ctrl(
          clk,
                       
                //         rst_n,
                         key4_in,//命令spi模块开始发送spi数据
                         
                         spi_data,//通过 串口接收的spi 数据
                         sclk,   //sclk时钟
                         csb,   //spi总线发送使能,低电平有效
                         
                         mosi, //spi数据发送端口
                         
                         );
//
input clk;




//input rst_n;
input key4_in;
output sclk;

output mosi;

input [23:0]spi_data;       
reg csb_r;               
output csb;
reg [7:0]cnt ;
reg sclk_r;
reg [7:0]mosi_index;

reg clk_r;
always @(posedge clk or negedge key4_in)                         
begin
   if(!key4_in)
            begin
              cnt   <=8'd1;       
                        clk_r <=0;
end
         else
             begin
                  if(cnt<=8'd75)            
                   cnt   <=cnt+8'd1;       
                 clk_r = ~clk_r;       
                  end
end
//
reg mosi_r;
reg [7:0]num;
always @(posedge clk or negedge key4_in)
  if(!key4_in)
     csb_r <=1'b0;
  else
  begin
        case (cnt[7:1])
                                               
                                                8'd1: begin  mosi_r <= spi_data[23];csb_r <=1'b1;end         //发送bit0
                                                8'd2: mosi_r <= spi_data[22];        //发送bit1
                                                8'd3: mosi_r <= spi_data[21];        //发送bit2
                                                8'd4: mosi_r <= spi_data[20];        //发送bit3
                                                8'd5: mosi_r <= spi_data[19];        //发送bit4
                                                8'd6: mosi_r <= spi_data[18];        //发送bit5
                                                8'd7: mosi_r <= spi_data[17];        //发送bit6
                                                8'd8: mosi_r <= spi_data[16];        //发送bit7
                                               
                                               
                                                8'd9: mosi_r <= spi_data[15];        //发送bit0
                                                8'd10: mosi_r <= spi_data[14];        //发送bit1
                                                8'd11: mosi_r <= spi_data[13];        //发送bit2
                                                8'd12: mosi_r <= spi_data[12];        //发送bit3
                                                8'd13: mosi_r <= spi_data[11];        //发送bit4
                                                8'd14: mosi_r <= spi_data[10];        //发送bit5
                                                8'd15: mosi_r <= spi_data[9];        //发送bit6
                                                8'd16: mosi_r <= spi_data[8];        //发送bit7
                                               
                                               
                                               
                                                8'd17: mosi_r <= spi_data[7];        //发送bit0
                                                8'd18: mosi_r <= spi_data[6];        //发送bit1
                                                8'd19: mosi_r <= spi_data[5];        //发送bit2
                                                8'd20: mosi_r <= spi_data[4];        //发送bit3
                                                8'd21: mosi_r <= spi_data[3];        //发送bit4
                                                8'd22: mosi_r <= spi_data[2];        //发送bit5
                                                8'd23: mosi_r <= spi_data[1];        //发送bit6
                                                8'd24: mosi_r <= spi_data[0];        //发送bit7
                                                8'd25: mosi_r <= 1'b0;        //发送bit7
                                                8'd35: csb_r <=1'b0;
                                               
                                                 default:;
                                endcase
        end
//-------------------------------------------------

assign sclk =  clk_r && csb_r;
assign mosi =  mosi_r;
assign csb  = ~csb_r;
endmodule

出0入0汤圆

发表于 2013-1-30 12:08:36 | 显示全部楼层
时序仿真下看看,输出时钟和数据是否满足被驱动芯片的要求就行了!

出0入0汤圆

发表于 2013-1-30 12:11:33 | 显示全部楼层
做仿真了吗?
如果之前没有问题 现在有问题
测试环境又没有变化的话
可以先查查板子的接线

出0入0汤圆

发表于 2013-1-30 17:11:27 | 显示全部楼层
一般就看下默认状态下的综合报告,满足要求了就不做时序约束了。

出0入0汤圆

 楼主| 发表于 2013-1-31 11:52:30 | 显示全部楼层
本帖最后由 german010 于 2013-1-31 11:56 编辑
pocker5200 发表于 2013-1-30 17:11
一般就看下默认状态下的综合报告,满足要求了就不做时序约束了。


请教一下 ,看综合后哪一项?    呵呵,
刚开始弄FPGA,

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2013-1-31 12:03:17 | 显示全部楼层
撸主你的图除了summary其他选项我都看不懂……
我只用过xilinx的ISE,综合完会有一个详细的综合报告,还会给出一些具体参考指标和建议。

出0入0汤圆

发表于 2013-1-31 12:05:20 | 显示全部楼层
低于100MHz的逻辑基本不用加约束

出0入0汤圆

 楼主| 发表于 2013-2-1 09:23:27 | 显示全部楼层
pocker5200 发表于 2013-1-31 12:03
撸主你的图除了summary其他选项我都看不懂……
我只用过xilinx的ISE,综合完会有一个详细的综合报 ...

哦,我用 altera的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 07:20

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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