german010 发表于 2013-1-30 10:27:34

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

是不是 每个fpga工程都要加时序约束,无论工程大小?
我做了个很简单的fpga程序,没有加时序约束 ,
接收uart数据,并解析,然后使用fpga的四个端口输出spi信号,即:data output, data input,data enble,data clk,
并不是很复杂,原来在一个板子上调试非常正常,没有出过问题,
现在换了一个板子,就不能正常发出spi信号了,
是不是没有加时序约束的原因?

zgxcom123 发表于 2013-1-30 10:30:09

流水灯的程序从没加过{:lol:}

y595906642 发表于 2013-1-30 11:06:05

基本可以判断不是,
时序约束不好的话可能出现的情况是:
低速跑没问题,时钟速度高了就出错

german010 发表于 2013-1-30 11:30:56

本帖最后由 german010 于 2013-1-30 11:34 编辑

y595906642 发表于 2013-1-30 11:06 static/image/common/back.gif
基本可以判断不是,
时序约束不好的话可能出现的情况是:
低速跑没问题,时钟速度高了就出错 ...

那应该就是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 spi_data;       
reg csb_r;               
output csb;
reg cnt ;
reg sclk_r;
reg 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 num;
always @(posedge clk or negedge key4_in)
if(!key4_in)
   csb_r <=1'b0;
else
begin
      case (cnt)
                                               
                                                8'd1: beginmosi_r <= spi_data;csb_r <=1'b1;end         //发送bit0
                                                8'd2: mosi_r <= spi_data;        //发送bit1
                                                8'd3: mosi_r <= spi_data;        //发送bit2
                                                8'd4: mosi_r <= spi_data;        //发送bit3
                                                8'd5: mosi_r <= spi_data;        //发送bit4
                                                8'd6: mosi_r <= spi_data;        //发送bit5
                                                8'd7: mosi_r <= spi_data;        //发送bit6
                                                8'd8: mosi_r <= spi_data;        //发送bit7
                                               
                                               
                                                8'd9: mosi_r <= spi_data;        //发送bit0
                                                8'd10: mosi_r <= spi_data;        //发送bit1
                                                8'd11: mosi_r <= spi_data;        //发送bit2
                                                8'd12: mosi_r <= spi_data;        //发送bit3
                                                8'd13: mosi_r <= spi_data;        //发送bit4
                                                8'd14: mosi_r <= spi_data;        //发送bit5
                                                8'd15: mosi_r <= spi_data;        //发送bit6
                                                8'd16: mosi_r <= spi_data;        //发送bit7
                                               
                                               
                                               
                                                8'd17: mosi_r <= spi_data;        //发送bit0
                                                8'd18: mosi_r <= spi_data;        //发送bit1
                                                8'd19: mosi_r <= spi_data;        //发送bit2
                                                8'd20: mosi_r <= spi_data;        //发送bit3
                                                8'd21: mosi_r <= spi_data;        //发送bit4
                                                8'd22: mosi_r <= spi_data;        //发送bit5
                                                8'd23: mosi_r <= spi_data;        //发送bit6
                                                8'd24: mosi_r <= spi_data;        //发送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

rootxie 发表于 2013-1-30 12:08:36

时序仿真下看看,输出时钟和数据是否满足被驱动芯片的要求就行了!

y595906642 发表于 2013-1-30 12:11:33

做仿真了吗?
如果之前没有问题 现在有问题
测试环境又没有变化的话
可以先查查板子的接线

pocker5200 发表于 2013-1-30 17:11:27

一般就看下默认状态下的综合报告,满足要求了就不做时序约束了。

german010 发表于 2013-1-31 11:52:30

本帖最后由 german010 于 2013-1-31 11:56 编辑

pocker5200 发表于 2013-1-30 17:11 static/image/common/back.gif
一般就看下默认状态下的综合报告,满足要求了就不做时序约束了。

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

pocker5200 发表于 2013-1-31 12:03:17

撸主你的图除了summary其他选项我都看不懂……{:sweat:}
我只用过xilinx的ISE,综合完会有一个详细的综合报告,还会给出一些具体参考指标和建议。

newbier 发表于 2013-1-31 12:05:20

低于100MHz的逻辑基本不用加约束

german010 发表于 2013-2-1 09:23:27

pocker5200 发表于 2013-1-31 12:03 static/image/common/back.gif
撸主你的图除了summary其他选项我都看不懂……
我只用过xilinx的ISE,综合完会有一个详细的综合报 ...

哦,我用 altera的
页: [1]
查看完整版本: 是不是 每个fpga工程都要加时序约束,无论工程大小?