1
0
mirror of git://projects.qi-hardware.com/nn-usb-fpga.git synced 2025-01-09 16:00:14 +02:00
nn-usb-fpga/Examples/PIC/logic/PIC.v
2010-04-01 00:58:08 -05:00

80 lines
1.5 KiB
Verilog

module PIC ( DI, DO, addr,
ISRC_LP, nIRQ,
CS, nwe, noe,
MCLK,
RESET);
input [7:0] DI;
output [7:0] DO;
input [6:0] addr;
input [6:0] ISRC_LP;
output nIRQ;
input CS, nwe, noe;
input MCLK, RESET;
//------------------------------
// registros internos
reg nIRQ;
reg [7:0] DO; //Registro de salida.
reg [7:0] IRQEnable; //Interrupt Mask
reg IRQSoft; //Soft interrupt flag
wire [7:0] ISRCF, IREG_LP;
assign ISRCF = {ISRC_LP, IRQSoft}; //
assign IREG_LP = ( ISRCF & IRQEnable); //
always @(posedge MCLK)
begin
nIRQ <= ~(|IREG_LP);
end
always @(CS or addr or noe or IREG_LP or ISRCF or IRQEnable)
begin
if (~CS & noe)
begin
case (addr)
7'b0000000: DO<=IREG_LP; //IRQStatus
7'b0000001: DO<=ISRCF; //IRQRawStatus
7'b0000010: DO<=IRQEnable; //IRQEnable
default: DO<=8'b0;
endcase
end
else DO<=8'b0;
end
always @(posedge MCLK or posedge RESET)
begin
if (RESET)
begin
IRQEnable <= 8'b0;
IRQSoft <= 1'b0;
end
else
begin
if (~CS & nwe)
begin
case (addr)
7'b0000010: IRQEnable <= ( DI | IRQEnable); //EnableSet
7'b0000011: IRQEnable <= (~DI & IRQEnable); //EnableClear
7'b0000100: IRQSoft <= DI[1]; //Programmed IRQ
default: ;
endcase
end
end
end
endmodule