这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » FPGA编译问题

共7条 1/1 1 跳转至

FPGA编译问题

菜鸟
2014-05-13 19:11:15     打赏

自己写了一个写12864的状态机,但是编译之后显示资源利用为0,是全编译,但是就是查不到问题,请高手帮忙看一下!



module lcd12864(sys_clk,
sys_rst,
lcd_rs,
lcd_rw,
lcd_e,
lcd_dataout
);
 
input sys_clk;
input sys_rst;
output lcd_rs;
output lcd_rw;
output lcd_e;
output [7:0]lcd_dataout;


reg lcd_e;
reg lcd_rs;
reg lcd_rw;
reg [7:0]lcd_dataout;
wire [7:0]dataout_sbuff;


reg [14:0]clk_div_delay_cnt;


reg div_clk;


reg complete_flag;
reg[2:0]current_state;
reg[2:0]next_state;
reg setfunction_ok;
reg cleardisplay_ok;
reg setdisplaystate_ok;
reg display_ok;
reg [9:0]address_cnt;
wire [9:0]address;








parameter state_idle=3'b001;
parameter state_setfunction=3'b011;
parameter state_cleardisplay=3'b111;
parameter state_setdisplaystate=3'b110;
parameter state_display=3'b101;




always@(posedge sys_clk or negedge sys_rst)
begin
if(1'b0==sys_rst)
clk_div_delay_cnt<=15'd0;
else
if(15'd32000==clk_div_delay_cnt)
begin
clk_div_delay_cnt<=15'd0;
div_clk<=~div_clk;
end
else
clk_div_delay_cnt<=clk_div_delay_cnt+15'd1;
end




always@(posedge div_clk or negedge sys_rst)
begin
if(1'b0==sys_rst)
current_state<=state_idle;
else
if(1'b1==complete_flag)
current_state<=state_idle;
else
current_state<=next_state;
end




always@(current_state or setdisplaystate_ok or setfunction_ok or display_ok or cleardisplay_ok or complete_flag)
begin
case(current_state)
state_idle:
begin
if(1'b1==complete_flag)
next_state<=state_idle;
else
next_state<=state_setfunction;
end
state_setfunction:
begin
if(1'b1==setfunction_ok&&1'b1==complete_flag)
next_state<=state_idle;
else
next_state<=state_cleardisplay;
end
state_cleardisplay:
begin
if(1'b1==cleardisplay_ok&&1'b1==complete_flag)
next_state<=state_idle;
else
next_state<=state_setdisplaystate;
end
state_setdisplaystate:
begin
if(1'b1==setdisplaystate_ok&&1'b1==complete_flag)
next_state<=state_idle;
else
next_state<=state_display;
end
state_display:
begin
if(1'b1==display_ok&&1'b1==complete_flag)
next_state<=state_idle;
else
next_state<=state_display;
end
default:next_state<=state_idle;
endcase
end


always@(posedge div_clk )
begin
case(current_state)
state_idle:
if(1'b1==complete_flag)
lcd_e<=1'b0;
else
lcd_e<=1'b1;
state_setfunction:
begin
// lcd_e<=1'b1;
lcd_rs<=1'b0;
lcd_rw<=1'b0;
lcd_dataout<=8'b0011_0000;
setfunction_ok<=1;
end
state_cleardisplay:
begin
// lcd_e<=1'b1;
lcd_rs<=1'b0;
lcd_rw<=1'b0;
lcd_dataout=8'b0000_0001;
cleardisplay_ok<=1;
end
state_setdisplaystate:
begin
// lcd_e<=1'b1;
lcd_rs<=1'b0;
lcd_rw<=1'b0;
lcd_dataout<=8'b0000_1100;
setdisplaystate_ok<=1;
end
state_display:
begin
if(10'd1023==address_cnt)
begin
display_ok<=1;
complete_flag<=1'b1;
address_cnt<=10'd0;
end
else
begin
address_cnt<=address_cnt+10'd1;
lcd_e<=~lcd_e;
lcd_rs<=1'b1;
lcd_rw<=1'b0;
lcd_dataout<=dataout_sbuff;
end
end
default:complete_flag<=0;
endcase
end


assign address=address_cnt;


rom rom(.address(address),
.clock(sys_clk),
.q(dataout_sbuff)
);

endmodule




关键词: FPGA     编译     问题     资源利用    

高工
2014-05-13 20:25:10     打赏
2楼

编译能通过,说明没有语法错误,但是综合是通过不了的:

lcd_dataout<=8'b0011_0000;
setfunction_ok<=1;
end
state_cleardisplay:
begin
// lcd_e<=1'b1;
lcd_rs<=1'b0;
lcd_rw<=1'b0;
lcd_dataout=8'b0000_0001;
cleardisplay_ok<=1;
end
state_setdisplaystate:
begin
// lcd_e<=1'b1;
lcd_rs<=1'b0;
lcd_rw<=1'b0;
lcd_dataout<=8'b0000_1100;

 

lcd_dataout既有阻塞赋值又有非阻塞赋值,改一下


菜鸟
2014-05-13 20:48:54     打赏
3楼
还是不行,还是显示逻辑资源利用为0,只显示用了多少引脚,其余的都是零!

高工
2014-05-13 20:53:45     打赏
4楼

那就是你的逻辑都被优化掉了。。建议你检查一下综合结果里面的报告


菜鸟
2014-05-13 21:25:23     打赏
5楼
真是这样,报告里面查到了这个,为什么会出现这样的结果?在什么情况下会出现这样的结果? ; Registers Removed During Synthesis                                                   ; +----------------------------------------+---------------------------------------------+ ; Register name                          ; Reason for Removal                          ; +----------------------------------------+---------------------------------------------+ ; setdisplaystate_ok                     ; Stuck at VCC due to stuck port data_in      ; ; cleardisplay_ok                        ; Stuck at VCC due to stuck port data_in      ; ; setfunction_ok                         ; Stuck at VCC due to stuck port data_in      ; ; display_ok                             ; Stuck at VCC due to stuck port data_in      ; ; complete_flag                          ; Stuck at VCC due to stuck port data_in      ; ; address_cnt[0..9]                      ; Stuck at GND due to stuck port clock_enable ; ; lcd_e~reg0                             ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[0]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[1]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[2]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[3]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[4]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[5]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[6]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_dataout[7]~reg0                    ; Stuck at GND due to stuck port data_in      ; ; lcd_rw~reg0                            ; Stuck at GND due to stuck port data_in      ; ; lcd_rs~reg0                            ; Stuck at GND due to stuck port data_in      ; ; current_state.state_idle               ; Lost fanout                                 ; ; current_state.state_setfunction        ; Lost fanout                                 ; ; current_state.state_display            ; Lost fanout                                 ; ; current_state.state_setdisplaystate    ; Lost fanout                                 ; ; current_state.state_cleardisplay       ; Lost fanout                                 ; ; current_state~5                        ; Lost fanout                                 ; ; current_state~6                        ; Lost fanout                                 ; ; div_clk                                ; Lost fanout                                 ; ; clk_div_delay_cnt[0..14]               ; Lost fanout                                 ; ; Total Number of Removed Registers = 49 ;                                             ; +----------------------------------------+-------

高工
2014-05-13 21:49:13     打赏
6楼
都被remove了,所以资源利用率为0啊:相当于这些reg都做了无用功。仔细检查一下逻辑吧 如果你不想看到资源利用率为0,在状态机的default里随便加点东西,比如: default:  begin   complete_flag<=0;   lcd_rs<=1'b1; lcd_rw<=1'b0;  end 这样资源利用率就不是0了,但是逻辑应该还不是你想要的,如果做后仿真结果肯定不是你的原意

工程师
2014-05-22 19:27:47     打赏
7楼
是不是工程中有其他设计文件,编译的可能不是你这个文件,重新打开此文件的工程,重新编译下

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]