我在用MAX+PLUS II编一个单片机和CPLD综合运用的程序。
在仿真后出现:
Warning: GLOBAL primitive on node 'wr' feeds logic - non-global signal usage may result
Warning: GLOBAL primitive on node 'rd' feeds logic - non-global signal usage may result
想请教一下该怎么改啊!
cpld.v
///////////////////////////////////////////////////////////////////////////////////////////
`define lcd_wi_addr 16'hff09 //LCD模块写命令地址
`define lcd_wd_addr 16'hff0b //LCD模块写数据地址
`define lcd_rd_addr 16'hff0a //LCD模块读数据地址
`define lcd_ri_addr 16'hff0e //LCD模块读命令地址
`define key_addr 16'hff03 //键盘模块地址
`define no_rw 3'h0 //总线状态标志
`define key_rw 3'h1
`define ram_rw 3'h3
`define lcd_ri 3'h4
`define lcd_rd 3'h5
`define lcd_wi 3'h6
`define lcd_wd 3'h7
module cpld
(MCU_data,MCU_address,keyin,lcd,int,wr,rd,ale,lcd,lcd_d_i,lcd_r_w,lcd_e);
input[7:0] MCU_address; //单片机地址线
inout[7:0] MCU_data; //单片机数据线
input[7:0] keyin; //键盘
//input[12:0] RAM_address; //外部RAM地址线
//inout[8:1] RAM_data; //外部RAM数据线
//output RAM_oe; //RAM的OE控制线
//output RAM_we; //RAM的WE控制线
inout[7:0] lcd; //LCD数据线
output lcd_d_i; //LCD的D/I控制线
output lcd_r_w; //LCD的R/W控制线
output lcd_e; //LCD使能端
//output lcd_cs1;
//output lcd_cs2;
//output lcd_ret;
output int; //键盘中断输出口
input wr;
input rd;
input ale; //地址锁存
reg[1:0] addr_sel; //总线状态寄存器
reg[7:0] lcd_reg; //LCD状态寄存器
reg lcd_di_reg; //写时:LCD数据/命令选择寄存器
reg lcd_rw_reg; //写时:LCD读/写选择寄存器
reg lcd_di_reg1; //读时:LCD数据/命令选择寄存器
reg lcd_rw_reg1; //读时:LCD读/写选择寄存器
reg lcd_e_reg; //LCD使能端寄存器
reg[7:0] MCU_data_reg; //总线寄存器
reg[7:0] key_status; //键盘状态寄存器
//reg[12:0] RAM_address_reg; //RAM地址寄存器
//reg[8:1] RAM_data_reg; //RAM数据寄存器
reg int_reg; //中断信号寄存器
/////////////////////////////////////////////////
always @(negedge ale)
begin
if({MCU_address,MCU_data}==`key_addr) //键盘操作
addr_sel=`key_rw;
else if({MCU_address,MCU_data}==`lcd_wi_addr) //LCD操作
addr_sel=`lcd_wi;
else if({MCU_address,MCU_data}==`lcd_wd_addr)
addr_sel=`lcd_wd;
else if({MCU_address,MCU_data}==`lcd_ri_addr)
addr_sel=`lcd_ri;
else if({MCU_address,MCU_data}==`lcd_rd_addr)
addr_sel=`lcd_rd;
//else if({MCU_address,MCU_data}==`ram_addr)
// addr_sel=`ram_rw;
else
addr_sel=`no_rw; //挂起总线
end
/////////////////////////////////////////////////
always @(keyin) //键盘中断处理
begin
if(keyin==key_status)
int_reg=1;
else
int_reg=0;
end
/////////////////////////////////////////////////
always @(negedge wr)
begin
/////向LCD写入命令字///
if(addr_sel==`lcd_wi)
begin
assign lcd_di_reg=0;
assign lcd_rw_reg=0;
lcd_reg=MCU_data;
end
else if(addr_sel==`lcd_wd)
begin
assign lcd_di_reg=1;
assign lcd_rw_reg=0;
lcd_reg=MCU_data;
end
/////向外部RAM写数据//////???????
// else if(addr_sel==`ram_rw)
// begin
// assign RAM_we=1'b0;
// end
/////////////////////////
end
/////////////////////////////////////////////////
always@(negedge rd)
begin
/////从LCD读入数据////
if(addr_sel==`lcd_ri)
begin
assign lcd_di_reg1=0;
assign lcd_rw_reg1=1;
MCU_data_reg=lcd;
end
else if(addr_sel==`lcd_rd)
begin
assign lcd_di_reg1=1;
assign lcd_rw_reg1=1;
MCU_data_reg=lcd;
end
else if(addr_sel==`key_rw) //读取键盘的状态
begin
MCU_data_reg=keyin;
key_status=keyin;
end
//////////////////从外部RAM读出数据/////?????
// else if(addr_sel==`ram_rw)
// begin
// assign RAM_oe=1'b0;
// assign RAM_we=1'b1;
// end
////////////////////////////////////////
end
//////////////////////////////////////////
always@(wr or rd)
begin
lcd_e_reg=!(wr&&rd);
end
///////////////////////////////////////////////
assign lcd_e=lcd_e_reg;
assign MCU_data=((rd==1'b1)||(addr_sel==`no_rw))?8'hz:MCU_data_reg;
assign lcd=(lcd_e==1'b1)?lcd_reg:8'hz;
assign int=int_reg;
assign lcd_d_i=(wr==1'b0)?lcd_di_reg:lcd_di_reg1;
assign lcd_r_w=(wr==1'b0)?lcd_rw_reg:lcd_di_reg1;
// assign RAM_data=(addr_sel==`ram_rw)?RAM_data_reg:8hz; //若RAM没有占用总线则设RAM数据线位高阻态
endmodule
[此贴子已经被作者于2005-4-4 10:00:51编辑过] |