initial//初始化模塊好像無(wú)?
begin
CS1581_reg=1; //上電時(shí)1581不片選
RS1581_reg=1;//1581上電后不處于復(fù)位狀態(tài)
Int_Data_reg=0;
RD_reg=0;
Int_WR_reg=0;
OUT_reg=0;
SICLK_reg=1;
SIDIN_reg=1;
ACICS_reg=1;
CS_6963_reg=1;
IOPE5_reg=1;
DIR_reg=1;
//LED_Data_reg=8'b11111111;
LED_Data_reg=8'h00;//開機(jī)LED全滅
end
always @ ( CS1)
begin
if(CS1==1'b0)
if(A==6'b010111)
CS1581_reg=0; //片選1581,地址為0x5700,讀寫地址相同。
else
CS1581_reg=1;
else
CS1581_reg=1;
end
always @ ( negedge RD )
begin
if(CS1==1'b0)
begin
if( A==6'b011110) //1581復(fù)位低地址為0x5e00,讀操作;
RS1581_reg=0;
else if(A==6'b011101) //1581復(fù)位高地址為0x5d00,讀操作。
RS1581_reg=1;
else if(A==6'b011100) //外部中斷讀地址為0x5c00,讀操作。
begin
RD_reg=1;
D_reg=Int_Data_reg;
end
else if(A==6'b011011)//8路開關(guān)量輸入,地址為0x5b00,讀操作。
begin
RD_reg=1;
D_reg={IN8,IN7,IN6,IN5,IN4,IN3,IN2,IN1};
end
/*-------------------------------------------------------------
在此加入鍵盤測(cè)試功能,//8個(gè)按鍵地址,0x5f00
--------------------------------------------------------------*/
else if(A==6'b011111)
begin
RD_reg=1;
D_reg={K8,K7,K6,K5,K4,K3,K2,K1};
end
/*-------------------------------------------------------------
在此加入CPLD芯片接入測(cè)試功能
--------------------------------------------------------------*/
else if(A==6'b010101) //CPLD自檢地址0x5500
begin
RD_reg=1;
D_reg=8'h5a;
end
else
RD_reg=0;
end
end
always @ ( posedge WR ) //寫信號(hào)要用上升沿,否則數(shù)據(jù)可能不穩(wěn)
begin
if(CS1==1'b0)
begin
if(A==6'b011100) //外部中斷標(biāo)志位寫地址為0x5c00,寫操作。
Int_WR_reg=1;
else if(A==6'b011011) //8路開半量輸出,地址為0x5b00,寫操作。
begin
OUT_reg=D;
end
else if(A==6'b011010) //AIC芯片模擬SPI口各信號(hào)選通,寫操作,地址0x5a00
begin
// LOAD_DA_reg=D[4];
// CS_DA_reg=D[7];
ACICS_reg=D[2];
SIDIN_reg=D[1];
SICLK_reg=D[0];
end
else if(A==6'b010001) //LCM命令寫低,地址0x5100
begin
IOPE5_reg=0;
CS_6963_reg=0;
end
else if(A==6'b010010) //LCM命令寫高,地址0x5200
begin
IOPE5_reg=0;
CS_6963_reg=1;
end
else if(A==6'b010011) //LCM數(shù)據(jù)寫低,地址0x5300
begin
IOPE5_reg=1;
CS_6963_reg=0;
end
else if(A==6'b010100) //LCM數(shù)據(jù)寫高,地址0x5400
begin
IOPE5_reg=1;
CS_6963_reg=1;
end
else if(A==6'b010101) //SPI片選信號(hào),地址0x5500
begin
SPICS_reg=D[0];
end
else if(A==6'b010110) //485片選信號(hào),地址0x5600
begin
OE485_reg=D[0];
end
else if(A==6'b011111) //8個(gè)發(fā)光二極管地址,0x5f00
begin
LED_Data_reg=D;
end
else
Int_WR_reg=0;
end
end
always @( EXINT1 or EXINT2 or EXINT3 or EXINT4 or EXINT5 or NMI1 or NMI2 )
begin
INT1_reg=EXINT1 & EXINT2 & EXINT3 & EXINT4 & EXINT5;
NMI_reg=NMI1 & NMI2;
Int_Data_reg = (Int_WR_reg ==1) ? 0:Int_Data_reg;//此模塊應(yīng)順序執(zhí)行,但目前這樣寫也能正常工作
if( ~(INT1_reg & NMI_reg) )
Int_Data_reg={ 1'b0,~EXINT5 ,~EXINT4 ,~EXINT3, ~EXINT2, ~EXINT1,~NMI2, ~NMI1};
end