module dsp_cpld(
in_addr,
in_dsp_cs,
in_rd_cpld,
// nPXWE,
inout_cpld_data,
out_Xint1, //dsp外部中断信号
out_Xint2, //dsp外部中断信号
in_clk, //全局时钟
in_dsp_we, //DSP的WE写使能信号
);
parameter dspAddBit = 7;
parameter dspDatBit = 15;
input in_clk;
input in_dsp_cs;
input in_rd_cpld;
input in_dsp_we;
//input nPXWE;
input [dspAddBit:0] in_addr;
inout [dspDatBit:0] inout_cpld_data;
output out_Xint1; //dsp外部中断信号
output out_Xint2; //dsp外部中断信号
reg temp_flag;
reg readOK_flag;
reg [dspDatBit:0] temp_cpld_data [0:15]; // W_RAM[0x7d:0x8F]
reg [dspDatBit:0] out_cpld_data;
wire [dspDatBit:0] inout_cpld_data;
assign inout_cpld_data = temp_flag?out_cpld_data:16'hzzzz;
always @(in_dsp_cs or in_rd_cpld or in_dsp_we or in_addr)
begin
if(1'b0==in_dsp_cs)
begin
if(1'b0==in_rd_cpld)
begin
case(in_addr)
8'h00:
begin
if(readOK_flag==1)
out_cpld_data<=16'h1234;
else
out_cpld_data<=16'h6050;
// temp_flag<=1;
end
8'h01: out_cpld_data<=16'h6010;
8'h02: out_cpld_data<=16'h6020;
8'h04:
begin
if(temp_cpld_data[0]==16'h5050)
out_cpld_data<=16'h1234;
else
out_cpld_data<=16'h6020;
end
8'h05: out_cpld_data<=16'h6020;
8'h06: out_cpld_data<=16'h6020;
8'h07: out_cpld_data<=16'h6020;
8'h08: out_cpld_data<=16'h6020;
8'h22: out_cpld_data<=16'h6030;
8'h23:
begin
if(temp_cpld_data[2]==16'h5050)
out_cpld_data<=16'h2222;
else
out_cpld_data<=16'h5555;
end
default : ;
endcase
temp_flag<=1;
end
// else
// begin
// out_cpld_data<=16'hzzzz;
// end
else if(1'b0==in_dsp_we)
begin
// in_addr<=in_addr-16'h80;
// temp_flag<=0;
case(in_addr)
8'h81: temp_cpld_data[0]<=inout_cpld_data;
8'h82: temp_cpld_data[1]<=inout_cpld_data;
8'h83: temp_cpld_data[2]<=inout_cpld_data;
8'h84: temp_cpld_data[3]<=inout_cpld_data;
8'h85: temp_cpld_data[4]<=inout_cpld_data;
8'h86: temp_cpld_data[5]<=inout_cpld_data;
8'h87: temp_cpld_data[6]<=inout_cpld_data;
8'h88: temp_cpld_data[7]<=inout_cpld_data;
8'h89: temp_cpld_data[8]<=inout_cpld_data;
default : ;
endcase
temp_flag<=0;
end
end
else
begin
temp_flag<=0;
end
end
endmodule
|