是不是 每个fpga工程都要加时序约束,无论工程大小?
是不是 每个fpga工程都要加时序约束,无论工程大小?我做了个很简单的fpga程序,没有加时序约束 ,
接收uart数据,并解析,然后使用fpga的四个端口输出spi信号,即:data output, data input,data enble,data clk,
并不是很复杂,原来在一个板子上调试非常正常,没有出过问题,
现在换了一个板子,就不能正常发出spi信号了,
是不是没有加时序约束的原因? 流水灯的程序从没加过{:lol:} 基本可以判断不是,
时序约束不好的话可能出现的情况是:
低速跑没问题,时钟速度高了就出错 本帖最后由 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 时序仿真下看看,输出时钟和数据是否满足被驱动芯片的要求就行了! 做仿真了吗?
如果之前没有问题 现在有问题
测试环境又没有变化的话
可以先查查板子的接线 一般就看下默认状态下的综合报告,满足要求了就不做时序约束了。 本帖最后由 german010 于 2013-1-31 11:56 编辑
pocker5200 发表于 2013-1-30 17:11 static/image/common/back.gif
一般就看下默认状态下的综合报告,满足要求了就不做时序约束了。
请教一下 ,看综合后哪一项? 呵呵,
刚开始弄FPGA,
撸主你的图除了summary其他选项我都看不懂……{:sweat:}
我只用过xilinx的ISE,综合完会有一个详细的综合报告,还会给出一些具体参考指标和建议。 低于100MHz的逻辑基本不用加约束 pocker5200 发表于 2013-1-31 12:03 static/image/common/back.gif
撸主你的图除了summary其他选项我都看不懂……
我只用过xilinx的ISE,综合完会有一个详细的综合报 ...
哦,我用 altera的
页:
[1]